OpenGL ES 2.0纹理

我试图在iPhone上渲染OpenGL ES 2.0中的简单纹理四元组。 几何很好,如果我在着色器中使用纯色,我会得到预期的四边形:

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

如果直接渲染纹理坐标,我会得到预期的渐变效果:

    gl_FragColor = vec4 (texCoord.x, texCoord.y, 0.0, 1.0);

图像数据从UIImage中加载,缩放以适合1024x1024,然后加载到像这样的纹理中:

    glGenTextures (1, &_texture);
    glBindTexture (GL_TEXTURE_2D, _texture);

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, 
        GL_UNSIGNED_BYTE, data);

widthheightdata内容都是正确的,如调试器中所检查的。

当我更改我的片段着色器以使用纹理时:

    gl_FragColor = texture2D (tex, texCoord);

...并绑定纹理并渲染像这样:

    glActiveTexture (GL_TEXTURE0);
    glBindTexture (GL_TEXTURE_2D, _texture);

    // this is unnecessary, as it defaults to 0, but for completeness...
    GLuint texLoc = glGetUniformLocation(_program, "tex");          
    glUniform1i(texLoc, 0);

    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

...我什么也没得到。 黑色的四边形。 glGetError()不返回错误, glIsTexture(_texture)返回true。

我在这里做错了什么? 我已经反复了我可以在网上找到的每一个例子,但是每个人都像我一样完成它,调试器显示我对各种GL功能的参数是我期望的。


在glTexImage2D之后,使用glTexParameter设置MIN / MAG滤镜,默认情况下使用mipmaps,因此该代码的纹理不完整。


我遇到了同样的问题(黑色四边形),直到jfcalvo从这个问题回复我的原因才找到答案。 基本上确保你没有在不同的线程中加载纹理。


请确保在S和T两个方向上将纹理环绕参数设置为GL_CLAMP_TO_EDGE。 没有这个,纹理是不完整的,并且会显示黑色。

链接地址: http://www.djcxy.com/p/5813.html

上一篇: OpenGL ES 2.0 texturing

下一篇: Iphone OpenGL ES Reuse or draw once Texture scene