2011-05-02 107 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