Ich versuche, ein Textur-Array in meinen Shader zu laden. Das Problem, mit dem ich konfrontiert bin, ist, dass ich nur die letzte geladene Textur im Array zeichnen kann. Merkwürdigerweise wird dies immer bei Index 0. Ich schaffe die Textur-Array wie so (I Go Bindungen bin mit, aber die allgemeine Idee ist klar):Probleme beim Zugriff Texturen in einem TEXTURE_2D_ARRAY gespeichert
// Allocate the array
width := 32
height := 32
var textureArray uint32
gl.GenTextures(1, &textureArray)
gl.BindTexture(gl.TEXTURE_2D_ARRAY_EXT, textureArray)
gl.TexStorage3D(gl.TEXTURE_2D_ARRAY_EXT, 1, gl.RGBA, width, height, layerCount)
gl.TexParameteri(gl.TEXTURE_2D_ARRAY_EXT, gl.TEXTURE_MIN_FILTER, gl.LINEAR)
gl.TexParameteri(gl.TEXTURE_2D_ARRAY_EXT, gl.TEXTURE_MAG_FILTER, gl.LINEAR)
gl.TexParameteri(gl.TEXTURE_2D_ARRAY_EXT, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)
gl.TexParameteri(gl.TEXTURE_2D_ARRAY_EXT, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)
// Load the textures into the array (assume rgbaN.Pix returns an RGBA image
gl.TexSubImage3D(gl.TEXTURE_2D_ARRAY_EXT, 0, 0, 0, 0, width, height, 1, gl.RGBA, gl.UNSIGNED_BYTE, gl.Ptr(rgba0.Pix))
gl.TexSubImage3D(gl.TEXTURE_2D_ARRAY_EXT, 0, 0, 0, 1, width, height, 1, gl.RGBA, gl.UNSIGNED_BYTE, gl.Ptr(rgba1.Pix))
gl.TexSubImage3D(gl.TEXTURE_2D_ARRAY_EXT, 0, 0, 0, 2, width, height, 1, gl.RGBA, gl.UNSIGNED_BYTE, gl.Ptr(rgba2.Pix))
Dann habe ich in meinem Draw Schleife tun:
gl.BindTexture(gl.TEXTURE_2D_ARRAY_EXT, textureArray)
gl.BindVertexArray(vertexArray)
gl.DrawElements(gl.TRIANGLES, int32(len(indices)), gl.UNSIGNED_INT, nil)
Mein Shader sieht wie folgt aus:
#version 110
#if GL_EXT_texture_array
#extension GL_EXT_texture_array : enable
#endif
varying vec2 texCoord;
uniform sampler2DArray texArray;
void main()
{
gl_FragColor = texture2DArray(texArray, vec3(texCoord, 0.0));
}
Mit diesem Shader zeichne ich immer die zuletzt hinzugefügten Textur auf dem Array. Wenn ich die vec3(texCoord, 0.0)
zu etwas wie vec3(texCoord, 1.0)
ändere, bekomme ich Schwärze. Nichts ist gezeichnet. Mein derzeitiger Gedanke ist, dass ich die Uniform nicht korrekt ordne, aber ich weiß nicht, wie ich das beheben soll.
Wie planen Sie in ES 2.0 3D-Texturen auf tun? – genpfault
@genpfault Ich denke, dass die Erweiterung 'GL_EXT_texture_array' das Speichern von 2D-Texturen in einem Textur-Array ermöglicht. Oder irre ich mich? – Max
Nicht 'GL_EXT_texture_array' auf der [ES Registrierungserweiterungsliste] sehen (https://www.khronos.org/registry/OpenGL/index_es.php). – genpfault