我正在尝试从片段着色器中读取texture1d:
uniform sampler1D world;
...
texelFetch(world, 0, 0);
我上传w,其中w [0] = 123.0f w [1] = 123.0f ......:
glActiveTexture(GL_TEXTURE0);
glGenTextures(1, &pt->world);
glBindTexture(GL_TEXTURE_1D, pt->world);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexImage1D(GL_TEXTURE_1D, 0, GL_RGBA32F, 2, 0, GL_RGBA, GL_FLOAT, &w);
结合:
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_1D, pt->world);
glUniform1i(glbPTworld, 0);
然而,当我在glTexImage1D中使用不同于一个的宽度时,片段着色器读取vec4(0,0,0,1)而不是vec4(123,123,123,123)。另外,如果我使用:
glGetTexImage(GL_TEXTURE_1D, 0, GL_RGBA, GL_FLOAT, x);
要恢复纹理,我会看到预期的值。
答案 0 :(得分:1)
我看到你的代码有几个红旗,但我不确定它们是否与问题有关。首先,你告诉OpenGL你的纹理只有2个像素宽。这是对的吗?
其次,您将GL_TEXTURE_2D
传递给glTexParameteri()
,但您正在使用GL_TEXTURE_1D
纹理目标。这似乎不对。