【发布时间】:2011-05-19 20:43:25
【问题描述】:
我正在尝试在 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 函数显示我的参数是我期望的。
【问题讨论】:
-
就像您一样,我看不出所提供的代码有任何明显错误。如果你愿意,你能把整个项目贴在某个地方吗?一定会发生一些非常有趣的事情。
-
我不想发布整个项目,但是OpenGL代码在一个自包含的UIView子类中:
-
您的代码中的其他地方有问题 - 您提供的内容在匆忙连接到测试项目时运行良好。 pastie.org/1345953 的内容实际上是我写的全部内容,然后我抓取了亚马逊首页上当前的 Kindle 图形,将其调整为 1024x1024 并将其保存为 testImage.png,并将其作为资源添加到项目中。运行程序导致img802.imageshack.us/img802/1174/screenshot20101203at232.png