[Development] OpenGL Support in Qt5

gunnar.sletta at nokia.com gunnar.sletta at nokia.com
Mon Jul 16 12:00:03 CEST 2012


On Jul 16, 2012, at 10:46 AM, ext Sean Harmer wrote:

> 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).

Compatibility between ES and desktop needs to be handled for these classes to be used in Qt. For the core set that Qt/QML currently uses, this is already handled by QOpenGLFunctions. 

> 
> 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?

The problem is mostly the 3.1 profile, as it sits completely outside the hierarchy.

> 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
> 
> _______________________________________________
> Development mailing list
> Development at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/development




More information about the Development mailing list