我正在尝试在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);
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函数参数符合我的预期。