2012-03-31 4 views
5

Was passiert, wenn Sie (GL_TEXTURE_2D und GL_TEXTURE_CUBE_MAP) in derselben Texturbildeinheit (verschiedene Texturen) binden?OpenGL ES 2.x: binden beide `GL_TEXTURE_2D` und` GL_TEXTURE_CUBE_MAP` in der gleichen Textur Bildeinheit?

Angenommen, ich bilde eine Textur an GL_TEXTURE0 's GL_TEXTURE_2D Ziel und eine andere Textur an das Ziel der gleichen Textureinheit GL_TEXTURE_CUBE_MAP. Kann ich dann zwei einheitliche Variablen haben, eine sampler2D und die andere eine samplerCube und beide auf 0 setzen (auf GL_TEXTURE0 beziehen)?

Ich vermute, die Antwort ist "Nein" (oder das Ergebnis ist undefiniert), aber ich habe nichts in der Spezifikation gefunden, die ausdrücklich die Verwendung mehrerer Texturziele in der gleichen Textur Bildeinheit verbietet.

Antwort

7

Ich habe nichts gefunden, das beschreibt, wenn Sie eine 2D-Textur und eine Cube Map-Textur in der gleichen Textureinheit binden können, aber (oder so) Ich denke, das ist perfekt möglich. Es ist sinnvoll, dies zuzulassen, da alle Texturmodifikationsfunktionen erfordern, dass Sie das Texturziel angeben, auf dem es ausgeführt werden soll.

Aber die OpenGL ES 2 spec nicht zulässt explizit beide zur gleichen Zeit in einem Shader zu verwenden, wie Kapitel 2.10 sagt:

Es ist nicht Variablen unterschiedlichen Probentypen haben darf zeigt auf die gleiche Texturbildeinheit innerhalb eines Programmobjekts. Diese Situation kann nur beim nächsten ausgegebenen Rendering-Befehl erkannt werden und ein INVALID_OPERATION-Fehler wird dann generiert.

So können Sie nicht verwenden, um sowohl ein sampler2D und ein samplerCube auf die gleiche Textureinheit bezieht Ihre Implementierung der Textureinheit Grenzen zu biegen.