[Development] OpenGL Support in Qt5

Sean Harmer sean.harmer at kdab.com
Mon Jul 16 10:46:49 CEST 2012


Hi,

On Monday 16 July 2012 07:47:10 gunnar.sletta at nokia.com wrote:
> I both like and dislike the idea. Like because it resolves all the functions
> and that way save a lot of pain and dislike because it adds a lot of
> symbols, and I'm a little bit uncertain on the usecase.

The use case is for anybody writing an OpenGL application with Qt. As you say 
it removes one of the largest  pain points by allowing developers to 
immediately get hold of resolved entry points. Usually this means doing it 
manually or using GLEW or the like. However, even with GLEW, managing the 
entry points across contexts and threads can be some work.

As the entry points are provided in classes rather than the global namespace 
it also offers the safety of compilation errors if someone tries to use a 
function not in that version rather than runtime errors.

Another use case will be within Qt itself. When coupled with an easy way to 
resolve extension entry points it will allow QOpenGLShaderProgram etc to 
discover if a certain feature should be enabled (e.g. geometry shaders, 
tessellation shaders, vertex buffer objects).

As for the symbol count, I agree that this is an issue. I am open to 
suggestions on how to handle this. We could make it an optional feature 
enabled at configure time; somehow look at factoring it out into a new 
QtOpenGL library (not the existing widget based one) so that it is only linked 
in if people really want it. Although in those cases Qt itself would not be 
able to use it.

> Because the functions are not a well defined subclass hierarchy (and nor can
> they be), the user will have to make a compile-time decision about which
> version to code against, making the code less flexible at runtime. Will
> this be a problem?

Why are they not a well-defined class hierarchy? The only assumption I have 
made in the suggested hierarchy is that a Core profile context is forwards 
compatible and a Compatibility profile context is not forwards compatible 
(i.e. still has deprecated functions present). With this small simplifying 
assumption the class hierarchy seems to be well-defined - unless you have 
spotted something I have missed of course?

I think the decision can be deferred to runtime with the usual kind of 
fallback mechanisms. I.e. 

* Request the highest version context your app supports
* If successful, obtain functions object for that version.
* Otherwise decrement version and try to obtain new context and disable 
features that rely on higher version being available (if no extension also 
supports that feature).
* Rinse and repeat down to minimum version your app supports

Cheers,

Sean




More information about the Development mailing list