diff --git a/include/osgQOpenGL/osgQOpenGLWidget b/include/osgQOpenGL/osgQOpenGLWidget index 0973c99..a5a7ae5 100644 --- a/include/osgQOpenGL/osgQOpenGLWidget +++ b/include/osgQOpenGL/osgQOpenGLWidget @@ -12,7 +12,7 @@ #include #ifdef WIN32 -#define __gl_h_ +//#define __gl_h_ #include #endif @@ -39,6 +39,7 @@ protected: bool _osgWantsToRenderFrame{true}; OpenThreads::ReadWriteMutex _osgMutex; osg::ArgumentParser* _arguments {nullptr}; + bool _isFirstFrame {true}; friend class OSGRenderer; diff --git a/include/osgQOpenGL/osgQOpenGLWindow b/include/osgQOpenGL/osgQOpenGLWindow index e2063db..59b1971 100644 --- a/include/osgQOpenGL/osgQOpenGLWindow +++ b/include/osgQOpenGL/osgQOpenGLWindow @@ -12,7 +12,7 @@ #include #ifdef WIN32 -#define __gl_h_ +//#define __gl_h_ #include #endif @@ -37,7 +37,7 @@ protected: OSGRenderer* m_renderer {nullptr}; bool _osgWantsToRenderFrame{true}; OpenThreads::ReadWriteMutex _osgMutex; - + bool _isFirstFrame {true}; friend class OSGRenderer; QWidget* _widget = nullptr; diff --git a/src/osgQOpenGL/OSGRenderer.cpp b/src/osgQOpenGL/OSGRenderer.cpp index 3047f66..8cdb2e8 100644 --- a/src/osgQOpenGL/OSGRenderer.cpp +++ b/src/osgQOpenGL/OSGRenderer.cpp @@ -206,15 +206,6 @@ void OSGRenderer::setupOSG(int windowWidth, int windowHeight, float windowScale) osgViewer::Viewer::Windows windows; getWindows(windows); - for(osgViewer::Viewer::Windows::iterator itr = windows.begin(); - itr != windows.end(); ++itr) - { - (*itr)->getState()->setUseModelViewAndProjectionUniforms(true); - (*itr)->getState()->setUseVertexAttributeAliasing(true); - (*itr)->getState()->setShaderCompositionEnabled( - false); // TODO: check if we need it ??? - } - _timerId = startTimer(10, Qt::PreciseTimer); _lastFrameStartTime.setStartTick(0); } diff --git a/src/osgQOpenGL/osgQOpenGLWidget.cpp b/src/osgQOpenGL/osgQOpenGLWidget.cpp index b1dfd99..fe16e87 100644 --- a/src/osgQOpenGL/osgQOpenGLWidget.cpp +++ b/src/osgQOpenGL/osgQOpenGLWidget.cpp @@ -60,7 +60,11 @@ void osgQOpenGLWidget::resizeGL(int w, int h) void osgQOpenGLWidget::paintGL() { OpenThreads::ScopedReadLock locker(_osgMutex); - m_renderer->frame(); + if (_isFirstFrame) { + _isFirstFrame = false; + m_renderer->getCamera()->getGraphicsContext()->setDefaultFboId(defaultFramebufferObject()); + } + m_renderer->frame(); } void osgQOpenGLWidget::keyPressEvent(QKeyEvent* event) @@ -205,9 +209,12 @@ void osgQOpenGLWidget::createRenderer() { // call this before creating a View... setDefaultDisplaySettings(); - - m_renderer = new OSGRenderer(_arguments, this); - QScreen* screen = windowHandle() + if (!_arguments) { + m_renderer = new OSGRenderer(this); + } else { + m_renderer = new OSGRenderer(_arguments, this); + } + QScreen* screen = windowHandle() && windowHandle()->screen() ? windowHandle()->screen() : qApp->screens().front(); m_renderer->setupOSG(width(), height(), screen->devicePixelRatio()); diff --git a/src/osgQOpenGL/osgQOpenGLWindow.cpp b/src/osgQOpenGL/osgQOpenGLWindow.cpp index 64fc37d..1445c5f 100644 --- a/src/osgQOpenGL/osgQOpenGLWindow.cpp +++ b/src/osgQOpenGL/osgQOpenGLWindow.cpp @@ -52,6 +52,10 @@ void osgQOpenGLWindow::resizeGL(int w, int h) void osgQOpenGLWindow::paintGL() { OpenThreads::ScopedReadLock locker(_osgMutex); + if (_isFirstFrame) { + _isFirstFrame = false; + m_renderer->getCamera()->getGraphicsContext()->setDefaultFboId(defaultFramebufferObject()); + } m_renderer->frame(); }