[Development] The Dynamic OpenGL on Windows Change

Sean Harmer sean.harmer at kdab.com
Thu Feb 27 15:28:26 CET 2014


Hi everybody,

I would like to raise some concerns around the change that introduced 
the dynamic selection of OpenGL on windows. For reference the change is at:

https://codereview.qt-project.org/#change,76732

The apparent problem that this is attempting to address is the need for 
both ANGLE and desktop OpenGL builds of Qt on windows. As you know Qt 
Quick 2 depends upon having an OpenGL implementation to perform its 
rendering. On Windows some older hardware and driver combinations do not 
provide a sufficiently well working OpenGL implementation yet they do 
have a working DirectX implementation which ANGLE then wraps to provide 
an OpenGL ES 2 implementation.

That’s all fine, some people need ANGLE to be able to use Qt Quick 2 
others can use the desktop OpenGL build. So we offer two build 
configurations of the SDK (multiplied by the other build options e.g. 32 
vs 64-bit, MSVC vs mingw etc).

What I do not like about this change is that it adds a lot of 
complexity, leading to more maintenance; it makes the runtime 
performance worse for desktop and ES2 code paths if using the dynamic GL 
build option; the user still has to care about ES2 vs desktop OpenGL 
differences as the dynamic option pulls in the desktop GL header; it 
exports all of the WGL, EGL and a whole bunch of OpenGL functions from 
QtGui.dll. Incidentally what was the criteria used to decide which 
OpenGL functions to export? I see there are a bunch of the old fixed 
function pipeline functions exported which are of no use in ES 2 and 
should not really be used in new GL code on the desktop either.

Let’s think about that last one. Consider a situation where a customer 
is writing an application that uses a 3rd party renderer of some sort 
e.g. VTK, OpenSceneGraph or a map renderer. Their application links to 
this library which in turn links to opengl32.dll and also to QtGui.dll. 
Now we have a problem as both opengl32.dll and QtGui.dll both export the 
GL functions.

So in this case the user has no option but to opt for the non-dynamic, 
desktop OpenGL build of Qt anyway. Exporting the GL symbols from QtGui 
for the lifetime of the 5.x series seems unwise, especially if the 
intention is to remove the non-dynamic builds.

In summary I do not think this change is worth the costs associated with 
it. Users that require the ANGLE build should use the ANGLE build. This 
set should decrease in size as the older hardware/driver combos 
naturally get refreshed.

Users that are doing anything with desktop OpenGL should use a desktop 
OpenGL build to avoid the above symbol conflicts and the runtime costs.

This change seems to muddy the waters much more than it helps our end users.

Kind regards,

Sean

-- 
Dr Sean Harmer | sean.harmer at kdab.com | Managing Director UK
Klarälvdalens Datakonsult AB, a KDAB Group company
Tel. Sweden (HQ) +46-563-540090, USA +1-866-777-KDAB(5322)
KDAB - Qt Experts - Platform-independent software solutions




More information about the Development mailing list