OpenGL ES versus OpenGL

91

Was sind die Unterschiede zwischen OpenGL ES und OpenGL?

kml_ckr
quelle
13
Welche OpenGL- und OpenGL ES-Versionen vergleichen Sie?
Firas Assaad
3
Wenn Sie GL2-Material verwenden, stützen Sie es immer auf GLES2. Es gibt verschiedene Möglichkeiten, Dinge in GL2 zu tun, aber eine Möglichkeit in GLES2 zum größten Teil. Außerdem werden Sie nicht auf Probleme stoßen, Dinge auf diese Weise zu portieren.
zezba9000
Mögliches Duplikat von OpenGL oder OpenGL ES
Enamul Hassan
gamedev.stackexchange.com/questions/150/…
Ciro Santilli 8 冠状 病 六四 事件 8

Antworten:

54

Zwei der bedeutenderen Unterschiede zwischen OpenGL ES und OpenGL sind das Entfernen der glBegin ... glEnd-Aufrufsemantik für das primitive Rendern (zugunsten von Vertex-Arrays) und die Einführung von Festkomma-Datentypen für Vertex-Koordinaten und -Attribute zur besseren Unterstützung die Rechenfähigkeiten eingebetteter Prozessoren, denen häufig eine FPU fehlt

Schauen Sie hier: OpenGL_ES

Kamaci
quelle
19
Diese wurden auch aus neueren Versionen von Desktop / Workstation OpenGL entfernt.
Ben Voigt
2
Ein interessanter Vergleich besteht zwischen OGL 3 und GLES 2. In OGL 3 ist der Sofortmodus veraltet (obwohl er immer noch unterstützt wird). Ein Großteil (wenn auch nicht alle) der Funktionen in OGL 3 ist in GLES 2 verfügbar.
Nullspace
49

OpenGL ES ist die OpenGL-API für eingebettete Systeme. Es ist in Bezug auf die Anzahl der API-Funktionen einfacher als das normale OpenGL, kann jedoch schwieriger zu verwenden sein, da Sie Vertex-Puffer verwenden und mehr Shader schreiben müssen.

Wenn Sie ein normales opengl verwenden, können Sie mit glBegin und glEnd die Geometrieprimitive einschließen, die Sie zeichnen müssen. Wenn Sie jedoch Opengl ES verwenden, müssen Sie Scheitelpunktpuffer verwenden. Ich denke, dies ist aus Gründen der Leistung.

Derzeit gibt es zwei Opengl ES-Versionen. Die Version 1.1 unterstützt nur die feste Rendering-Pipeline, während die Version 2.0 den glsl-Shader unterstützt. Es gibt jedoch keine feste Rendering-Pipeline. Mit anderen Worten, Sie müssen für alles Ihren eigenen Shader schreiben.

Opengl ES wird hauptsächlich auf Mobiltelefonen und im Internet (Webgl) verwendet. Entsprechend der Spezifikation kann Ihr Desktop-OpenGL-Treiber alle OpenGLIS-Apis unterstützen.

Bill Yan
quelle
3
Sie müssen keine Scheitelpunktpuffer verwenden, glaube ich nicht. Sie können auch Vertex-Arrays im Sofortmodus verwenden. Liege ich falsch?
Schwerkraft
Ja, Sie müssen keine Scheitelpunktpuffer verwenden
Stanislav Ageev
2
"Wenn Sie ein normales opengl verwenden, können Sie glBegin und glEnd verwenden, um die Geometrieprimitive einzuschließen, die Sie zeichnen müssen", nicht, wenn Sie möchten, dass Ihr Code vorwärtskompatibel ist, und auch nicht, wenn Sie einen Mac verwenden, den ich am;)
Jerfov2
38

Ich möchte nur hinzufügen, dass OpenGL 3.3 und OpenGL ES 2.0 größtenteils interoperabel sind, indem eine Teilmenge der Funktionen von OpenGL 3.3 verwendet wird. Meine benutzerdefinierte C ++ - Engine verwendet dieselben API-Aufrufe mit einigen Definitionen für Android / IOS / Windows / OSX / Linux.

Zu den Hauptunterschieden gehören:

  • Mangel an Geometrie-Shader-Unterstützung
  • Keine Min / Max-Mischung (möglicherweise gibt es eine Erweiterung dafür)
  • kein Quad-List-Grundelement
  • eingeschränktere Texturformate (insbesondere in Bezug auf Gleitkomma)
  • glGetTexImage ist nicht verfügbar
  • Es gibt kein Transformations-Feedback, das auch für einige andere erweiterte Funktionen gilt

Es gibt auch viele andere Unterschiede, aber das deckt einige der wichtigsten ab.

Nullraum
quelle
7
Ich denke, wir können diesen Beitrag langsam bearbeiten, um alle fehlenden Funktionsaufrufe einzuschließen. Und die zu vergleichenden Versionen sollten immer noch 3.3 und ES 2.0 sein, da sie im selben Jahr veröffentlicht wurden
CoffeDeveloper
8

OpenGL ES bedeutet Open Graphics Library für eingebettete Systeme (OpenGL ES oder GLES) ist eine Teilmenge der OpenGL-Programmierschnittstelle (API) für das Rendern von Computergrafiken, wie sie von Videospielen verwendet wird, die normalerweise hardwarebeschleunigt sind eine Grafikverarbeitungseinheit (GPU). Es wurde für eingebettete Systeme wie Smartphones, Computer-Tablets, Videospielkonsolen und PDAs entwickelt.

Die offizielle OpenGL | ES-Website: http://www.opengl.org/

Weitere Informationen erhalten Sie auch im Wiki: http://en.wikipedia.org/wiki/OpenGL_ES

罗 大 柚
quelle
6

Überprüfen Sie die OpenGL ES-Übersicht hier: http://www.khronos.org/opengles/

Kurz gesagt, ES ist eine Teilmenge von Open GL für "eingebettete Systeme". Spezifische Unterschiede hängen von den Versionen und Funktionssätzen ab, die Sie vergleichen.

holtavolt
quelle
5

Die OpenGL ES-Registrierung enthält detaillierte API-Unterschiede zwischen OpenGL ES und der entsprechenden Version von OpenGL:

Es gibt jedoch kein Dokument, das die Unterschiede für OpenGL ES 3.0 enthält.

winden sich
quelle
4

Ich denke, Sie erhalten eine bessere Antwort, wenn Sie fragen, was die Unterschiede zwischen OpenGL und OpenGL ES sind.

Es gibt tiefgreifende Unterschiede zwischen OpenGL ES 1.1 und ES 2.0, OpenGL 1.5 und 2.0 sowie OpenGL 3.0 und 4.0.

Wie andere beschrieben haben, wurde ES für eingebettete Systeme geschrieben. Es ist auch die erste "Hausreinigung" der GL-Spezifikation seit ihrer Einführung. OpenGL hatte a) viele Möglichkeiten, dasselbe zu tun (z. B. konnte man ein Quad / Rect auf zwei verschiedene Arten zeichnen und ein Pixelbild auf zwei verschiedene Arten blenden usw.). ES ist einfacher als OpenGL und bietet generell weniger Funktionen, da es für weniger anspruchsvolle Hardware ausgelegt ist.

Ich fordere Sie dringend auf, OpenGL ES 1.1 nicht als Vergangenheit zu betrachten und nicht die Art und Weise darzustellen, wie sich OpenGL oder OpenGL ES in Zukunft architektonisch bewegen.

user501138
quelle
4

Die Terminologie und Versionen sind ziemlich verwirrend (besonders für Neulinge). Eine ganzheitlichere Sicht auf OpenGL und OpenGL-ES (GLES) finden Sie unter OpenGL - Damals und Heute .

ap-osd
quelle
1
Der Link enthält auch ein großartiges Tutorial mit Beispielen, das ausführlich erklärt, wie die OpenGL-Rending-Pipeline funktioniert.
JustWe
Hier ist der Link zum Tutorial.
ap-osd
3

Der Hauptunterschied zwischen beiden besteht darin, dass OpenGL ES für eingebettete Systeme wie Smartphones entwickelt wurde, während OpenGL auf Desktops verwendet wird. Auf der Codierungsebene unterstützt OpenGL ES keine Funktionen mit festen Funktionen wie glBegin / glEnd usw. OpenGL unterstützt Pipelines mit festen Funktionen (unter Verwendung eines Kompatibilitätsprofils).

Matth
quelle
2

Die moderne Antwort für ES 3.0 im Vergleich zu OpenGL 4.6 unterscheidet sich erheblich von der akzeptierten Antwort. Jetzt ist alles, was mit fester Pipeline zu tun hat, weg.

ES ist für EMBEDDED SYSTEMS weitaus weniger robust.

Steve Wyatt
quelle
1

OpenGL ES ist einfach die OpenGL-API für eingebettete Systeme (OpenGL ES bezieht sich auf OpenGL Embedded Systems). Daher ist es eine Teilmenge von OpenGL und wird häufig in Mobiltelefonen und einigen VR-Systemen verwendet. Es wurde für weniger anspruchsvolle Hardware entwickelt. OpenGL ES hat weniger Begriffe und Funktionen als OpenGL. Stellen Sie sich Folgendes vor: Sie nehmen genau das, was Sie für dieses System benötigen, denn wenn wir in unserer gesamten Arbeit keine Funktion benötigen oder die Hardware nicht damit umgehen kann, müssen Sie nichts hinzufügen Diese Funktion erschwert jedoch die Verwendung dieser API, da mehr Shader und komplizierte Codes geschrieben werden müssen, um etwas zu vereinfachen, da OpenGL ES keine Shader in der Grafikpipeline als OpenGL bereitstellt. Die letzte Version von OpenGL ES ist 3.2 und bietet jetzt Unterstützung für Tessellation für zusätzliche Geometriedetails und neue Geometrie-Shader. Ich rate Ihnen daher, OpenGL ES 3.0+ zu lernen oder zu verwenden (falls es Ihre Zielsprache ist), da ab und zu die alten Versionen die alten Versionen nicht mit leistungsfähigerer Hardware und Grafikkarten verwenden und wenn Ihr Ziel OpenGL ist, beginnen Sie mit Version 3. 3+ oder 4.0+. Wenn Sie mehr Zeit haben, ist es kein Problem, einen schnellen Überblick über die alten Versionen zu erhalten, um besser zu verstehen, wie die Dinge entwickelt wurden und warum. Sie können diesen Link für weitere Details überprüfen:https://en.wikipedia.org/wiki/OpenGL_ES

Omar Ghannou
quelle
0

einfach gesagt, opengl ist eine Desktop-Version und opengl es ist für eingebettete Systeme wie Mobiltelefone gedacht, bei denen mehr Speicher- und Leistungsbeschränkungen bestehen als bei Computern. opengl es wäre schwieriger zu benutzen.

pratik_z
quelle
0

OpenGL ist eine 2D- und 3D-Grafik-API, die Tausende von Anwendungen auf eine Vielzahl von Computerplattformen bringt.

OpenGL ES ist eine gut definierte Teilmenge von Desktop OpenGL.

OpenGL® ES ist eine lizenzgebührenfreie, plattformübergreifende API für voll funktionsfähige 2D- und 3D-Grafiken auf eingebetteten Systemen - einschließlich Konsolen, Telefonen, Geräten und Fahrzeugen. Es besteht aus genau definierten Teilmengen von Desktop OpenGL, ...

Siehe diesen Link .

PS

WebGL teilt die Spezifikation mit OpenGL ES, dh wenn Sie Desktop-OpenGL gelernt haben, ist es einfach, die anderen (OpenGL ES, WebGL) zu lernen.

Jafffy
quelle