Подтвердить что ты не робот

Какова связь между EGL и OpenGL?

Я пишу реализацию для OpenVG и OpenGL | ES в Go, оба из которых зависят от Khronos EGL API, предположительно, чтобы облегчить переносимость, я думаю.

Я пишу реализацию OpenVG поверх OpenGL ES по интересным и образовательным причинам - я не сделал много работы по рендерингу, и я хотел бы узнать больше об открытых API и практиковать реализацию четко определенных стандартов (проще видеть, получили ли я правильные результаты).

Как я понимаю, EGL предоставляет стандартный API для извлечения контекста чертежа (или того, что когда-либо его правильно называл) вместо использования одного из API, предоставленных несколькими ОС (GLX, WGL и т.д.)

enter image description here

Мне тяжело полагать, что Khronos проделает такие усилия и выйдет из стандартного OpenGL из цикла, но дело в том, что я не нашел, как OpenGL (реальная сделка) взаимодействует с EGL или если он только OpenGL ES. Если OpenGL ES может использовать контекст рисования из EGL, будет ли работать стандартный OpenGL?

Я действительно новичок во всем этом, поэтому я взволнован, но реальный проект, который я делаю, представляет собой набор инструментов виджета Go, который использует OpenVG для своих операций рисования и использует аппаратное ускорение, где это возможно.

Если OpenVG, OpenGL и OpenGL ES зависят от EGL, я думаю, на мой вопрос можно ответить "да" или "нет". Просто имейте в виду, что я нырнул в эту тему сначала прошлой ночью.

Используется ли OpenGL или зависит от EGL?


Отключить тему, но нет тега EGL. Должен ли быть?

4b9b3361

Ответ 1

Между OpenGL и EGL нет никакой связи. EGL обычно не работает на настольных компьютерах, и нет возможности создавать контекст OpenGL на рабочем столе через EGL.

Контексты OpenGL вместо этого создаются и управляются API-интерфейсами платформы. В Windows используется API WGL. На платформах на базе X11 используется GLX. И так далее.

В прошлом году от Khronos появился шум, связанный с созданием версии EGL, которая могла работать на рабочем столе и создавать контексты OpenGL, но до сих пор ничего не вышло.

Ответ 2

Вы можете привязать EGL_OPENGL_API как текущий API для вашего потока, через eglBindAPI(EGLenum api); последующий eglCreateContext создаст контекст рендеринга OpenGL.

Из спецификации EGL, p42:

Некоторые из функций, описанных в этом разделе, используют текущий API-интерфейс рендеринга, который устанавливается для каждой строки позвонив

EGLBoolean eglBindAPI (EGLenum api);

api должен указать один из поддерживаемых клиентских API, либо EGL_OPENGL_API, EGL_OPENGL_ES_API или EGL_OPENVG_API

Предостережение заключается в том, что реализация EGL в пределах своих прав не поддерживает EGL_OPENGL_API и вместо этого генерирует ошибку EGL_BAD_PARAMETER, если вы пытаетесь связать ее.

Также трудно связать с libGL, не забирая AGL/WGL/GLX cruft; ABI на этих платформах требует, чтобы libGL предоставлял эти точки входа. В зависимости от того, на какой платформе вы играете с этим, это может быть или не быть проблемой.

Ответ 3

Используется ли OpenGL или зависит от EGL?

Нет. Вы можете запускать OpenGL без EGL.

Но возможно иметь реализацию EGL, способную создавать контекст OpenGL на рабочем столе. Это потому, что EGL eglBindAPI (int api) позволяет использовать EGL_OPENGL_API, EGL_OPENGL_ES_API или EGL_OPENVG_API.

Но если вы спросите:

Используется ли OpenGL-ES или зависит от EGL?

Ответ да, но есть исключения.

В настоящее время (2015) у вас есть несколько реализаций OpenGL-ES, которые полагаются на EGL для создания графического контекста: Google ANGLE, PowerVR, ARM MALI, Adreno, AMD, Mesa и т.д.

Но в последних выпусках NVIDIA и драйверах Intel вы также можете запросить контексты OpenGL-ES напрямую, где расширения WGL_EXT_create_context_es_profile и WGL_EXT_create_context_es2_profile доступны (Windows). То же самое происходит на платформах Unix, где доступны расширения GLX_EXT_create_context_es_profile и GLX_EXT_create_context_es2_profile.

Цель EGL - облегчить жизнь разработчиков, создав портативный и стандартный способ инициализации и получения контекста поддерживаемого графического API, не беспокоясь о специфических проблемах платформы, как WGL, GLX и т.д. Это проблема EGL разработчики, а не конечный программист.