[osg-users] Problems porting from osg-3.4.0 to osg-3.6.0

Herman Varma hermanvarma at eastlink.ca
Wed Sep 12 08:29:34 PDT 2018


Hello I am having trouble porting  Ben Discoe’s VTP software from openSceneGraph-3.4.0 to osg-3.6.2

The problem lies in implementing the macro to replace META_object in shadowTechnique.h as depicted below.
. Can someone point out where my problem is.

/** CSimpleInterimShadowTechnique provides an implementation of a depth map shadow tuned to the needs of VTP.*/
class CSimpleInterimShadowTechnique : public osgShadow::ShadowTechnique
{
public:

//  working **********************  in openSceneGraph-3.4.0
//     CSimpleInterimShadowTechnique();
//     CSimpleInterimShadowTechnique(const  
//        CSimpleInterimShadowTechnique& es, const osg::CopyOp& 
//        copyop=osg::CopyOp::SHALLOW_COPY);
//     META_Object(osgShadow, CSimpleInterimShadowTechnique);
//***********************************************************

// Macro not working *****************in openSceneGraph-3.6.2
       CSimpleInterimShadowTechnique();
       CSimpleInterimShadowTechnique(const CSimpleInterimShadowTechnique& es, const osg::CopyOp& copyop = osg::CopyOp::SHALLOW_COPY);

       virtual bool isSameKindAs(const osg::Object* obj) const { return dynamic_cast<const CSimpleInterimShadowTechnique*>(obj) != NULL; } \
       virtual const char* libraryName() const { return "osgShadow"; }\
       virtual const char* className() const { return "CSimpleInterimShadowTechnique"; }


//**************************************************************

In the new implementation I am getting a C2259 error

2>c:\vtp_vsc\terrainsdk\vtlib\vtosg\nodeosg.cpp(1026): error C2259: 'CSimpleInterimShadowTechnique': cannot instantiate abstract class

2>c:\vtp_vsc\terrainsdk\vtlib\vtosg\nodeosg.cpp(1026): note: due to following members:

2>c:\vtp_vsc\terrainsdk\vtlib\vtosg\nodeosg.cpp(1026): note: 'osg::Object *osg::Object::cloneType(void) const': is abstract

2>c:\apis\openscenegraph-3.6.2\build\include\osg\object(80): note: see declaration of 'osg::Object::cloneType'

2>c:\vtp_vsc\terrainsdk\vtlib\vtosg\nodeosg.cpp(1026): note: 'osg::Object *osg::Object::clone(const osg::CopyOp &) const': is abstract

2>c:\apis\openscenegraph-3.6.2\build\include\osg\object(84): note: see declaration of 'osg::Object::clone'

2>c:\vtp_vsc\terrainsdk\vtlib\vtosg\nodeosg.cpp(1026): note: 'void osgShadow::ShadowTechnique::resizeGLObjectBuffers(unsigned int)': is abstract

2>c:\apis\openscenegraph-3.6.2\build\include\osgshadow\shadowtechnique(66): note: see declaration of 'osgShadow::ShadowTechnique::resizeGLObjectBuffers'

2>c:\vtp_vsc\terrainsdk\vtlib\vtosg\nodeosg.cpp(1026): note: 'void osgShadow::ShadowTechnique::releaseGLObjects(osg::State *) const': is abstract

2>c:\apis\openscenegraph-3.6.2\build\include\osgshadow\shadowtechnique(71): note: see declaration of 'osgShadow::ShadowTechnique::releaseGLObjects'

The area where the error manifests is in this section of nodeOSG.cpp

//////////////////////////////////////////////////////////////////////
// vtShadow
//

vtShadow::vtShadow(const int ShadowTextureUnit, int LightNumber) :
       m_ShadowTextureUnit(ShadowTextureUnit), m_LightNumber(LightNumber)
{
       setReceivesShadowTraversalMask(ReceivesShadowTraversalMask);
       setCastsShadowTraversalMask(CastsShadowTraversalMask);

#if VTLISPSM
       osg::ref_ptr<CLightSpacePerspectiveShadowTechnique> pShadowTechnique = new CLightSpacePerspectiveShadowTechnique;
       // No need to set the BaseTextureUnit as the default of zero is OK for us
       // But the ShadowTextureUnit might be different (default 1)
       pShadowTechnique->setShadowTextureUnit(m_ShadowTextureUnit);
       pShadowTechnique->setLightNumber(m_LightNumber);
#else
       //errorC2259 cannot instantiate abstract class in openSceneGraph-3.6.2 
       //statement working in osg-3.4.0
       osg::ref_ptr<CSimpleInterimShadowTechnique> pShadowTechnique = new CSimpleInterimShadowTechnique;//*****************************Error here
#endif

#if !VTLISPSM
#if VTDEBUGSHADOWS
       // add some instrumentation
       pShadowTechnique->m_pParent = this;
#endif

       pShadowTechnique->SetLightNumber(LightNumber);
       pShadowTechnique->SetShadowTextureUnit(m_ShadowTextureUnit);
       pShadowTechnique->SetShadowSphereRadius(50.0);
#endif
       setShadowTechnique(pShadowTechnique.get());

       SetOsgNode(this);
}

Help would be appreciated


Cheers,
Herman

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=74726#74726







More information about the osg-users mailing list