OpenGL-ES 2.0 VS OpenGL-ES 1.1, was ist schneller?

8

Ich habe eine App mit OpenGL-ES 1.1 geschrieben, frage mich aber, ob es durch den Wechsel zu 2.0 Geschwindigkeitsgewinne geben kann. Hat jemand Tests mit großen Polygonzahlmodellen durchgeführt? Ich möchte nur Dreiecke darstellen, die verschiedene Farben haben, nichts Besonderes. Allerdings möchte ich für meinen Vergleichstest etwa 1 Million Dreiecke rendern.

    
Davido 15.04.2011, 20:24
quelle

2 Antworten

14

OpenGL ES 1.1 und 2.0 bieten zwei sehr unterschiedliche Möglichkeiten, 3D-Grafiken zu erstellen. Daher weiß ich nicht, dass direkte Leistungsvergleiche sehr sinnvoll sind. Wenn Sie 2.0 Shader erstellen, die nur die unveränderte Funktionspipeline von OpenGL ES 1.1 simulieren, werden Sie wahrscheinlich identische Leistung sehen. Dies wird unterstützt durch Apples Dokumentation zum PowerVR SGX , was sagt:

  

Der Grafiktreiber für PowerVR SGX implementiert auch OpenGL ES 1.1   durch die effiziente Implementierung der Fixed-Function-Pipeline mithilfe von Shadern.

Für das Rendern einfacher, flacher Dreiecke würde ich vorschlagen, mit OpenGL ES 1.1 zu arbeiten, weil Sie viel weniger Code schreiben müssen. Wenn Sie mit der integrierten Funktionalität in 1.1 umgehen können, ist es normalerweise einfacher, diese Version als Ziel zu verwenden. Sie haben auch einen etwas größeren Markt, indem Sie in der Lage sind, die (nun) Minderheit von iOS-Gerätebesitzern mit Hardware zu unterstützen, die 2.0 nicht unterstützt.

Mit OpenGL ES 2.0 können Sie jedoch viel mehr mit den Vertex- und Fragment-Shadern als mit 1.1 tun, sodass einige der Dinge, die Sie mit umfangreicher Geometrie machen könnten, stattdessen von Shadern gehandhabt werden können. Dies kann für besser aussehende, schnellere Effekte sorgen.

Zum Beispiel beende ich ein Update für meinen molekularen Renderer mit 2.0 Shadern, die die Auflösung der visualisierten Strukturen deutlich erhöhen. Ich mache das, indem ich benutzerdefinierte Shader benutze, die Raytraced-Impostors für die Sphären und Zylinder in diesen Strukturen erzeugen. Diese Objekte sehen bei jeder Vergrößerung perfekt rund und glatt aus. Dies in OpenGL ES 1.1 mit reiner Geometrie zu tun wäre fast unmöglich, da die Anzahl der benötigten Dreiecke lächerlich wäre (auch Billboards würden für meine Zylinder nicht gut funktionieren und die Schnittpunkte dieser Formen würden nicht direkt behandelt dieser Fall).

Eine Million Dreiecke könnten für diese Geräte ein bisschen viel sein. In meinen Benchmarks hat das alte iPhone 3G rund 500.000 Dreiecke pro Sekunde und das iPad der ersten Generation etwa 2.000.000. Ich habe das viel schnellere iPad 2 nicht vollständig getestet, aber meine frühen Tests zeigen es bei etwa 8.000.000 - 10.000.000 Dreiecken pro Sekunde. Sogar auf dem schnellsten Gerät, das es gibt, werden Sie nur 10 FPS in einer Million Dreiecksszene in den besten Geräten bekommen. Odds sind, Sie brauchen diese Größe der Geometrie nicht, also würde ich tun, was ich konnte, um das zuerst zu reduzieren.

    
Brad Larson 15.04.2011, 21:53
quelle
1

Die Leistungssteigerungen in ES 2.0 beziehen sich nicht auf das Rendern einzelner VBOs, sondern auf

1) Leistungsoptimierungen in benutzerdefinierten Shadern, um nur das erforderliche Minimum anstelle allgemeinerer fester Funktionen zu verwenden

2) Rendering vieler Objekte aufgrund der Straffung der Matrix-Pipeline und des Entfernens des Matrix-Stacks und der "fixed function", die neue Shader bei Zustandsänderungen herausfinden müssen, und die Notwendigkeit des Multipass-Renderings beseitigen für einige Effekte.

Dies ermöglicht z.B. die CPU, um alle dynamischen Matrixtransformationen in einem separaten Thread durchzuführen, während statische Matrizen ignoriert werden und unnötiger Transfer zwischen der CPU- & gt; -GPU vermieden wird. Es ist nicht notwendig, Kameramatrizen zwischen 2D- und 3D-Statusänderungen in Shader-Versionen ständig zu wiederholen.

    
emacinnes 02.08.2013 11:54
quelle