smite - Guía EGL para principiantes
egl smite (5)
Me gustaría entrar en EGL. Sin embargo, el "único" que he podido encontrar es la referencia de la API. La búsqueda de "egl guide", "egl tutorial" o "egl para principiantes" no ha tenido éxito. ¿Alguien sabe de un buen recurso?
EGL no puede ser una "biblioteca para principiantes". En ese caso, supongo que debería comenzar desde el principio, pero, ¿cuál es el comienzo? Acabo de leer que EGL es una capa de abstracción sobre las API de dibujo dependientes del sistema, por lo que es la forma "correcta" de hacerlo. Wayland lo usa, y también lo hace kmscon. Sin embargo, investigar su código fuente solo me ha dado un dolor de cabeza.
PD: Como nota al margen, me siento más cómodo con C ++ (aunque creo que, si funciona en C, también debería funcionar en C ++). Además, estoy usando el último kernel, con la última versión de Mesa, así que supongo que hay soporte disponible para EGL.
Estoy un poco sorprendido de que el eglIntro no haya sido mencionado todavía.
Es lo más cercano que pude encontrar a un tutorial y fue un recurso muy útil al aprender EGL.
He encontrado este tutorial para iOS y this para Windows.
Aquí hay un ejemplo de código extraído de este último para obtener una pantalla y configurarlo con EGL:
// Obtain an EGL display object.
EGLDisplay display = eglGetDisplay(GetDC(hWnd));
if (display == EGL_NO_DISPLAY)
{
return EGL_FALSE;
}
// Initialize the display
if (!eglInitialize(display, &majorVersion, &minorVersion))
{
return EGL_FALSE;
}
// Obtain the display configs
if (!eglGetConfigs(display, NULL, 0, &numConfigs))
{
return EGL_FALSE;
}
// Choose the display config
if (!eglChooseConfig(display, attribList, &config, 1, &numConfigs))
{
return EGL_FALSE;
}
// Create a surface
surface = eglCreateWindowSurface(display, config, (EGLNativeWindowType)hWnd, NULL);
if (surface == EGL_NO_SURFACE)
{
return EGL_FALSE;
}
// Create a drawing context from the EGLDisplay
context = eglCreateContext(display, config, EGL_NO_CONTEXT, contextAttribs);
if (context == EGL_NO_CONTEXT)
{
return EGL_FALSE;
}
// Make the context current
if (!eglMakeCurrent(display, surface, surface, context))
{
return EGL_FALSE;
}
//to show your drawing you swap the buffers like this
eglSwapBuffers(drawContext->eglDisplay, drawContext->eglSurface);
//Terminating a display (release the window resources)
EGLBoolean eglTerminate(eglDisplay);
No conozco ningún tutorial para ayudarte, pero este ejemplo me parece útil para Android
Para comenzar a aprender EGL, recomiendo los siguientes recursos.
La Guía de programación de OpenGL ES 3.0 de Addison-Wesley proporciona un buen tutorial sobre cómo usar EGL con OpenGL ES, completo con un código de ejemplo en Github. El texto del libro proporciona una introducción a las partes de EGL que son independientes del sistema operativo. Para cubrir las partes específicas del sistema operativo, el código de ejemplo del libro proporciona un programa completo que funciona en cada sistema operativo principal. (Addison-Wesley es el editor de muchos libros conocidos de OpenGL, como The Red Book y OpenGL SuperBible ).
Dan Ginsburg, Budirijanto Purnomo, Dave Shreiner, Aaftab Munshi. Guía de programación de OpenGL ES 3.0, 2e , Capítulo 3: Introducción a EGL. Addison-Wesley, 2014. ISBN-13: 978-0-321-93388-1, ISBN-13: 978-0-13-344016-4.
Mientras aprende, mantenga a su lado la tarjeta de referencia rápida EGL 1.4 oficial.
(Solo Linux) El código de ejemplo en la EGL_EXT_platform_x11 extensión EGL_EXT_platform_x11 muestra cómo crear una ventana X11 y producir una
EGLSurface
desde esa ventana. (Los programas de ejemplo de la Guía de programación de OpenGL ES 3.0 también muestran cómo hacer esto, pero es más fácil seguir el tratamiento más centrado en la especificación EGL_EXT_platform_x11).(Solo Linux) Del mismo modo, la EGL_MESA_platform_gbm extensión EGL_MESA_platform_gbm demuestra cómo hacer lo mismo, pero para GBM, un backend EGL sin cabeza compatible con los controladores Linux de código abierto (la Guía de programación de OpenGL ES 3.0 no toca GBM).
Dependiendo de sus objetivos, también puede encontrar útiles los siguientes recursos de bajo nivel, todos encontrados en el Registro EGL de Khronos.
EDITAR: Recientemente descubrí un buen tutorial de EGL publicado por Addison-Wesley. Ver mi nueva respuesta para los detalles. Esta respuesta está desactualizada, pero debe conservarse porque aún contiene información útil.
No tengo conocimiento de ningún tutorial de EGL. La única documentación que conozco es:
- La especificación: http://www.khronos.org/registry/egl/specs/eglspec.1.5.pdf
- Las páginas del manual: http://www.khronos.org/registry/egl/sdk/docs/man/xhtml/
- El registro de extensión: http://www.khronos.org/registry/egl/
- La definición xml de la API: https://cvs.khronos.org/svn/repos/ogl/trunk/doc/registry/public/api/egl.xml
EGL 1.5 es una API de sistema de bajo nivel para crear contextos OpenGL y OpenGL ES; conectando esos contextos al sistema de ventanas; y compartir búferes gráficos y eventos gráficos entre aplicaciones, el sistema de ventanas y otros componentes del sistema como OpenCL, motores de decodificación de video y hardware de cámara.
Considerando los casos de uso de EGL y la audiencia de desarrolladores, no me sorprende que no haya tutoriales.
Si está investigando cómo realizar alguna tarea con EGL y está usando Linux con controladores OpenGL de código abierto, puede encontrar sus respuestas contactando a los desarrolladores de Mesa [ http://mesa3d.org/lists.html] .