1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-07-21 08:44:06 +00:00

Revert "Seems to fix wireframe crashes"

This reverts commit 31a0bbcb23.

Better fix coming up
This commit is contained in:
scrawl 2015-03-19 00:35:05 +01:00
parent 7c1386b62b
commit 0b4e7e59bc

View file

@ -22,8 +22,9 @@
class WireframeKeyHandler : public osgGA::GUIEventHandler class WireframeKeyHandler : public osgGA::GUIEventHandler
{ {
public: public:
WireframeKeyHandler() WireframeKeyHandler(osg::Node* node)
: mWireframe(false) : mWireframe(false)
, mNode(node)
{ {
} }
@ -36,7 +37,12 @@ public:
if (adapter.getKey() == osgGA::GUIEventAdapter::KEY_W) if (adapter.getKey() == osgGA::GUIEventAdapter::KEY_W)
{ {
mWireframe = !mWireframe; mWireframe = !mWireframe;
// applying state from an event handler doesn't appear to be safe, so do it in the frame update osg::PolygonMode* mode = new osg::PolygonMode;
mode->setMode(osg::PolygonMode::FRONT_AND_BACK,
mWireframe ? osg::PolygonMode::LINE : osg::PolygonMode::FILL);
mNode->getOrCreateStateSet()->setAttributeAndModes(mode, osg::StateAttribute::ON);
mNode->getOrCreateStateSet()->setMode(GL_CULL_FACE, mWireframe ? osg::StateAttribute::OFF
: osg::StateAttribute::ON);
return true; return true;
} }
default: default:
@ -45,13 +51,9 @@ public:
return false; return false;
} }
bool getWireframe() const
{
return mWireframe;
}
private: private:
bool mWireframe; bool mWireframe;
osg::Node* mNode;
}; };
int main(int argc, char** argv) int main(int argc, char** argv)
@ -128,28 +130,11 @@ int main(int argc, char** argv)
viewer.setUpViewInWindow(0, 0, 800, 600); viewer.setUpViewInWindow(0, 0, 800, 600);
viewer.realize(); viewer.realize();
viewer.setCameraManipulator(new osgGA::TrackballManipulator()); viewer.setCameraManipulator(new osgGA::TrackballManipulator());
viewer.addEventHandler(new WireframeKeyHandler(root));
WireframeKeyHandler* keyHandler = new WireframeKeyHandler;
viewer.addEventHandler(keyHandler);
viewer.addEventHandler(new osgViewer::StatsHandler); viewer.addEventHandler(new osgViewer::StatsHandler);
bool wireframe = false;
while (!viewer.done()) while (!viewer.done())
{ {
if (wireframe != keyHandler->getWireframe())
{
wireframe = keyHandler->getWireframe();
osg::PolygonMode* mode = new osg::PolygonMode;
mode->setMode(osg::PolygonMode::FRONT_AND_BACK,
wireframe ? osg::PolygonMode::LINE : osg::PolygonMode::FILL);
root->getOrCreateStateSet()->setAttributeAndModes(mode, osg::StateAttribute::ON);
root->getOrCreateStateSet()->setMode(GL_CULL_FACE, wireframe ? osg::StateAttribute::OFF
: osg::StateAttribute::ON);
}
viewer.frame(); viewer.frame();
for (unsigned int i=0; i<controllers.size(); ++i) for (unsigned int i=0; i<controllers.size(); ++i)