Q: Qt, Dynamic OpenGL, OES/ARB extensions
Вот что-то наткнулся и смотрю как на новые ворота.
Преамбула:
- Вот есть такой Qt, в нем есть работа с OpenGL
- У кого OpenGL нету или кривой - есть библиотека ANGLE, которая эмулирует OpenGL ES2 (или 3) поверх DirectX 9 (или, соответственно, 11).
- OpenGL ES от простого отличается, в числе прочего, названиями extensions. Ну, к примеру, GL_OES_get_program_binary у ES/GL_ARB_get_program_binary у обычного.
- У 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 помучать, но вот решил со своего бложика начать.