Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
qtws26_logo

The Qt Event of the Year: Qt World Summit 2026

Save Your Spot >
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QOpenGLVertexArrayObject cannot use in openGL version 3.1 ?
Qt 6.12 LTS is out! See what's new in the release blog

QOpenGLVertexArrayObject cannot use in openGL version 3.1 ?

Scheduled Pinned Locked Moved General and Desktop
12 Posts 3 Posters 6.9k Views 1 Watching
  • 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.
  • SGaistS Offline
    SGaistS Offline
    SGaist
    Lifetime Qt Champion
    wrote on last edited by
    #3

    Hi and welcome to devnet,

    Please allow at least 24 to 72 hours before bumping your own thread, not everybody on this forum live in the same timezone as you or even might have an answer to this specific question.

    In between you can also search the "bug report system":bugreports.qt-project.org/issues/ to see if someone reported something about this.
    The interest mailing list might also be a good place to search

    Interested in AI ? www.idiap.ch
    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

    1 Reply Last reply
    0
    • ? Offline
      ? Offline
      A Former User
      wrote on last edited by
      #4

      Which platform and OpenGL driver are you using please? Indeed this should work with OpenGL >= 3.0.

      1 Reply Last reply
      0
      • H Offline
        H Offline
        hesheit
        wrote on last edited by
        #5

        Graphics Card : Intel HD Graphics 3000
        Platform : Mac OSX

        In the Intel website, they say this version of graphics card support opengl version 3.1.

        The problem occurs in the function .create() when the version of Surfaceformat is 3.1.

        1 Reply Last reply
        0
        • ? Offline
          ? Offline
          A Former User
          wrote on last edited by
          #6

          Hmmm, are you sure that you are actually getting an OpenGL 3.1 context created? What does OpenGL report as the version number after you have created the context and made it current (glGetString(GL_VERSION))?

          Prior to OpenGL 3.0 VAO's are only available on OS X via the GL_APPLE_vertex_array_object extension which I unfortunately missed support for in the current implementation of QOpenGLVertexArrayObject. I will add this to an upcoming release of Qt.

          1 Reply Last reply
          0
          • H Offline
            H Offline
            hesheit
            wrote on last edited by
            #7

            Hi ZapB

            I have just checked the opengl version from glGetString(GL_VERSION). This is the result
            OpenGL Version = 2.1 APPLE-7.32.12

            So, why didn't it change to the version I defined?
            This is my code.

            @GLWindow::GLWindow(QScreen* screen )
            : QWindow( screen ),
            m_scene(new GLShaderScene(this)),
            m_leftButtonPressed( false )
            {
            // Tell Qt we will use OpenGL for this window
            setSurfaceType( OpenGLSurface );

            // Specify the format we wish to use
            QSurfaceFormat format;
            format.setMajorVersion(3);
            format.setMinorVersion(1);
            format.setSamples(16);
            format.setProfile(QSurfaceFormat::CoreProfile);
            //format.setOption( QSurfaceFormat::DebugContext );
            
            resize( 800,600 );
            setFormat( format );
            create();
            
            // Create an OpenGL context
            m_context = new QOpenGLContext;
            m_context->setFormat( format );
            m_context->create();
            
            // Setup our scene
            m_context->makeCurrent( this );
            m_scene->setContext( m_context );
            initializeGL();
            
            // Make sure we tell OpenGL about new window sizes
            connect( this, SIGNAL( widthChanged( int ) ), this, SLOT( resizeGL() ) );
            connect( this, SIGNAL( heightChanged( int ) ), this, SLOT( resizeGL() ) );
            resizeGL();
            
            // This timer drives the scene updates
            QTimer* timer = new QTimer( this );
            connect( timer, SIGNAL( timeout() ), this, SLOT( updateScene() ) );
            timer->start( 16 );
            
            qDebug("OpenGL Version = %s", glGetString(GL_VERSION));
            

            }@

            1 Reply Last reply
            0
            • H Offline
              H Offline
              hesheit
              wrote on last edited by
              #8

              When I changed the version to 3.2 or newer, as seen in the following code. The OpenGL version is "OpenGL Version = 3.2 INTEL-7.32.12"

              But the viewport has no object rendered. When I try adding some codes for initializing OpenGL functions, it returns false (cannot initialize).

              @GLWindow::GLWindow(QScreen* screen )
              : QWindow( screen ),
              m_scene(new GLShaderScene(this)),
              m_leftButtonPressed( false )
              {
              // Tell Qt we will use OpenGL for this window
              setSurfaceType( OpenGLSurface );

              // Specify the format we wish to use
              QSurfaceFormat format;
              format.setMajorVersion(3);
              format.setMinorVersion(2);
              format.setSamples(16);
              format.setProfile(QSurfaceFormat::CoreProfile);
              //format.setOption( QSurfaceFormat::DebugContext );
              
              resize( 800,600 );
              setFormat( format );
              create();
              
              // Create an OpenGL context
              m_context = new QOpenGLContext;
              m_context->setFormat( format );
              m_context->create();
              
              // Initialise opengl function
              QOpenGLFunctions_3_2_Core *func = m_context->versionFunctions<QOpenGLFunctions_3_2_Core>();
              if(!func->initializeOpenGLFunctions())
                  qDebug("Cannot initialise OpenGL function.");
              
              // Setup our scene
              m_context->makeCurrent( this );
              m_scene->setContext( m_context );
              initializeGL();
              
              // Make sure we tell OpenGL about new window sizes
              connect( this, SIGNAL( widthChanged( int ) ), this, SLOT( resizeGL() ) );
              connect( this, SIGNAL( heightChanged( int ) ), this, SLOT( resizeGL() ) );
              resizeGL();
              
              // This timer drives the scene updates
              QTimer* timer = new QTimer( this );
              connect( timer, SIGNAL( timeout() ), this, SLOT( updateScene() ) );
              timer->start( 16 );
              
              qDebug("OpenGL Version = %s", glGetString(GL_VERSION));
              

              }@

              1 Reply Last reply
              0
              • H Offline
                H Offline
                hesheit
                wrote on last edited by
                #9

                I now can fix it by using OpenGL 3.2 without initializing OpenGL function.
                Vertex Array Object can now be used.
                Thank you so much Zapb
                ^^

                1 Reply Last reply
                0
                • ? Offline
                  ? Offline
                  A Former User
                  wrote on last edited by
                  #10

                  You need to make the context current before initializing the functions object. It should work as expected then.

                  As for why you didn't get an OpenGL 3.1 context, either:

                  • A bug in Qt
                  • OS X doesn't support OpenGL 3.1 contexts

                  Not sure which it is without digging further.

                  1 Reply Last reply
                  0
                  • H Offline
                    H Offline
                    hesheit
                    wrote on last edited by
                    #11

                    Now I can fix it without initializing.

                    But I dont know why opengl is set to the version 2.1 when I define the surface format to 3.1 or even the older version, but when I define it to 3.2 or newer, opengl is set to version 3.2.

                    I think OS X support only these two versions on my mac

                    Anyway, thanks very much

                    1 Reply Last reply
                    0
                    • ? Offline
                      ? Offline
                      A Former User
                      wrote on last edited by
                      #12

                      OS X Mountain Lion and Lion are limited to OpenGL 3.2 even if the hardware is capable of higher. OS X Mavericks will increase this to OpenGL 4.1 if your hardware supports it.

                      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
                      • Unsolved