Ich sehe, dass moderner OpenGL-Code EGL verwendet . Ich kann keine guten Ressourcen dafür bekommen, also frage ich hier:
- Was genau ist EGL?
- Wenn eine Plattform OpenGL ES 2.0+ oder OpenGL 3.0+ unterstützt, kann ich davon ausgehen, dass dies auch EGL unterstützt?
- Wann ist die Verwendung von EGL bequem und wann nicht?
Für das, was ich jetzt sagen kann, ist es für mich etwas Ähnliches wie FreeGLUT, sieht aber viel portabler und standardisierter aus.
opengl-es2
egl
user827992
quelle
quelle
Antworten:
CAVEAT : Dies ist aus der Perspektive der Desktop-OpenGL-Entwicklung; Auf mobilen Plattformen kann es anders sein.
EGL ist Khronos 'Versuch, einen einheitlichen offiziellen plattformübergreifenden Standard zu erstellen, um die plattformspezifischen APIs für Fenster- / Kontexterstellung wie Windows WGL, Unix GLX und Apple Core GL zu ersetzen (oder zumindest zu abstrahieren). In der Theorie klingt es großartig, aber in der Praxis wird es noch nicht sehr weit verbreitet. Es ist sicherlich keine Voraussetzung, dass moderne OpenGL-Programme EGL verwenden.
Derzeit ist EGL nur dann wirklich relevant, wenn Sie mehrere Khronos-Grafik-APIs in derselben Anwendung verwenden und möchten, dass sie einen Fenster- / Rendering-Kontext gemeinsam nutzen. Wenn Sie OpenGL, OpenGL ES, OpenMAX | AL und / oder OpenVG nicht gleichzeitig verwenden, bietet Ihnen EGL wahrscheinlich keine Vorteile gegenüber einem vorhandenen plattformübergreifenden OpenGL-Fenstersystem wie FreeGLUT / SDL / GLFW / etc.
quelle
Wie in den Antwortzuständen des Postgoodismus heißt es, dass Khronos API im Grunde das Gleiche tut wie WGL, GLX und andere plattformspezifische "gl bootstrapping" -Bibliotheken. Es bietet auch einige API-übergreifende Funktionen, z. B. die Verwendung von OpenCL mit OpenGL, während einige Ressourcen gemeinsam genutzt werden. Zumindest theoretisch. =)
Desktop OpenGL benötigt keine EGL. Praktisch alle Mobilgeräte, die OpenGL ES unterstützen, basieren jedoch auf EGL (ich habe kein einziges gesehen, bei dem dies nicht der Fall ist, aber ich habe zum Beispiel nicht mit iOS-Geräten gespielt, also könnte ich es sein falsch).
Dies ist praktisch, wenn Sie keine übergeordnete Bootstrapping-Bibliothek wie SDL oder GLFW verwenden und EGL verfügbar ist. Auf der anderen Seite ist plattformspezifischer Bibliotheksbeispielcode wahrscheinlich leichter verfügbar. YMMV.
quelle
Nun, EGL soll eine API sein, die plattformspezifische Dinge wie Fenstererstellung und Kontexterstellung abstrahiert. Aber es scheitert kläglich - es fehlen einfach die notwendigen Funktionen für triviale Fensterverwaltungsprimitive. Sie müssen weiterhin Fenster mit plattformspezifischem Code (z. B. X11 oder GBM) erstellen und dann als void * -Zeiger übergeben. Oh, und Sie müssen die richtige Backend-Bibliothek laden , sonst Booom-Bang.
Fazit: ziemlich nutzlos. Viel schlimmer als GLUT (das andererseits kein direktes fs ohne Fenstersystem unterstützt). Und das API-Design ist wirklich schrecklich. Vom Design gebrochen.
quelle