2011-05-02 109 views
0

我的OpenGL ES 1.1存在严重问题,虽然我已经查看了它,但仍无法找到解决方案,但我避开了上千次。在这里找不到类似的问题。我希望你们能帮助我。不显示opengl纹理,尽管代码几乎与代码示例相同

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

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

问题是:我的glClear()调用会影响屏幕的颜色,尽管我的纹理没有显示。这个问题既不是由UIView子类引起的,也不是由代码加载纹理引起的,因为相应实例的所有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(); 

我认为这是问题产生的地方。如果你想看看我的代码创建一个帧缓冲区,我可以给你看。尽管如此,它仍然与示例中的几乎相同。

我非常绝望地找到解决方案,因为我单步执行整个代码的次数达到了上千次,但是我找不到代码段,在这里我做了一些与代码示例不同的代码。

预先感谢您。 Dominik

回答

0

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

GLboolean glIsTexture(GLuint texture); 
+0

感谢您的回复@Toro。我不知道。不过,我刚刚对它进行了测试,看起来这不会导致问题。不管怎样,谢谢你。 – 2011-05-02 13:34:13