我正試圖在iPhone上渲染OpenGL ES 2.0中的簡單紋理四邊形。幾何形狀是很好,我得到預期的四,如果我在着色器使用純色: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,縮放裝載到裝配在1024×1024,並裝入紋理像這樣:
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功能的參數是我期望的。
和你一樣,我無法看到任何明顯的錯誤所呈現的代碼。如果你願意,你可以將整個項目發佈在某個地方嗎?有一些非常有趣的事情發生。 – Tommy 2010-12-03 17:56:39
我不想發佈整個項目,但OpenGL的代碼是一個自包含的UIView子類: – Xtapolapocetl 2010-12-03 18:04:16