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);
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功能的参数是我期望的。
在glTexImage2D之后,使用glTexParameter设置MIN / MAG滤镜,默认情况下使用mipmaps,因此该代码的纹理不完整。
我遇到了同样的问题(黑色四边形),直到jfcalvo从这个问题回复我的原因才找到答案。 基本上确保你没有在不同的线程中加载纹理。
请确保在S和T两个方向上将纹理环绕参数设置为GL_CLAMP_TO_EDGE。 没有这个,纹理是不完整的,并且会显示黑色。
链接地址: http://www.djcxy.com/p/5813.html