我在iPhone上的GL上有一個非常基本的紋理映射問題,我想知道有什麼策略來調試這種事情。調試基本的OpenGL紋理失敗? (iPhone)
(坦白地說,只是盯着狀態機電話和想知道如果其中的任何錯誤或亂序是沒辦法live--是否有工具嗎?)
我有一個512x512的PNG文件,我」從磁盤加載(不是專門打包的),創建一個CGBitmapContext
,然後調用CGContextDrawImage
從中獲取字節。 (此代碼基本上是從蘋果樣本被偷了。)我試圖映射紋理到「四」,其代碼看上去基本上和this--所有2D平面的東西,沒有什麼花哨:
glEnable(GL_TEXTURE_2D);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
GLfloat vertices[8] = {
viewRect.origin.x, viewRect.size.height,
viewRect.origin.x, viewRect.origin.y,
viewRect.size.width, viewRect.origin.y,
viewRect.size.width, viewRect.size.height
};
GLfloat texCoords[8] = {
0, 1.0,
0, 0,
1.0, 0,
1.0, 1.0
};
glBindTexture(GL_TEXTURE_2D, myTextureRef); // This was previously bound to
glVertexPointer(2, GL_FLOAT , 0, vertices);
glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisable(GL_TEXTURE_2D);
- 我假設紋理區域只是黑色。
- 我看不到來自CG調用的調試輸出來設置紋理。
glGetError
什麼也沒有報告。- 如果我簡化這個代碼塊來繪製垂直,但設置一個純色,那麼四邊形區域就像預期的那樣點亮。
- 如果我立即將整個上下文清除爲紅色,我不會看到紅色 - 這意味着在那裏呈現某些內容,但不會顯示我的PNG內容。
我能做什麼錯?更重要的是,調試這類事情的正確工具和技術是什麼,因爲遇到這樣的問題並且無法以任何有意義的方式在調試器中「逐步完成」是一件令人失望的事情。
謝謝!
如果您只繪製沒有紋理的四邊形並且沒有設置顏色,結果如何?如果它是黑色,請嘗試使用GL_REPLACE而不是GL_MODULATE。 – 2010-03-11 16:15:50
Maurice:這解決了它。我完蛋了。這麼多我仍然不明白。我希望這個框架帶有一個調試系統,所以你可以理解它是什麼*試圖*做超越...看到一個大的空矩形。 – 2010-03-12 03:03:13