尽管代码几乎与代码示例相同,但不显示opengl纹理

时间:2011-05-02 09:37:40

标签: iphone opengl-es

我对OpenGL ES 1.1有一个严重的问题,虽然我已经查看了一千次,但我找不到解决方案,而且我在这里找不到类似问题的东西。我希望你们能帮助我。

我在71squared.com上观看了教程2(你可以找到它here)并从同一页面下载了代码示例。它运行良好。

然后我尝试编写自己的代码,以使其适应我的项目。无论如何,当谈到OpenGL调用时,我注意使用与示例相同的代码。

问题如下:虽然我的纹理没有显示,但我对glClear()的调用会影响屏幕的颜色。 UIView子类(显示glClear())或加载纹理的代码都不会导致问题,因为正确计算了相应实例的所有iVar。此外,即使纹理坐标和顶点也采用正常值,这与代码示例中的相同。所以问题必定是由我使用OpenGL做出的一些小错误造成的。

这些是我的所有OpenGL调用:

初始化:

CGRect rect = [[UIScreen mainScreen] bounds];

        // Set up OpenGL projection matrix
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrthof(0, rect.size.width, 0, rect.size.height, -1, 1);
        glMatrixMode(GL_MODELVIEW);
        glViewport(0, 0, rect.size.width, rect.size.height);

        // Initialize OpenGL states
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
        glDisable(GL_DEPTH_TEST);
        glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND_SRC);
        glEnableClientState(GL_VERTEX_ARRAY);

绘制纹理:

(t是指向包含有关如何绘制图形的信息的结构的指针。)

glPushMatrix();

glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnable(GL_TEXTURE_2D);

glTranslatef(t->posX, t->posY, 0.0f);
glRotatef(-(t->rotation), 0.0f, 0.0f, 1.0f);
glColor4f(t->filter[0], t->filter[1], t->filter[2], t->filter[3]);

glBindTexture(GL_TEXTURE_2D, _texture.name);
glEnable(GL_BLEND);
glVertexPointer(2, GL_FLOAT, 0, vertices);
glTexCoordPointer(2, GL_FLOAT, 0, _texCoords);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

glDisable(GL_BLEND);
glDisable(GL_TEXTURE_2D);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);

glPopMatrix();

我认为这是造成问题的地方。如果你想看到我的代码创建一个帧缓冲区,我可以向你展示。然而,它与示例中的几乎相同。

我非常绝望地找到了解决方案,因为我已经单步遍历整个代码一千次,但是我找不到代码示例所在的代码片段。

提前谢谢你。 多米尼克

1 个答案:

答案 0 :(得分:0)

每次生成纹理图像时,都必须通过此方法检查此纹理是否有效。 如果此纹理无效,则需要在一段延迟时间内重新生成它。

GLboolean glIsTexture(GLuint texture);