oups forget the file ... 2007/10/17, David Callu <[EMAIL PROTECTED]>: > > Ok I have a not really clean fix but this work. > > I will investigate more on this issue. > Keep you informed > > David > > > 2007/10/17, Panagiotis Papadakos < [EMAIL PROTECTED]>: > > > > Hi David. Thanks for your time and the example. > > > > I have the same problem with your example as I have with my own code. > > Running "./a.out --samples 4 saved_model.osg", uses anti-aliasing when > > the > > application starts although SwitchMultisampleHandler disables it in > > constructor. Pressing 2 times 'm' disables it, as it also happens with > > my > > app. > > > > Panagiotis Papadakos > > > > On Wed, 17 Oct 2007, David Callu wrote: > > > > > Hi Panagiotis > > > > > > I attach a osgviewer based example of use of multisample > > > > > > You can switch on/off multisample with the key 'm' > > > > > > Cheers > > > David > > > > > > 2007/10/14, Panagiotis Papadakos <[EMAIL PROTECTED]>: > > >> > > >> Hi David > > >> > > >> On Tue, 9 Oct 2007, David Callu wrote: > > >> > > >>> Hi Panagiotis > > >>> > > >>> 2007/10/6, Panagiotis Papadakos <[EMAIL PROTECTED]>: > > >>>> > > >>>> Hi. > > >>>> > > >>>> I want to add an option of using multisampling for my app. So I > > have > > >> setup > > >>>> DisplaySettings with setNumMultiSamples(4). The user is able to > > >>>> enable/disable multisampling as he feels in the app, by > > >> enabling/disabling > > >>>> > > >>>> the GL_MULTISAMPLE_ARB in the root stateset. My problem now is that > > >>>> initially I want to have multisampling disabled, which I can't > > figure > > >> out > > >>>> how to do. I have tried setting GL_MULTISAMPLE_ARB OFF in the root > > >>>> stateset, but this doesn't seem to help. Any ideas? > > >>> > > >>> > > >> > > >>> This seem to be the good method. > > >>> you can try > > >>> > > >>> 1) do root->getOrCreateStateSet()->setMode(GLL_MULTISAMPLE_ARB, > > >>> osg::StateAttribut::OFF | osg::StateAttribut::OVERRIDE) > > >> > > >> This is what I've been trying. More specifically > > >> root->getOrCreateStateSet()->setMode(GL_MULTISAMPLE_ARB, > > >> osg::StateAttribute::OFF | osg::StateAttribute::PROTECTED | > > >> osg::StateAttribute::OVERRIDE); > > >> > > >> after the viewer has been realized. > > >> > > >>> 2) I think that number of sample is define when the OpenGL context > > is > > >>> created > > >>> so recreate a context on each switch of the number os sample you > > >> want. > > >>> > > >> Why should I recreate a context? I think I should be able to > > >> enable/disable Multisampling with setting the state mode ON/OFF. > > >> > > >>> How did you know that multisample is enabling/disabling. > > >>> Did you look the render ? > > >> Yep, that is the case. I saw the render. > > >> > > >>> Did you do a request to OpenGL about multisample ? > > >>> > > >>> > > >>> David > > >>> > > >>> > > >>> Thanks > > >>>> Panagiotis Papadakos > > >>>> _______________________________________________ > > >>>> osg-users mailing list > > >>>> osg-users@lists.openscenegraph.org > > >>>> > > >> > > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > >>>> > > >>> > > >> > > > > > _______________________________________________ > > osg-users mailing list > > osg-users@lists.openscenegraph.org > > > > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > > >
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield * * This application is open source and may be redistributed and/or modified * freely and without restriction, both in commericial and non commericial applications, * as long as this copyright notice is maintained. * * This application is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */
#include <osgDB/ReadFile> #include <osgUtil/Optimizer> #include <osg/CoordinateSystemNode> #include <osg/Multisample> #include <osg/Switch> #include <osgText/Text> #include <osgViewer/Viewer> #include <osgViewer/ViewerEventHandlers> #include <osgGA/TrackballManipulator> #include <osgGA/FlightManipulator> #include <osgGA/DriveManipulator> #include <osgGA/KeySwitchMatrixManipulator> #include <osgGA/StateSetManipulator> #include <osgGA/AnimationPathManipulator> #include <osgGA/TerrainManipulator> #include <iostream> class SwitchMultisampleHandler : public osgGA::GUIEventHandler { public: SwitchMultisampleHandler(osg::StateSet * ss) : _useMultisample(false), _ss(ss) { _ss->setAttributeAndModes(new osg::Multisample, osg::StateAttribute::ON); _ss->setMode(GL_MULTISAMPLE, osg::StateAttribute::OFF | osg::StateAttribute::OVERRIDE); } bool handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &) { if (ea.getHandled()) return false; switch (ea.getEventType()) { case (osgGA::GUIEventAdapter::KEYUP): { if (ea.getKey() == 'm') { if (_useMultisample == false) { _ss->setMode(GL_MULTISAMPLE, osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE); _useMultisample = true; } else { _ss->setMode(GL_MULTISAMPLE, osg::StateAttribute::OFF | osg::StateAttribute::OVERRIDE); _useMultisample = false; } return true; } break; } default: break; } return false; } private: bool _useMultisample; osg::ref_ptr<osg::StateSet> _ss; }; int main(int argc, char** argv) { // use an ArgumentParser object to manage the program arguments. osg::ArgumentParser arguments(&argc,argv); arguments.getApplicationUsage()->setApplicationName(arguments.getApplicationName()); arguments.getApplicationUsage()->setDescription(arguments.getApplicationName()+" is the standard OpenSceneGraph example which loads and visualises 3d models."); arguments.getApplicationUsage()->setCommandLineUsage(arguments.getApplicationName()+" [options] filename ..."); arguments.getApplicationUsage()->addCommandLineOption("--image <filename>","Load an image and render it on a quad"); arguments.getApplicationUsage()->addCommandLineOption("--dem <filename>","Load an image/DEM and render it on a HeightField"); arguments.getApplicationUsage()->addCommandLineOption("-h or --help","Display command line parameters"); arguments.getApplicationUsage()->addCommandLineOption("--help-env","Display environmental variables available"); arguments.getApplicationUsage()->addCommandLineOption("--help-keys","Display keyboard & mouse bindings available"); arguments.getApplicationUsage()->addCommandLineOption("--help-all","Display all command line, env vars and keyboard & mouse bindings."); arguments.getApplicationUsage()->addCommandLineOption("--SingleThreaded","Select SingleThreaded threading model for viewer."); arguments.getApplicationUsage()->addCommandLineOption("--CullDrawThreadPerContext","Select CullDrawThreadPerContext threading model for viewer."); arguments.getApplicationUsage()->addCommandLineOption("--DrawThreadPerContext","Select DrawThreadPerContext threading model for viewer."); arguments.getApplicationUsage()->addCommandLineOption("--CullThreadPerCameraDrawThreadPerContext","Select CullThreadPerCameraDrawThreadPerContext threading model for viewer."); // if user request help write it out to cout. bool helpAll = arguments.read("--help-all"); unsigned int helpType = ((helpAll || arguments.read("-h") || arguments.read("--help"))? osg::ApplicationUsage::COMMAND_LINE_OPTION : 0 ) | ((helpAll || arguments.read("--help-env"))? osg::ApplicationUsage::ENVIRONMENTAL_VARIABLE : 0 ) | ((helpAll || arguments.read("--help-keys"))? osg::ApplicationUsage::KEYBOARD_MOUSE_BINDING : 0 ); if (helpType) { arguments.getApplicationUsage()->write(std::cout, helpType); return 1; } osgViewer::Viewer viewer(arguments); // report any errors if they have occurred when parsing the program arguments. if (arguments.errors()) { arguments.writeErrorMessages(std::cout); return 1; } if (arguments.argc()<=1) { arguments.getApplicationUsage()->write(std::cout,osg::ApplicationUsage::COMMAND_LINE_OPTION); return 1; } // set up the camera manipulators. { osg::ref_ptr<osgGA::KeySwitchMatrixManipulator> keyswitchManipulator = new osgGA::KeySwitchMatrixManipulator; keyswitchManipulator->addMatrixManipulator( '1', "Trackball", new osgGA::TrackballManipulator() ); keyswitchManipulator->addMatrixManipulator( '2', "Flight", new osgGA::FlightManipulator() ); keyswitchManipulator->addMatrixManipulator( '3', "Drive", new osgGA::DriveManipulator() ); keyswitchManipulator->addMatrixManipulator( '4', "Terrain", new osgGA::TerrainManipulator() ); std::string pathfile; char keyForAnimationPath = '5'; while (arguments.read("-p",pathfile)) { osgGA::AnimationPathManipulator* apm = new osgGA::AnimationPathManipulator(pathfile); if (apm || !apm->valid()) { unsigned int num = keyswitchManipulator->getNumMatrixManipulators(); keyswitchManipulator->addMatrixManipulator( keyForAnimationPath, "Path", apm ); keyswitchManipulator->selectMatrixManipulator(num); ++keyForAnimationPath; } } viewer.setCameraManipulator( keyswitchManipulator.get() ); } // add the state manipulator viewer.addEventHandler( new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()) ); // add the state manipulator viewer.addEventHandler( new SwitchMultisampleHandler(viewer.getCamera()->getOrCreateStateSet()) ); // add the thread model handler viewer.addEventHandler(new osgViewer::ThreadingHandler); // add the window size toggle handler viewer.addEventHandler(new osgViewer::WindowSizeHandler); // add the stats handler viewer.addEventHandler(new osgViewer::StatsHandler); // add the help handler viewer.addEventHandler(new osgViewer::HelpHandler(arguments.getApplicationUsage())); // add the record camera path handler viewer.addEventHandler(new osgViewer::RecordCameraPathHandler); // load the data osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFiles(arguments); if (!loadedModel) { std::cout << arguments.getApplicationName() <<": No data loaded" << std::endl; return 1; } // any option left unread are converted into errors to write out later. arguments.reportRemainingOptionsAsUnrecognized(); // report any errors if they have occurred when parsing the program arguments. if (arguments.errors()) { arguments.writeErrorMessages(std::cout); return 1; } // optimize the scene graph, remove redundant nodes and state etc. osgUtil::Optimizer optimizer; optimizer.optimize(loadedModel.get()); viewer.setSceneData( loadedModel.get() ); viewer.realize(); viewer.getCamera()->getGraphicsContext()->makeCurrent(); glDisable(GL_MULTISAMPLE); viewer.getCamera()->getGraphicsContext()->releaseContext(); viewer.run(); }
_______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org