Es ist eine schlechte Idee, sofern es unsinnig ist. Es gibt nichts zu "einrichten", was Sie noch nicht getan haben, außer einer ortho-Projektionsmatrix (die Sie auf jeden Fall tun müssen).
Portabilität ist wahrscheinlich kein Problem, obwohl es sein sollte. IHVs scheinen auf absehbare Zeit sehr zurückhaltend zu sein, die Unterstützung für den Sofortmodus einzustellen (es scheint sogar in Kernprofilen "gut zu funktionieren"). Obwohl der Sofortmodus längst ausgestorben sein sollte, wird er wahrscheinlich für immer bleiben. Leistung ist eine andere Geschichte. Möchten Sie wirklich, dass etwas, das 0,1% der Szenenkomplexität ausmacht, 15 bis 20% der CPU-Zeit beansprucht - GL-Aufrufe sind im Vergleich zu z. B. DX relativ leicht, aber nicht kostenlos - und 15 bis 20% reale Frame-Zeit aufgrund des Stillstands der Pipeline? Können Sie sich das mit Ihrem Zeitbudget überhaupt leisten? Die meisten Spiele können nicht.
Und dann natürlich die Macken. Oh die Macken. Die offensichtliche Schönheit des Sofortmodus besteht darin, dass es (scheinbar) einfach und unkompliziert ist, schnell ein paar Quads zu zeichnen. In Wirklichkeit kann der Sofortmodus ein derartiger Schmerz im Heck sein, dass er so voller nicht offensichtlicher Fallstricke ist.
Auf der anderen Seite ist es genauso einfach (und einfacher, wenn Sie mich fragen!), Nur eine kleine 5-LOC-Funktion zu schreiben, DrawQuad
die beim Aufruf Scheitelpunktkoordinaten und -indizes zu einem Speicherpuffer hinzufügt und einen Zähler inkrementiert. Mit welcher Überraschung können Sie dann zeichnen glDrawArrays/Elements
und welche Sie wiederverwenden können (die GPU-Kopie, nicht nur die Userland-Kopie!), Ist der nächste Frame so wie er ist, solange nichts geändert wird.
Der Sofortmodus muss, es gibt keine andere Möglichkeit, jedes Mal einen Puffer zuweisen und eine PCIe-Übertragung durchführen. Oder eine äquivalente Latenz (GPU liest den Hauptspeicher über den Bus, was auch immer). Der Treiber kann möglicherweise nicht wissen (oder annehmen), dass die Daten genau die gleichen wie im vorherigen Frame sind.
Das Abrufen von Daten an die GPU ist eine Operation mit hoher Geschwindigkeit, aber auch hoher Latenz . Nicht nur ist der Bus - Transfer per se eine komplizierte, hohe Latenz - Protokoll (mehrere Protokollschichten, Paketieren, Bestätigungen etc.), aber auch nicht alle GPUs sind sogar in der Lage gleichzeitig zu übertragen und zu zeichnen, oder wenn sie es tun können Sie sind möglicherweise nicht immer in der Lage, frei zwischen neuen Operationen zu wechseln oder diese zu initiieren, während sie etwas anderes tun. Lesen Sie als: Du sollst nicht umsonst übertragen .