加剧OpenGL纹理问题

时间:2010-10-13 04:59:00

标签: opengl textures fragment-shader

我在尝试将纹理加载到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);
}

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

感谢。

1 个答案:

答案 0 :(得分:3)

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

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

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

然而,你确实意识到“一切都崩溃了”并没有帮助你搞清楚你所看到的一切吗?一般来说,屏幕截图值得千言万语,但缺少这一点,至少描述 它失败会有所帮助。