Я пытался написать код opengl, который работает повсюду, но не слишком ограничивая меня.
Я хотел использовать opengles2 на устройствах, которые поддерживают его, и ядро opengl, где поддерживается.Совместимость OpenGL с OpenGLES2
Кроме того, я хотел бы иметь возможность выбрать, какой из них использовать, во время выполнения (если доступно, конечно).
Мои вопросы:
если связать свой код с библиотекой OpenGL каждый раз, когда она доступна, а затем создать основной контекст GLES2 или GL, будет контекст GLES2 ведут себя точно так же, как и библиотеки GLESv2? Какими будут последствия этого, заголовок? Например, GLESv2 не определяет форматы текстур BGRA, поэтому, я думаю, мне придется преобразовать все в RGBA. Это не большая проблема, но мне интересно узнать об альтернативах.
Я думал о динамической загрузке библиотеки и загрузке всех используемых указателей на функции, но это огромная работа для чего-то, что может быть проще ответить. В этом случае я бы просто включил glext.h и объявил все указатели функций для используемых функций и заполнил их. Проблема здесь в том, что glext не определяет какие-либо типы данных (glenum и т. Д.), Поэтому мне всегда нужно включить gl.h. Включая оба, я получаю объявление функции gl.h И мое собственное объявление указателя функции, поэтому я не мог просто использовать общее пространство имен для указателей функций ... И даже тогда некоторые функции (например, glGetError) не кажутся чтобы связать typedef с указателем на функцию.
Я знаю о GLEW, но, к сожалению, большинство дистрибутивов Linux распространяют версию GLEW, которая до сих пор не совместима с GLES2 (debian, я смотрю на вас). Это просто segfaults.
Как вы можете сделать это человек? Любые другие подходы к связыванию функции opengl?