Was ist Khronos EGL?


8

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.


"Ich sehe, dass moderner OpenGL-Code EGL verwendet" Nein, das tut es nicht. EGL ist auf Desktop-Plattformen nicht weit verbreitet und unter iOS nicht weit verbreitet.
Nicol Bolas

Antworten:


5

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.


Ich finde EGL im Allgemeinen in Anwendungen, die "nur OpenGL" sind. Ich sehe kein wirkliches Problem damit. Können Sie erklären, warum es gut ist, EGL nur mit mehr als einer Technologie zu verwenden?
user827992

2
EGL wird als Ersatz für die betriebssystemspezifischen APIs gepusht. GLES-Geräte benötigen im Wesentlichen EGL. Linux bewegt sich langsam in Richtung obligatorischer EGL und der Entfernung von GLX. Die IHVs drängen auch auf EGL und schlagen vor, dass Entwickler es unter Windows verwenden. Ich bin mir nicht sicher, wie der Status oder die empfohlene Vorgehensweise für die Verwendung von EGL unter OSX lautet.
Sean Middleditch

@ SeanMiddleditch: Haben Sie Hinweise darauf, dass EGL unter Linux gepusht wird? Mir war nicht bewusst, dass EGL sogar auf Linux-Plattformen verfügbar war. Unterstützen Nicht-Open-Source-Treiber dies?
Nicol Bolas

1
EGL ist in Mesa verfügbar, ist die einzige API zur Kontexterstellung für Wayland, die als X11-Ersatz (von vielen X11-Kernentwicklern) unterstützt wird, und NVIDIA hat gerade einen Vorschlag zur Standardisierung von EGL als API zur Erstellung von Systemkontexten auf XDC2012 unterbreitet. Sie können die Mailinglisten von Mesa, DRI und Xorg auf einige der letzten Diskussionen sowie die Git-Repos von freedesktop.org überprüfen.
Sean Middleditch

0
  • Was genau ist EGL?

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. =)

  • Wenn eine Plattform OpenGL ES 2.0+ oder OpenGL 3.0+ unterstützt, kann ich davon ausgehen, dass dies auch EGL unterstützt?

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).

  • Wann ist die Verwendung von EGL bequem und wann nicht?

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.


0

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.