テクスチャ配列をシェーダにロードしようとしています。私が直面している問題は、最後に読み込まれたテクスチャを配列に描画することしかできないことです。TEXTURE_2D_ARRAY内に格納されているテクスチャにアクセスする際の問題
:私は私のドローループ内で、その後// 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))
:奇妙なことに、これは私が(私は行くバインディングを使用していますが、一般的な考え方がクリアされている)のような質感の配列を作成したインデックスは0で常にあります私はいつも、アレイに最後に追加されたテクスチャを描き、このシェーダで
#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));
}
:
gl.BindTexture(gl.TEXTURE_2D_ARRAY_EXT, textureArray)
gl.BindVertexArray(vertexArray)
gl.DrawElements(gl.TRIANGLES, int32(len(indices)), gl.UNSIGNED_INT, nil)
私のシェーダはこのようになります。 vec3(texCoord, 0.0)
をvec3(texCoord, 1.0)
のように変更すると、黒さが増えます。何も描かれません。私の現在の考え方は、私がユニフォームを正しく割り当てていないということですが、それを修正する方法はわかりません。
ES 2.0で3Dテクスチャをどのように行う予定ですか? – genpfault
@genpfault GL_EXT_texture_array拡張は、テクスチャ配列内に2Dテクスチャを格納することができると思います。または私は間違っていますか? – Max
[ESレジストリ拡張リスト](https://www.khronos.org/registry/OpenGL/index_es.php)の 'GL_EXT_texture_array'が表示されません。 – genpfault