0

我正在尝试从片段着色器中读取 texture1d:

uniform sampler1D world;

...

texelFetch(world, 0, 0);

我上传 w,其中 w[0]=123.0fw[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 中使用不同于 1 的宽度时,片段着色器读取 vec4(0,0,0,1) 而不是 vec4(123,123,123,123)。另外,如果我使用:

glGetTexImage(GL_TEXTURE_1D, 0, GL_RGBA, GL_FLOAT, x);

为了恢复纹理,我看到了预期值。

4

1 回答 1

1

我在您的代码中看到了几个危险信号,但我不确定它们是否与问题有关。首先,您告诉 OpenGL 您的纹理只有 2 个像素宽。那是对的吗?

其次,您正在传递GL_TEXTURE_2DglTexParameteri(),但您正在使用GL_TEXTURE_1D纹理目标。这似乎是错误的。

于 2014-03-07T03:28:57.447 回答