GLSL, Array von Texturen unterschiedlicher Größe
Wenn dabei multitexturing in GLSL, gibt es trotzdem eine schwenkbare Reihe von Samplern, wo jede textur eine andere Größe? Diese syntax ist nicht gültig:
uniform sampler2D texArray[5];
Recht jetzt scheint es die einzige Möglichkeit ist, individuell erstellen, mit den Samplern:
uniform sampler2D tex1;
uniform sampler2D tex2;
uniform sampler2D tex3;
uniform sampler2D tex4;
uniform sampler2D tex5;
Aber dann kann ich nicht Durchlaufen werden, Sie,, ist eine echte Schmerzen in den Arsch. Gibt es eine Lösung?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sagt wer? Arrays von Samplern, die meisten sind sicherlich gültig (je nach version). Wie Sie verwenden Ihnen ist eine andere Sache.
GLSL 1.20 und unten nicht erlauben sampler-arrays.
In GLSL 1.30 bis 3.30, können Sie sampler-arrays, jedoch mit starken Einschränkungen auf den index. Der index muss ein integraler konstanter Ausdruck. So, während Sie kann erklären eine sampler-array, können Sie nicht Schleife über es.
GLSL 4.00 und höher erlauben den index zu einem "dynamisch uniform integraler Ausdruck". Dieser Begriff bedeutet im Grunde, dass alle Instanziierungen des shader (innerhalb der gleichen draw-call) muss erhalten die gleichen Werte.
So können Sie die Schleife über einen Konstanten Bereich in GLSL 4.00+, und der index eine sampler-Reihe mit dem loop-Zähler. Sie können sogar den index aus einer uniform-variable. Was Sie nicht tun haben, ist der index abhängig von einem Eingabe für die shader-Stufe (es sei denn, der Wert ist der gleiche in allen Instanzen, verursacht durch die rendering-Befehl), oder kommen aus einem Wert abgeleitet aus einer textur-Zugriff (es sei denn, der Wert ist der gleiche in allen Instanzen, verursacht durch die rendering-Befehl), oder so etwas.
Die nur Anspruch auf die Texturen gelegt, die in arrays von Samplern ist, dass Sie mit den sampler geben. So müssen Sie verwenden eine
GL_TEXTURE_2D
auf alle Elemente einersampler2D
array. Darüber hinaus werden die Texturen können beliebig viele Unterschiede, einschließlich der Größe. Das array existiert, um das Programmieren einfacher machen; es ändert nichts an der Semantik von dem, was da ist.Und denken Sie daran: jedes einzelne element in das sampler-array benötigt werden, gebunden an seine eigene textur-Bild-Einheit.
Noch nicht. Vielleicht wird Hinzugefügt, zu einem späteren OpenGL-version auf der Straße, aber ich bezweifle es.
Als eine Problemumgehung, die Sie verwenden könnten, Array Texturen und verwenden Sie nur Teilbereiche der jeweiligen Ebene. Verwenden Sie eine vec4-array zum speichern der boudaries jedes Bild auf jeder Ebene.