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

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

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

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

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

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

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

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


Не по теме, но тега EGL нет. Должно ли быть?

3 ответа

Решение

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

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

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

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

Из спецификации EGL, стр. 42:

Некоторые из функций, описанных в этом разделе, используют текущий 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 предоставила эти точки входа. В зависимости от того, с какой платформой вы играете, это может быть или не быть проблемой.

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

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

Но возможно иметь реализацию EGL, способную создавать десктопный контекст OpenGL. Это потому, что eglBindAPI(int api) EGL разрешает 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, а не последний программист

Другие вопросы по тегам