Am 20.03.2014 um 15:04 schrieb Carlos <aarkham...@yahoo.com>:

> ...
> 
> I've tried Qt 5.2 MSVC2010 32bit OpenGL and Qt 5.2 MinGW 32 bit and it fails 
> in both. In Qt4 the OpenGL version is 4.3.0 and in Qt5 is 2.1.2, 

Just to interrogate the Usual Suspects: you /are/ explicitly asking for an 
OpenGL 4.3 "CoreProfile" context, aren't you?

If not, it might be by pure chance what the underlying OpenGL driver is 
offering you.

Also, are you using the (not quite yet) deprecated "QGL" APIs (QGLWidget, 
QGLFormat,...), or the new "QOpenGL" APIs such as QSurfaceFormat, 
QOpenGLContext?

I remember there was an issue in some initial Qt 5 release which prevented to 
create an OpenGL 3.x context, because some deprecated GL function was still 
being used within Qt itself, causing the "context creation/testing" function to 
fail, and hence always the default 2.x GL context was returned.

But as I said, that was on a Mac and my memory is very sketchy (and now that I 
write these lines I think the problem was not creating a 3.2 context at that 
time, but rather executing a GLSL 1.50 shader with QGLShaderProgram, as its 
internal code was still trying to bind uniforms with a GLSL 1.20 syntax, or so 
I vaguely remember...).

Anyway, you might want to start over with a quick "Hello GL" application (and 
QOpenGLShaderProgram & Co. is now the way to rock these days!).

Sean's blog is probably a good point to start ;)

http://www.kdab.com/opengl-in-qt-5-1-part-1/

You will notice though that it uses QWindow instead of the good ol' QGLWidget, 
and that quite some "boilerplate code" is needed to get the convenient 
initializeGL/paintGL/resizeGL etc. methods back that were offered by QGLWidget. 
Let alone that QWindow represents a "top-level" window, which you still need to 
"wrap" into a QWidget hierarchy compatible widget (I think 
QWidget::createWindowContainer does that). For a full screen game QWindow 
however is probably all you need anyway.

Here is an example which uses a QWindow with an "OpenGL surface":

  https://qt-project.org/doc/qt-5.0/qtgui/openglwindow.html

It's funny: this example code seems only to be available in the Qt 5.0 and 5.1 
docs, but not in the current 5.2 docs. It is also not listed in the "official 
Qt examples" chapter. And note that the shader code uses the "OpenGL ES 2.0" 
(GLSL 1.20?) syntax and the example does not explicitly ask for an OpenGL 
context, because an OpenGL ES 2.0 compatible context is probably (supposedly?) 
what you get by default on most desktops anyway, if you don't ask for it 
explicitly.

So take this example with care, but it should demonstrate the effort required 
to get a "QGLWidget like experience".


My understanding is that the old QGLWidget /should/ still work, especially also 
with more recent GL context than "OpenGL ES 2.0" (because that is what Qt 
itself has to restrict itself internally!). That means you would still have to 
use the old QGLContext and QGLFormat classes as to create an OpenGL 3.x or 4.x 
context, but then you could (should) use the new "QOpenGL" API such as 
QOpenGLShaderProgram etc. (if you use them at all).

As I just realised myself the upcoming QOpenGLWidget itself is only scheduled 
for Qt 5.4 (QTBUG-36899), so that still leaves us in a somewhat weird situation 
when you want to write QWidget-based OpenGL applications: either you hack away 
with QWindow (and wrap it into a container), or you mix old "QGL" with new 
"QOpenGL" APIs (in the hope that the former still behave nice with recent 
OpenGL 4.x context). 

I hope that gives you a few pointers to experiment with ;)

Cheers,
  Oliver
_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to