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_QtSo 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
-
Hi and welcome to devnet,
You should also check if you really got the format you asked for
-
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( QGLFormat::CoreProfile ); // 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); w.show(); return a.exec();
}
@
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 ?
Thanks
-
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())..
-
Just to be sure, you are not having any warning shown on the console when running the application ?
-
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?