Bindung Texturen in OpenGL
So, ich bin rendering-meine Szene in den Reihen, um zu versuchen und zu minimieren Zustand ändert.
Da mein Shader benötigen in der Regel mehrere Texturen, ich habe ein paar von Ihnen gebunden, die gleichzeitig zu verschiedenen textur-Einheiten. Einige dieser Texturen werden in mehreren Chargen, so könnte auch gebunden bleiben.
Nun meine Frage, ist es gut, um einfach neu zu binden, alle Texturen, die ich brauche, während ein batch, obwohl einige von Ihnen können bereits gebunden? Oder sollte ich prüfen, welche gebunden sind, und nur binden, neuen? Wie teuer ist glBindTexture? Ich bin mit Shadern ist es schlecht, nicht verwendete Texturen gebunden zu textur-Einheiten, die shader nicht Probe aus, oder soll ich lösen Sie die?
Bin ich meistens gefragt, "wie machen Sie es schnell", nicht "wie".
EDIT: Würde es helfen, wenn ich den mitgelieferten code?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Antwort ist schwierig, weil es eine starke GL-Implementierung sollte die Bindung einer bereits gebundenen textur eine no-op als Optimierung. Sie sollten versuchen, benchmarking um zu sehen, wenn putting ein Zustand, der einen Unterschied macht oder nicht.
Das gleiche gilt für nicht verwendete Texturen im textur-Einheiten, da die GL-Implementierung weiß, welche textur-Einheiten werden schließlich verwendet, sollte es keine Auswirkungen auf die Leistung (als Optimierung), um ungenutzte textur-Einheiten.
Die Heilige Regel der GPU-Programmierung ist, dass Sie weniger reden und GPU, je mehr Sie dich liebt.
glBindTexture ist viel teurer als eine einzige Bedingung prüfen von CPU, so dass bei der häufigen Zustandsänderungen, ich denke, Sie sollten sehen, wenn es notwendig ist, zum übertragen neuer textur-index-GPU.
Verfolgen, welche Texturen du hast gebunden (nicht verwenden, glGet(GL_TEXTURE_BINDING_2D) ) und nur binden, wenn es änderungen. Einige Fahrer werden diese für Sie tun, manche nicht.
Wenn Sie wissen, welche Plattform, die Sie sind targeting im Voraus, es ist ziemlich leicht zu machen eine einfache benchmark, um zu sehen, wie viel Unterschied es macht.
Können Sie auch Sortieren Sie die Chargen mit dem, was Texturen, die Sie verwenden, zu minimieren textur verändert.