0

我在尝试将纹理加载到 VRAM 时遇到问题。我在 Mac OS X 上使用 OpenGL。通过将颜色传递到片段着色器中,我已经成功渲染了几何图形。但是,一旦我尝试加载纹理,就不会渲染任何几何图形,我只能看到背景颜色。这是我的纹理加载代码:

char imageData[27] = {
    127, 127, 127,
    127, 127, 127,
    127, 127, 127,
    127, 127, 127,
    127, 127, 127,
    127, 127, 127,
    127, 127, 127,
    127, 127, 127,
    127, 127, 127,
};

glActiveTexture(GL_TEXTURE0);
GLuint textureID;
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 3, 3, 0, GL_RGB, GL_UNSIGNED_BYTE, imageData);

GLint uniform_location = glGetUniformLocation(bundle->GetShaderProgramID(), "texture");
std::cout << uniform_location <<std::endl;
glUniform1i(uniform_location, 0);

glEnable(GL_TEXTURE_2D);

这是我的片段着色器代码:

uniform sampler2D texture;

void main()
{
    vec2 coord = vec2(0.5, 0.5);

    //gl_FragColor = vec4(coord, 0.0, 1.0);

    gl_FragColor = vec4(texture2D(texture, coord).rgb, 1.0);
}

我意识到其中一些代码可能不是必需的,但我一直在尝试我能想到的一切。

谢谢。

4

1 回答 1

3

最可能的原因是您没有关闭 mipmapping,并且您没有指定 mipmapping 级别。所以你的纹理是不完整的。

在这个纹理对象上关闭它(在 glTexImage2D 调用周围完成)

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

但是,您确实意识到“一切都崩溃了”根本无助于弄清楚您所看到的?一般来说,一张截图值一千字,但如果不够的话,至少描述一下它是如何失败的会有所帮助。

于 2010-10-13T06:56:31.597 回答