EGL vs GLES 2.0 на Android (например, Java)
(опытный программист c, предварительный шейдер, фиксированная функция open gl. компетентный Java-программист)
Я работаю с GLES на Android и получил примеры для запуска (как для родных, так и для Java). В частности, пример текстурированного треугольника. Что меня совершенно сбивает с толку, так это "отношения" Hronos EGL и интерфейсов Android для Android.
Являются ли эти параллельные, независимые интерфейсы (API)?
Предполагается ли EGL быть независимым от платформы (нейтральным) интерфейсом?
EGL, похоже, полностью поддерживает GLES 1.0 и 1.1, но не поддерживает ES 2.0 (на Android)?
Итак, мне кажется, что EGL предполагается как нейтральный, параллельный интерфейс платформы, НО, он не полностью поддерживает GLES 2.0 > (на Android); Поэтому, если вы пишете код GLES 2.0 (на Android), вам лучше использовать API GLxxx, а не API EGLxxx (и в любом случае прибегать к API GLxxx). Насколько я могу судить, вы не > HAVE < использовать EGL для чего-либо, поскольку он поддерживает только подмножество API ES 2.0.
(Каждый пример/книга/ссылка либо смешивает два, использует собственный интерфейс, либо использует только функции EGL 1.1, я пропустил что-то фундаментальное здесь?)
Ответы
Ответ 1
EGL является дополнением к OpenGL ES. EGL используется для получения поверхностей для рендеринга с использованием таких функций, как eglCreateWindowSurface, и затем вы можете рисовать на эту поверхность с помощью OpenGL ES. Его роль аналогична GLX/WGL/CGL.
Может ли EGL предоставить вам контекст, поддерживающий OpenGL ES 2.0, может отличаться в зависимости от платформы, но если Android-устройство поддерживает ES 2.0 и EGL, вы сможете получить такой контекст из EGL. Взгляните на атрибут EGL_RENDERABLE_TYPE и EGL_OPENGL_ES2_BIT при запросе EGLConfig.
http://www.khronos.org/files/egl-1-4-quick-reference-card.pdf
Ответ 2
EGL на Android не кажется должным образом объясненным в любом месте, но я собрал некоторые примечания здесь, которые, надеюсь, должны прояснить ситуацию.