Q: Qt, Dynamic OpenGL, OES/ARB extensions

Вот что-то наткнулся и смотрю как на новые ворота.

Преамбула:

  1. Вот есть такой Qt, в нем есть работа с OpenGL
  2. У кого OpenGL нету или кривой - есть библиотека ANGLE, которая эмулирует OpenGL ES2 (или 3) поверх DirectX 9 (или, соответственно, 11).
  3. OpenGL ES от простого отличается, в числе прочего, названиями extensions. Ну, к примеру, GL_OES_get_program_binary у ES/GL_ARB_get_program_binary у обычного.
  4. У Qt 5.4 (под Windows) появилась возможность динамической загрузки имплементации OpenGL. До инициализации QApplication говоришь что хочешь, а дальше у тебя или desktop (обычный) OpenGL, или OpenGL ES (или вовсе software emulator).
    И это - прекрасная возможность, я хочу ей пользоваться и не делать отдельные дистрибутивы "для DirectX" и "для OpenGL", а рулить все через registry.

Теперь, собственно, вопрос:

В предыдущих версиях Qt вид OpenGL определялся при сборке Qt и дальше можно было по дефайнам и/или по параметрам qmake разруливать. И оно у меня было примерно так, с готовыми Qt-шными extensions:

#ifdef USE_GLES
QOpenGLExtension_OES_get_program_binary *binf =  new QOpenGLExtension_OES_get_program_binary();
binf->initializeOpenGLFunctions();
binf->glProgramBinaryOES(pID, format,shaderData.data()+4,binaryLength);
#else
QOpenGLExtension_ARB_get_program_binary *bingl  = new QOpenGLExtension_ARB_get_program_binary();
bingl->initializeOpenGLFunctions();
bingl->glProgramBinary(pID, format,shaderData.data()+4,binaryLength);
#endif
 

Но в Qt 5.4 так нельзя: если мы собраны с -opengl dynamic, то никакого QOpenGLExtension_OES_get_program_binary у нас нету, оно под #ifdef спрятано. Зато есть  QOpenGLExtension_ARB_get_program_binary, но толку от него в DX9/ANGLE режиме нету никакого.

Нет, понятно, я могу из этих extensions скопипастить три строчки кода (определение двух функций и getProcAddress на них), но это как-то обидно.

И вот сдается мне, что я чего-то упускаю и Qt-шники не могли это место так обидно профукать.  Но гугление - не помогло пока. Можно, понятно, StackOverflow помучать, но вот решил со своего бложика начать.

Add new comment