Какая связь между EGL и OpenGL? - PullRequest
23 голосов
/ 11 августа 2011

Я пишу реализацию для 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 нет. Должно ли быть?

Ответы [ 3 ]

13 голосов
/ 11 августа 2011

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

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

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

11 голосов
/ 17 апреля 2012

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

7 голосов
/ 25 сентября 2015

Использует ли 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. реализации, а не окончательный программист.

...