forked from teamnwah/openmw-tes3coop
Fix debug drawer crash
This commit is contained in:
parent
95465a1489
commit
1fd9fba7a3
2 changed files with 37 additions and 16 deletions
|
@ -28,21 +28,41 @@ DebugDrawer::DebugDrawer(osg::ref_ptr<osg::Group> parentNode, btDynamicsWorld *w
|
||||||
mParentNode->addChild(mGeode);
|
mParentNode->addChild(mGeode);
|
||||||
mGeode->setNodeMask(Mask_Debug);
|
mGeode->setNodeMask(Mask_Debug);
|
||||||
|
|
||||||
mGeometry = new osg::Geometry;
|
createGeometry();
|
||||||
|
|
||||||
mVertices = new osg::Vec3Array;
|
|
||||||
|
|
||||||
mDrawArrays = new osg::DrawArrays(osg::PrimitiveSet::LINES);
|
|
||||||
|
|
||||||
mGeometry->setUseDisplayList(false);
|
|
||||||
mGeometry->setVertexArray(mVertices);
|
|
||||||
mGeometry->setDataVariance(osg::Object::DYNAMIC);
|
|
||||||
mGeometry->addPrimitiveSet(mDrawArrays);
|
|
||||||
|
|
||||||
mGeode->addDrawable(mGeometry);
|
|
||||||
mParentNode->addChild(mGeode);
|
mParentNode->addChild(mGeode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DebugDrawer::createGeometry()
|
||||||
|
{
|
||||||
|
if (!mGeometry)
|
||||||
|
{
|
||||||
|
mGeometry = new osg::Geometry;
|
||||||
|
|
||||||
|
mVertices = new osg::Vec3Array;
|
||||||
|
|
||||||
|
mDrawArrays = new osg::DrawArrays(osg::PrimitiveSet::LINES);
|
||||||
|
|
||||||
|
mGeometry->setUseDisplayList(false);
|
||||||
|
mGeometry->setVertexArray(mVertices);
|
||||||
|
mGeometry->setDataVariance(osg::Object::DYNAMIC);
|
||||||
|
mGeometry->addPrimitiveSet(mDrawArrays);
|
||||||
|
|
||||||
|
mGeode->addDrawable(mGeometry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DebugDrawer::destroyGeometry()
|
||||||
|
{
|
||||||
|
if (mGeometry)
|
||||||
|
{
|
||||||
|
mGeode->removeDrawable(mGeometry);
|
||||||
|
mGeometry = NULL;
|
||||||
|
mVertices = NULL;
|
||||||
|
mDrawArrays = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
DebugDrawer::~DebugDrawer()
|
DebugDrawer::~DebugDrawer()
|
||||||
{
|
{
|
||||||
mParentNode->removeChild(mGeode);
|
mParentNode->removeChild(mGeode);
|
||||||
|
@ -81,11 +101,9 @@ void DebugDrawer::setDebugMode(int isOn)
|
||||||
mDebugOn = (isOn == 0) ? false : true;
|
mDebugOn = (isOn == 0) ? false : true;
|
||||||
|
|
||||||
if (!mDebugOn)
|
if (!mDebugOn)
|
||||||
{
|
destroyGeometry();
|
||||||
mVertices->clear();
|
else
|
||||||
mVertices->releaseGLObjects(0);
|
createGeometry();
|
||||||
mGeometry->releaseGLObjects(0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int DebugDrawer::getDebugMode() const
|
int DebugDrawer::getDebugMode() const
|
||||||
|
|
|
@ -29,6 +29,9 @@ protected:
|
||||||
|
|
||||||
bool mDebugOn;
|
bool mDebugOn;
|
||||||
|
|
||||||
|
void createGeometry();
|
||||||
|
void destroyGeometry();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
DebugDrawer(osg::ref_ptr<osg::Group> parentNode, btDynamicsWorld *world);
|
DebugDrawer(osg::ref_ptr<osg::Group> parentNode, btDynamicsWorld *world);
|
||||||
|
|
Loading…
Reference in a new issue