web-dev-qa-db-fra.com

Guide EGL pour débutants

Je voudrais entrer dans EGL. Cependant, le "seul" que j'ai pu trouver est la référence de l'API. La recherche de "guide egl", "tutoriel egl" ou "egl pour débutants" n'a pas réussi. Quelqu'un connaît-il une bonne ressource?

EGL n'est peut-être pas une "bibliothèque pour débutants". Dans ce cas, je suppose que je devrais commencer par le début - mais, quel est le début? Je viens de lire que EGL est une couche d'abstraction sur les API de dessin dépendant du système, ce qui est la voie à suivre "correcte". Wayland l'utilise, tout comme kmscon. Cependant, regarder leur code source ne m'a donné que mal à la tête.

P.S .: En guise de remarque, je me sens plus à l'aise avec C++ (bien que je suppose que si cela fonctionne en C, il devrait aussi fonctionner en C++). De plus, j'utilise le dernier noyau, avec la dernière version de Mesa, donc je suppose qu'il y a un support disponible pour EGL.

25
Kalrish

Pour commencer à apprendre l'EGL, je recommande les ressources suivantes.

  • Le Guide de programmation OpenGL ES 3.0 d'Addison-Wesley fournit un bon tutoriel sur l'utilisation d'EGL avec OpenGL ES, avec exemple de code sur Github . Le texte du livre fournit une introduction aux parties d'EGL qui sont indépendantes du système d'exploitation. Pour couvrir les parties spécifiques du système d'exploitation, l'exemple de code du livre fournit un programme complet qui fonctionne sur chaque système d'exploitation principal. (Addison-Wesley est l'éditeur de nombreux livres OpenGL bien connus, tels que The Red Book et OpenGL SuperBible).

    Dan Ginsburg, Budirijanto Purnomo, Dave Shreiner, Aaftab Munshi. Guide de programmation OpenGL ES 3.0, 2e, Chapitre 3: Introduction à EGL. Addison-Wesley, 2014. ISBN-13: 978-0-321-93388-1, ISBN-13: 978-0-13-344016-4.

  • Pendant que vous apprenez, gardez à vos côtés l'officiel EGL 1.4 Quick Reference Card .

  • (Linux uniquement) L'exemple de code dans la spécification d'extension EGL_EXT_platform_x11 montre comment créer une fenêtre X11 et produire un EGLSurface à partir de cette fenêtre. (Les exemples de programmes du Guide de programmation OpenGL ES 3.0 montre également comment procéder, mais vous pouvez trouver le traitement plus ciblé dans la spécification EGL_EXT_platform_x11 plus facile à suivre).

  • (Linux uniquement) De même, la spécification d'extension EGL_MESA_platform_gbm montre comment faire de même, mais pour GBM, un backend EGL sans tête pris en charge par les pilotes Linux opensource (Le Guide de programmation OpenGL ES 3.0 ne touche pas GBM).

En fonction de vos objectifs, vous pouvez également trouver utiles les ressources de bas niveau suivantes, toutes trouvées dans le registre EGL de Khronos.

17
Chadversary

Je suis un peu surpris que le eglIntro n'ait pas encore été mentionné.
C'est le plus proche que j'ai pu trouver d'un tutoriel et c'était une ressource vraiment utile pour apprendre l'EGL.

11
eyelash

EDIT: J'ai récemment découvert un bon tutoriel EGL publié par Addison-Wesley. Voir mon nouvelle réponse pour les détails. Cette réponse est obsolète, mais doit être conservée car elle contient toujours des informations utiles.

Je ne connais aucun tutoriel EGL. La seule documentation que je connaisse est:

EGL 1.5 est une API système de bas niveau pour créer des contextes OpenGL et OpenGL ES; connecter ces contextes au système de fenêtres; et le partage de tampons graphiques et d'événements graphiques entre les applications, le système de fenêtres et d'autres composants du système tels que OpenCL, les moteurs de décodage vidéo et le matériel de la caméra.

Compte tenu des cas d'utilisation cibles et du public de développeurs d'EGL, je ne suis pas surpris qu'aucun didacticiel n'existe.

Si vous cherchez comment accomplir une tâche avec EGL et que vous utilisez Linux avec des pilotes OpenGL Open Source, vous pouvez trouver vos réponses en contactant les développeurs Mesa [ http://mesa3d.org/lists.html] .

3
Chadversary

J'ai trouvé ceci tutoriel pour iOS et this pour Windows.

Voici un exemple de code extrait de ce dernier pour obtenir un affichage et le configurer avec 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);
2
Inuart

Je ne connais aucun tutoriel pour vous aider mais j'ai trouvé cet exemple utile pour Android

0