diff --git a/examples/osgviewerQt/osgviewerQt.cpp b/examples/osgviewerQt/osgviewerQt.cpp index 4fab6daae..eee2457b1 100644 --- a/examples/osgviewerQt/osgviewerQt.cpp +++ b/examples/osgviewerQt/osgviewerQt.cpp @@ -19,16 +19,15 @@ public: ViewerWidget(osgViewer::ViewerBase::ThreadingModel threadingModel=osgViewer::CompositeViewer::SingleThreaded) : QWidget() { setThreadingModel(threadingModel); - + // disable the default setting of viewer.done() by pressing Escape. setKeyEventSetsDone(0); - QWidget* widget1 = addViewWidget( createCamera(0,0,100,100), osgDB::readNodeFile("cow.osgt") ); - QWidget* widget2 = addViewWidget( createCamera(0,0,100,100), osgDB::readNodeFile("glider.osgt") ); - QWidget* widget3 = addViewWidget( createCamera(0,0,100,100), osgDB::readNodeFile("axes.osgt") ); - QWidget* widget4 = addViewWidget( createCamera(0,0,100,100), osgDB::readNodeFile("fountain.osgt") ); - QWidget* popupWidget = addViewWidget( createCamera(900,100,320,240,"Popup window",true), - osgDB::readNodeFile("dumptruck.osgt") ); + QWidget* widget1 = addViewWidget( createGraphicsWindow(0,0,100,100), osgDB::readNodeFile("cow.osgt") ); + QWidget* widget2 = addViewWidget( createGraphicsWindow(0,0,100,100), osgDB::readNodeFile("glider.osgt") ); + QWidget* widget3 = addViewWidget( createGraphicsWindow(0,0,100,100), osgDB::readNodeFile("axes.osgt") ); + QWidget* widget4 = addViewWidget( createGraphicsWindow(0,0,100,100), osgDB::readNodeFile("fountain.osgt") ); + QWidget* popupWidget = addViewWidget( createGraphicsWindow(900,100,320,240,"Popup window",true), osgDB::readNodeFile("dumptruck.osgt") ); popupWidget->show(); QGridLayout* grid = new QGridLayout; @@ -41,22 +40,29 @@ public: connect( &_timer, SIGNAL(timeout()), this, SLOT(update()) ); _timer.start( 10 ); } - - QWidget* addViewWidget( osg::Camera* camera, osg::Node* scene ) + + QWidget* addViewWidget( osgQt::GraphicsWindowQt* gw, osg::Node* scene ) { osgViewer::View* view = new osgViewer::View; - view->setCamera( camera ); addView( view ); - + + osg::Camera* camera = view->getCamera(); + camera->setGraphicsContext( gw ); + + const osg::GraphicsContext::Traits* traits = gw->getTraits(); + + camera->setClearColor( osg::Vec4(0.2, 0.2, 0.6, 1.0) ); + camera->setViewport( new osg::Viewport(0, 0, traits->width, traits->height) ); + camera->setProjectionMatrixAsPerspective(30.0f, static_cast(traits->width)/static_cast(traits->height), 1.0f, 10000.0f ); + view->setSceneData( scene ); view->addEventHandler( new osgViewer::StatsHandler ); view->setCameraManipulator( new osgGA::TrackballManipulator ); - - osgQt::GraphicsWindowQt* gw = dynamic_cast( camera->getGraphicsContext() ); - return gw ? gw->getGLWidget() : NULL; + + return gw->getGLWidget(); } - - osg::Camera* createCamera( int x, int y, int w, int h, const std::string& name="", bool windowDecoration=false ) + + osgQt::GraphicsWindowQt* createGraphicsWindow( int x, int y, int w, int h, const std::string& name="", bool windowDecoration=false ) { osg::DisplaySettings* ds = osg::DisplaySettings::instance().get(); osg::ref_ptr traits = new osg::GraphicsContext::Traits; @@ -71,22 +77,25 @@ public: traits->stencil = ds->getMinimumNumStencilBits(); traits->sampleBuffers = ds->getMultiSamples(); traits->samples = ds->getNumMultiSamples(); - + + return new osgQt::GraphicsWindowQt(traits.get()); +#if 0 osg::ref_ptr camera = new osg::Camera; - camera->setGraphicsContext( new osgQt::GraphicsWindowQt(traits.get()) ); - + camera->setGraphicsContext( ) ); + camera->setClearColor( osg::Vec4(0.2, 0.2, 0.6, 1.0) ); camera->setViewport( new osg::Viewport(0, 0, traits->width, traits->height) ); camera->setProjectionMatrixAsPerspective( 30.0f, static_cast(traits->width)/static_cast(traits->height), 1.0f, 10000.0f ); return camera.release(); +#endif } - + virtual void paintEvent( QPaintEvent* event ) { frame(); } protected: - + QTimer _timer; }; @@ -99,7 +108,7 @@ int main( int argc, char** argv ) while (arguments.read("--CullDrawThreadPerContext")) threadingModel = osgViewer::ViewerBase::CullDrawThreadPerContext; while (arguments.read("--DrawThreadPerContext")) threadingModel = osgViewer::ViewerBase::DrawThreadPerContext; while (arguments.read("--CullThreadPerCameraDrawThreadPerContext")) threadingModel = osgViewer::ViewerBase::CullThreadPerCameraDrawThreadPerContext; - + QApplication app(argc, argv); ViewerWidget* viewWidget = new ViewerWidget(threadingModel); viewWidget->setGeometry( 100, 100, 800, 600 );