片段着色器中的 OpenGL 纹理黑色

OpenGL texture black in fragment shader

尝试在片段着色器中使用纹理时,纹理全是黑色。我觉得好像缺少了一些东西,但我看过的一切似乎都还不错。这是我使用纹理的代码:

GLuint shaderProg = compileShaderPair(vsource, fsource);
GLint texSampler = glGetUniformLocation(shaderProg, "tex");
glUniform1i(texSampler, 0);
glUseProgram(shaderProg);
...
GLuint tex;
glActiveTexture(GL_TEXTURE0);
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
int width, height, components;
unsigned char* img = stbi_load("texture.jpg", &width, &height, &components, 3);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, img);
glGenerateMipmap(GL_TEXTURE_2D);

顶点着色器:

#version 330
in vec3 pos;
in vec2 uv;
out vec2 texcoord;
void main() {
    texcoord = uv;
    gl_Position = vec4(pos, 1.0)
}

片段着色器:

#version 330
in vec2 texcoord;
out vec4 outColor;
uniform sampler2D tex;
void main() {
    outColor = vec4(texture(tex, texcoord).rgb, 1.0);
}

我已经验证纹理正在加载,并且纹理坐标没有问题。

编辑:在 RenderDoc 中调试时它工作正常,但当 运行 本身时,它不起作用。

GL_RGB用作internalFormat时,精度留给实现,最好使用GL_RGBA8

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, img);

不确定这是不是你的问题,但无论如何值得一提,'comments' 写代码有点小。

糟糕!我忘记了 Visual Studio 在调试时弄乱了工作目录,并且 stb_image 在尝试加载图像时没有抛出任何错误。 运行 它在 Visual Studio 之外,它工作正常。