Qt and OpenGL3.3 Tutorial

  • Hi.
    I'm running ubuntu 12.04 and I use Qt creator with the Qt 4.8 library.
    glxinfo informs me that I have OpenGL 3.3.0 and GLSL 3.3.0
    I'm trying to follow this tutorial : "http://qt-project.org/wiki/How_to_use_OpenGL_Core_Profile_with_Qt":http://qt-project.org/wiki/How_to_use_OpenGL_Core_Profile_with_Qt

    So I downloaded the provided source files and opened the project in Qt Creator. The compilation works fine but when I run the program, the window opens but the red triangle is not displayed, and I can't figure why because there is no error during the compilation.

    Thanks for your help

  • Lifetime Qt Champion

    Hi and welcome to devnet,

    You should also check if you really got the format you asked for

  • Hi Sgaist, thank you for your answer.
    Unfortunately, I don't understand what you are asking me to check .. which format are you talking about ?

  • Lifetime Qt Champion

    The QGLFormat created in the main.cpp

  • Ok, so here's what I did, I just added some debug lines to the existing code :
    #include <QApplication>
    #include <QGLFormat>
    #include "glwidget.h"

    int main( int argc, char* argv[] )
    QApplication a( argc, argv );

    // Specify an OpenGL 3.3 format using the Core profile.
    // That is, no old-school fixed pipeline functionality
    QGLFormat glFormat;
    glFormat.setVersion( 3, 3 );
    glFormat.setProfile&#40; QGLFormat::CoreProfile &#41;; // Requires >=Qt-4.8.0
    glFormat.setSampleBuffers( true );
    qDebug() << "OpenGL context QFlags " << glFormat.openGLVersionFlags();
    qDebug() << "OpenGL context " << glFormat;
    // Create a GLWidget requesting our format
    GLWidget w( glFormat );
    qDebug() << "OpenGL context" << w.format();
    qDebug() << "Driver Version String:" << glGetString(GL_VERSION);
    return a.exec&#40;&#41;;



    line 16 returns :
    OpenGL context QFlags QFlags(0x1|0x2|0x4|0x8|0x10|0x20|0x40|0x1000|0x2000|0x4000|0x8000)

    So, the flag 0x8000 which stands for opengl 3.3, show that openGL 3.3 is supported.
    But line 18 returns :
    OpenGL context QGLFormat(options QFlags(0x1|0x2|0x4|0x20|0x80|0x200|0x400) , plane 0 , depthBufferSize -1 , accumBufferSize -1 , stencilBufferSize -1 , redBufferSize -1 , greenBufferSize -1 , blueBufferSize -1 , alphaBufferSize -1 , samples -1 , swapInterval -1 , majorVersion 3 , minorVersion 3 , profile 1 )
    Here, the flag 0x8000 has disappeared. Yet, the openGL major and minor version is still 3.3 ...

    And finally, once the QGLWidget has been instanciated, line 24 returns :
    OpenGL context QGLFormat(options QFlags(0x1|0x2|0x4|0x10|0x20|0x80|0x200|0x400) , plane 0 , depthBufferSize 24 , accumBufferSize 16 , stencilBufferSize 8 , redBufferSize 8 , greenBufferSize 8 , blueBufferSize 8 , alphaBufferSize -1 , samples 4 , swapInterval 0 , majorVersion 3 , minorVersion 3 , profile 1 )

    I tried on line 26 to display one more information but it returns "0x0", I don't know why.

    Could someone help me to identify what's wrong ?


  • Hi,

    You should call the show() method before calling glGetString(). Before show(), despite you called the constructor, initializeGL() should'nt have been called and your OpenGL context will not be initialized. I think that is why glGetString() is returning NULL (and it is returning a GLubyte*: you should cast it into a char* to display it with qDebug())..

  • Oh yes thanks !
    So, I called glGetString after the call of show() and it returns this :

    "3.3.0 NVIDIA 304.88"

    So it should be okay, it proves that opengl3.3 is supported right, so why is it not working ?

  • Lifetime Qt Champion

    Just to be sure, you are not having any warning shown on the console when running the application ?

  • Nope, no warnings at all ...

  • Lifetime Qt Champion

    Just thought about something, did you try to run another OpenGL example/demo from Qt's sources, just to be sure they are doing fine

  • Very same problem here, working on OS X 10.9 with Qt 5.1.1. Has a solution been found so far?

Log in to reply

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.