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 не кажется должным образом объясненным в любом месте, но я собрал некоторые примечания здесь, которые, надеюсь, должны прояснить ситуацию.