usa smite opengl opengl-es egl openvg

smite - ¿Cuál es la relación entre EGL y OpenGL?



egl smite (3)

Estoy escribiendo una implementación para OpenVG y OpenGL|ES en Go , que dependen de la API EGL de Khronos , supuestamente para facilitar la portabilidad.

Estoy escribiendo una implementación de OpenVG sobre OpenGL ES por razones divertidas y educativas. No he hecho mucho trabajo de renderizado y me gustaría aprender más sobre las API abiertas y la práctica de implementar estándares bien definidos (más fácil de usar). mira si tengo los resultados correctos).

Según tengo entendido, EGL proporciona una API estándar para recuperar un contexto de dibujo (o como se llame correctamente), en lugar de usar una de las múltiples API proporcionadas por el sistema operativo (GLX, WGL, etc.)

Me cuesta creer que Khronos realizaría ese esfuerzo y dejaría el OpenGL estándar fuera del circuito, pero el problema es que no he descubierto cómo o si OpenGL (el verdadero acuerdo) se interconecta con EGL o si solo es OpenGL ES. Si OpenGL ES puede usar el contexto de dibujo de EGL, ¿también funcionaría OpenGL estándar?

Soy realmente nuevo en todo esto, por lo que estoy entusiasmado, pero el proyecto real que estoy haciendo es un kit de herramientas Go Widget que utiliza OpenVG para sus operaciones de dibujo y utiliza la aceleración de hardware siempre que sea posible.

Si OpenVG, OpenGL y OpenGL ES dependen de EGL, creo que mi pregunta puede responderse con "sí" o "no". Solo ten en cuenta que me sumergí en este tema de cabeza anoche.

¿OpenGL utiliza o depende de EGL?

Fuera de tema, pero no hay etiqueta EGL. ¿Debería haber?


¿OpenGL utiliza o depende de EGL?

No. Puedes ejecutar OpenGL sin EGL.

Pero es posible tener una implementación EGL capaz de crear un contexto OpenGL de escritorio. Esto se debe a que eglBindAPI (int api) de EGL permite EGL_OPENGL_API, EGL_OPENGL_ES_API o EGL_OPENVG_API.

Pero si preguntas:

¿OpenGL-ES usa o depende de EGL?

La respuesta es sí, pero hay excepciones .

Actualmente (2015), tiene varias implementaciones de OpenGL-ES que dependen de EGL para crear un contexto de gráficos: Google ANGLE, PowerVR, ARM MALI, Adreno, AMD, Mesa, etc.

Pero en las versiones recientes de los NVIDIA e Intel también puede solicitar los contextos de OpenGL-ES, donde las extensiones WGL_EXT_create_context_es_profile y WGL_EXT_create_context_es2_profile están disponibles (Windows). Lo mismo en las plataformas Unix donde GLX_EXT_create_context_es_profile y GLX_EXT_create_context_es2_profile están disponibles.

La intención de EGL es facilitar la vida de los desarrolladores mediante la creación de una forma portátil y estándar para inicializar y obtener el contexto de la API de gráficos compatible, sin preocuparse por los problemas específicos de la plataforma, como WGL, GLX, etc. Ese es un problema de los implementadores de EGL, no programador final


No hay relación entre OpenGL y EGL. EGL generalmente no se ejecuta en escritorios, y no existe la capacidad de crear un contexto OpenGL de escritorio a través de EGL.

En su lugar, los contextos OpenGL se crean y administran mediante API específicas de la plataforma. En Windows, se utiliza la API de WGL. En las plataformas basadas en X11, se utiliza GLX. Etcétera.

Khronos emitió cierto ruido el año pasado sobre la creación de una versión de EGL que podría funcionar en el escritorio y crear contextos de OpenGL, pero hasta ahora, no surgió nada.


Puede enlazar EGL_OPENGL_API como la API actual para su hilo, a través de eglBindAPI(EGLenum api) ; un eglCreateContext posterior creará un contexto de representación OpenGL.

De la especificación de EGL , p42:

Algunas de las funciones descritas en esta sección hacen uso de la API de representación actual, que se establece en función de cada subproceso llamando

EGLBoolean eglBindAPI (EGLenum api);

la API debe especificar una de las API de cliente compatibles, ya sea EGL_OPENGL_API, EGL_OPENGL_ES_API o EGL_OPENVG_API

La advertencia es que la implementación de EGL está dentro de sus derechos, no es compatible con EGL_OPENGL_API y, en su lugar, genera un error EGL_BAD_PARAMETER si intenta EGL_BAD_PARAMETER .

También es difícil enlazar con libGL sin recoger el cruft AGL / WGL / GLX; El ABI en estas plataformas requiere que libGL proporcione esos puntos de entrada. Dependiendo de la plataforma con la que estés jugando, esto puede o no ser un problema.