OpenGL: Ist es effizienter zu nutzen GL_QUADS oder GL_TRIANGLES?
Ich weiß, dass OpenGL veraltet und entledigte GL_QUADS in den neueren Versionen. Ich habe gehört, dass dies aufgrund der Tatsache, dass moderne GPUs nur Dreiecke Rendern mit so ruft ein quad würde nur die GPU härter arbeiten, um brechen es in zwei Dreiecke (was ich jedenfalls gehört, ich bin nicht viel von einem Experten auf jedem von diesem Thema).
Ich Frage mich, ob es nicht besser ist (vorausgesetzt, die Durchschnittliche person, die CPU ist schneller, relativ, als Ihre GPU) nur manuell brechen die übergabe des quads in zwei Dreiecke sich selbst oder lass mal den GPU-tun Sie es selbst. Nochmal, ich habe absolut keine Erfahrung mit OpenGL, da bin ich nur ab. Ich würde lieber wissen was besser ist für die meisten Maschinen in diesen Tagen, so konnte ich meine Aufmerksamkeit auf entweder die rendering-Methode*. Danke.
*Dennoch werde ich wahrscheinlich nutzen die "Dreieck-Methode" for the sake of it.
- Während die einzelnen CPU-Prozessoren schneller sein als einzelne GPU-Prozessoren, es gibt so viele GPU Prozessoren, die würde ich mir vorstellen, es wäre viel schneller zu ermöglichen, die GPU zu verteilen, das problem über alle seine Prozessoren als handle es sich.
- Auch wenn Sie es Tausende Male jeden frame?
- Wenn die quads sind nicht die änderung zwischen den Bildern würde ich sagen, dass es nicht viele frames, bevor die Verlagerung der Berechnung auf der CPU vorzuziehen wäre. In jedem Fall aber, ich glaube, Sie Spalten Haare. In den meisten Grafikanwendungen mit GL_QUADS, ich Wette, der Großteil der Datenverarbeitung erfolgt an anderer Stelle.
- Ich Neige dazu, das zu tun. Ich bin immer versucht, squeeze immer etwas Saft von etwas, auch wenn nichts übrig ist, um zu bekommen. Aber danke für die kurze Erklärung
- Sollten Sie es nicht tun vorzeitige Optimierungen. Immer verlassen Sie sich auf die profiling-Ergebnisse.
- Beachten Sie, dass GL_QUADS wurde entfernt von glDrawElements & Co von OpenGL 3+ (Vergleiche specs von glDrawElements zwischen OGL2 und OGL3)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sogar, wenn Sie füttern OpenGL quads, die triangularization erfolgt durch den Treiber auf der CPU-Seite, noch bevor es trifft die GPU. Moderne GPUs in diesen Tagen nichts zu Essen, außer Dreiecke. (Naja, und die Linien und Punkte.) So etwas wird triangulieren, ob es Sie oder der Fahrer-es spielt keine Rolle, zu viel, wo es passiert.
Wäre dies weniger effizient, wenn Sie, sagen wir, nicht wiederverwenden Ihre vertex-Puffer, und anstatt nachzufüllen neu jedes mal mit quads (in dem Fall der Treiber, um retriangulate jeden vertex buffer), statt nachfüllen mit pretriangulated Dreiecke jedes mal, aber ziemlich künstlich (und das problem, das Sie werden sollte, die Festsetzung in diesem Fall ist nur die Tatsache, du bist Neubefüllung des vertex-buffers).
Ich würde sagen, wenn Sie die Wahl haben, stick mit Dreiecken, da es ist, was die meisten Inhalte Rohrleitungen setzen sich sowieso, und Sie sind weniger wahrscheinlich zu laufen in Probleme mit nicht planaren quads und dergleichen. Wenn Sie erhalten, zu wählen, was format Ihre Inhalte kommt, dann Dreiecke verwenden sicher, und die triangulation Schritt wird übersprungen, insgesamt.
Geometrie dargestellt werden kann, mit Dreiecken, und das ist, warum es wurde beschlossen, Dreiecke statt der quads. Ein weiterer Grund ist, zwei Dreiecke, die nicht co-planar, das ist nicht wahr für quad.
Ja, das Sie wählen, um render-quads, aber die Treiber konvertieren die quad in zwei Dreiecke.
Daher, indem Sie zum Rendern ein quad wird nicht GPU weniger arbeiten, aber aus dem CPU-Arbeit mehr, weil es um die Konvertierung zu tun.