我想將紋理數組加載到我的着色器中。我面臨的問題是我只能繪製數組中最後一個加載的紋理。奇怪的是,這個總是在索引爲0創建紋理數組像這樣(我使用轉到綁定,但總的思路是清晰的):無法訪問存儲在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))
然後,我畫循環內我做的:
gl.BindTexture(gl.TEXTURE_2D_ARRAY_EXT, textureArray)
gl.BindVertexArray(vertexArray)
gl.DrawElements(gl.TRIANGLES, int32(len(indices)), gl.UNSIGNED_INT, nil)
我着色器看起來是這樣的:
#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));
}
有了這個着色器,我總是得出最後添加紋理數組。如果我將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