Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. 3rd Party Software
  4. Demo: Integrating OpenSceneGraph with Qt Quick
Forum Update on Monday, May 27th 2025

Demo: Integrating OpenSceneGraph with Qt Quick

Scheduled Pinned Locked Moved 3rd Party Software
osgosgearthopenscenegraphquickqml
20 Posts 6 Posters 28.8k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • P Offline
    P Offline
    podsvirov
    wrote on 17 Aug 2013, 18:17 last edited by
    #4

    I do not like VisualStudio.
    Demo I wrote and build in Qt Creator with CMake project.
    I use MinGW 4.8 32bit in Windows 7.

    1 Reply Last reply
    0
    • R Offline
      R Offline
      rooi
      wrote on 18 Aug 2013, 13:34 last edited by
      #5

      Ah Thanks for you help Konstantin! I was not aware that you can use cmake with qt creator.

      Maybe you could help me with another thing I tried with your demo. I tried to load an .earth file from the osgEarth kit, but it doesn't work very well. I can see that is loads the earth file, but something seems to go wrong with the rendering to texture. All textures that are shown are replaced by the osgEarth terrain texture. Also the following errors are displayed:

      QSGRenderer: attribute 6 is enabled, this can lead to memory corruption and crashes.
      QSGRenderer: attribute 7 is enabled, this can lead to memory corruption and crashes.

      My initiall guess is that a latter opengl version (4.3) should be used, but how can you indicate which version is used in your example? Sean Harmers post give some indication, but, as I'm quite new to Qt, I can't seem to implement it: http://www.kdab.com/opengl-in-qt-5-1-part-1/

      What do you think? Could the opengl version cause this problem? If so, could you please give some pointers on how to make it work in your demo? Of course, any other thought are very well appreciated!

      Thanks again for your great demo and your help!

      1 Reply Last reply
      0
      • R Offline
        R Offline
        rooi
        wrote on 19 Aug 2013, 07:24 last edited by
        #6

        Hi,

        I found out how to set the opengl version, but unfortunatly it did not solve the problem. Maybe someone has other suggestions on what is going on?

        This is how I set the opengl version by the way. I did not know about the CombatibilityProfile that has to be set for QtQuick.

        QSurfaceFormat format;
        format.setDepthBufferSize( 24 );
        format.setMajorVersion( 4 );
        format.setMinorVersion( 3 );
        format.setSamples( 4 );
        format.setProfile( QSurfaceFormat::CompatibilityProfile );
        view.setFormat(format);

        1 Reply Last reply
        0
        • P Offline
          P Offline
          podsvirov
          wrote on 19 Aug 2013, 08:46 last edited by
          #7

          I am also interested osgEarth project.
          But I have not checked his work in the context of Qt Quick (Qt 5).
          I hope to attend to it in the future (but still do not know when exactly).
          I used osgEarth with widgets (osgQt) - try them for first.

          1 Reply Last reply
          0
          • R Offline
            R Offline
            rooi
            wrote on 19 Aug 2013, 14:17 last edited by
            #8

            Thanks for your reply Konstantin.

            With the help of the osgEarth guys I think I've figured it out.
            When I change the frame function as such it seems to work. Maybe you could review it and include it in the demo?

            Thanks again!

            void frame() {
                if (!compositeViewer.valid()) return;
            
                // Qt bug!?
                QOpenGLContext::currentContext()->functions()->glUseProgram(0);
            
                /* save current OpenGL state  */
                glPushAttrib(GL_TEXTURE_BIT|GL_LIGHTING_BIT|GL_SCISSOR_BIT|GL_STENCIL_BUFFER_BIT);
            
                //char* version = (char*)glGetString(GL_VERSION);
            
                compositeViewer->frame();
            
                // qpainter uses vertex attribs 3,4,5 so we need to explicitly disable them:
                QOpenGLContext::currentContext()->functions()->glDisableVertexAttribArray(3); 
                QOpenGLContext::currentContext()->functions()->glDisableVertexAttribArray(4); 
                QOpenGLContext::currentContext()->functions()->glDisableVertexAttribArray(5); 
                QOpenGLContext::currentContext()->functions()->glDisableVertexAttribArray(6); 
                QOpenGLContext::currentContext()->functions()->glDisableVertexAttribArray(7); 
            
                // qpainter requires depth testing to be off 
                glDisable(GL_DEPTH_TEST) ;
            
                // not sure if this is required; osg changes this when using textures so I reset it to default 
                glPixelStorei(GL_UNPACK_ALIGNMENT,4); 
            
                glPopAttrib();
            
            }
            
            1 Reply Last reply
            0
            • C Offline
              C Offline
              cmannett85
              wrote on 13 Oct 2013, 10:02 last edited by
              #9

              Hi,
              In QuickWindowViewer::Hidden::frame(), the call to QOpenGLContext::currentContext() is returning null for me. The osgviewer and Qt's QML examples work perfectly well, and my machine supports FBOs (OpenGL v3.0) - any ideas why a context couldn't be created?

              1 Reply Last reply
              0
              • C Offline
                C Offline
                cmannett85
                wrote on 13 Oct 2013, 11:11 last edited by
                #10

                I found the problem, the signal/slot connection to the failing method:

                @connect(window, SIGNAL(beforeRendering()), this, SLOT(frame()));@

                It should be specified as a Qt::DirectConnection as noted in the "QQuickWindow docs":http://qt-project.org/doc/qt-5.0/qtquick/qquickwindow.html#exposure-and-visibility - "Warning: As signals related to rendering might be emitted from the rendering thread, connections should be made using Qt::DirectConnection."

                1 Reply Last reply
                0
                • R Offline
                  R Offline
                  rooi
                  wrote on 12 Nov 2013, 22:16 last edited by
                  #11

                  Hi Konstantin,

                  I recently got some more time to look into your project again. As I stated before I like the way you integrate osg and qt/qml.

                  I tried to extent the functionality by adding some osg pickers to allow identifying the name and type of a node underneath the mouse. This seems to work initially, but unfortunatly it doesn't after a resize of the window.

                  Do you have any idea why this occurs? My guess is that something does not get the new window size after a resize, but which object? Hopefully you could give me another pointer to try and get this fixed.

                  Thank you very much!

                  Rooi

                  1 Reply Last reply
                  0
                  • R Offline
                    R Offline
                    rooi
                    wrote on 13 Nov 2013, 13:07 last edited by
                    #12

                    Hi,

                    I managed to get the picker to work by doing the following:

                    Add the following lines to updateViewport()
                    QSize size(quickItem->boundingRect().size().toSize());
                    if(view->getCamera()->getGraphicsContext())
                    view->getCamera()->getGraphicsContext()->resized( 0, 0, size.width(), size.height() );

                    Thanks.

                    V 1 Reply Last reply 21 Aug 2015, 02:42
                    0
                    • A Offline
                      A Offline
                      alydev
                      wrote on 27 Feb 2014, 11:53 last edited by
                      #13

                      Is someone can send me the demo ? I can't download it...

                      1 Reply Last reply
                      0
                      • P Offline
                        P Offline
                        podsvirov
                        wrote on 11 Mar 2014, 10:36 last edited by
                        #14

                        I am sorry, but the link to the archive is not working.
                        You can try to get the code via git:
                        @
                        git clone git://podsvirov.pro/osg/osgqtquick.git
                        @

                        1 Reply Last reply
                        0
                        • P Offline
                          P Offline
                          podsvirov
                          wrote on 17 Apr 2014, 13:18 last edited by
                          #15

                          Good news: a link to a screenshot and the source code in the archive is working again!

                          1 Reply Last reply
                          0
                          • A Offline
                            A Offline
                            anu.rastogi
                            wrote on 7 Dec 2014, 00:38 last edited by
                            #16

                            Hi Konstantin,

                            Sub: enable multisampling

                            Your example is really well done, Thanks. Now I want to enable multisampling, but I can not figure out how to enable it. I want to use the buffer mode.
                            The QOpenGLFramebufferObjectFormat.setSamples(4) does not seem to work. I don't have a very deep knowledge or osg::GraphicsWindow and its traits. But if you can guide me, I can take a look.

                            Thanks a lot,

                            1 Reply Last reply
                            0
                            • A Offline
                              A Offline
                              anu.rastogi
                              wrote on 7 Dec 2014, 00:38 last edited by
                              #17

                              Hi Konstantin,

                              Sub: enable multisampling

                              Your example is really well done, Thanks. Now I want to enable multisampling, but I can not figure out how to enable it. I want to use the buffer mode.
                              The QOpenGLFramebufferObjectFormat.setSamples(4) does not seem to work. I don't have a very deep knowledge or osg::GraphicsWindow and its traits. But if you can guide me, I can take a look.

                              Thanks a lot,

                              1 Reply Last reply
                              0
                              • R rooi
                                13 Nov 2013, 13:07

                                Hi,

                                I managed to get the picker to work by doing the following:

                                Add the following lines to updateViewport()
                                QSize size(quickItem->boundingRect().size().toSize());
                                if(view->getCamera()->getGraphicsContext())
                                view->getCamera()->getGraphicsContext()->resized( 0, 0, size.width(), size.height() );

                                Thanks.

                                V Offline
                                V Offline
                                Voya
                                wrote on 21 Aug 2015, 02:42 last edited by
                                #18

                                @rooi
                                oh I am facing the same problem as you did. when I resize the windows ,it seems that the Qopenglcontext turn to null . so the fbo is initialized failed. using the method you give it does not work . i try to delete the updatafbo it works but the size of texture does not changed any more.

                                1 Reply Last reply
                                0
                                • P Offline
                                  P Offline
                                  podsvirov
                                  wrote on 10 Sept 2015, 06:37 last edited by JKSH 9 Dec 2015, 00:27
                                  #19

                                  Meet osgQtQuick 2.0!

                                  1 Reply Last reply
                                  0
                                  • P Offline
                                    P Offline
                                    podsvirov
                                    wrote on 24 Nov 2015, 17:16 last edited by
                                    #20

                                    Wow! More than 10 000 views :-)
                                    It seems that many who like it!

                                    I repeat: Meet osgQtQuick 2.0!

                                    1 Reply Last reply
                                    0

                                    • Login

                                    • Login or register to search.
                                    • First post
                                      Last post
                                    0
                                    • Categories
                                    • Recent
                                    • Tags
                                    • Popular
                                    • Users
                                    • Groups
                                    • Search
                                    • Get Qt Extensions
                                    • Unsolved