OpenGL生成的纹理总是黑色?

时间:2013-09-29 12:48:19

标签: opengl textures glsl

我正在生成纹理:

glGenTextures(1, &texA);
glBindTexture(GL_TEXTURE_2D, texA);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
GLubyte* data = (GLubyte *) malloc(32*32*4*sizeof(GLubyte));
    for (int i = 0; i < 32 * 32 * 4; i+=4) {  
      data[i] = data[i+1] = data[i+2] = 123;
      data[i+3] = 255;
    }
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 32, 32, 0, GL_RGBA,GL_UNSIGNED_BYTE, data);

现在我想将它传递给我的着色器:

glBindTexture(GL_TEXTURE_2D,texA);
glUniform1i(inputTextureLocation, 0);

但是当我尝试在片段着色器中使用它时,我只会得到黑色:

out vec4 color
uniform sampler2D inputTex;
void main() {
    color = vec4(texture2D(inputTex, vec2(1,1)).xyz, 1);
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在这种情况下,您总是从同一位置采样 - (1,1)。如果您希望每个片段更改颜色,则每个片段需要更改texture2D的第二个参数。通常,你会做类似的事情:

texture2D (inputTex, gl_TexCoord[0].xy);

或类似的。 (当然,这意味着您还需要在几何体上设置纹理坐标。如果不这样做,所有顶点都可能以相同的纹理坐标结束。)