我正试图在iPhone上渲染OpenGL ES 2.0中的简单纹理四边形。几何形状是很好,我得到预期的四,如果我在着色器使用纯色: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,缩放装载到装配在1024×1024,并装入纹理像这样:
glGenTextures (1, &_texture); glBindTexture (GL_TEXTURE_2D, _texture); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
width
,height
,将其内容data
都是正确的,正如调试器中所检查的那样。
当我改变我的片段着色器使用质地:
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功能的参数是我期望的。
和你一样,我无法看到任何明显的错误所呈现的代码。如果你愿意,你可以将整个项目发布在某个地方吗?有一些非常有趣的事情发生。 – Tommy 2010-12-03 17:56:39
我不想发布整个项目,但OpenGL的代码是一个自包含的UIView子类: – Xtapolapocetl 2010-12-03 18:04:16