2012-11-08 103 views
6

這是導致我的(包裝)的OpenGL調用GL_INVALID_OPERATIONglTexImage2D導致GL_INVALID_OPERATION

GLTextures.TexImage2D(TexImage2DTarget.TEXTURE_2D, 0, TexImageInternalFormat.LUMINANCE_ALPHA, Width, Height, TexImageFormat.LUMINANCE_ALPHA, TexImagePixelType.UNSIGNED_BYTE, source.GetData()); 

這一呼籲在Windows上運行,但不能在iOS上,在Windows一切正常,並顯示質感。我在iOS和Windows上使用相同的枚舉值,甚至着色器也是一樣的(在iOS上有一些精確提示)。此外,大多數紋理都在iOS上工作。

回答

3

我的思考,它運行在桌面上而不是在iOS的事實中發現的問題。 OpenGL紋理使用formatinternal format,並且在格式不同時使用AFAIK從一種格式轉換爲另一種格式,但Apple的OpenGL ES 2.0實現不支持此格式。

它出現在我的腦海裏,這可能是唯一的問題,不工作的紋理和GL_INVALID_OPERATION。我檢查了我的枚舉,發現在一個枚舉中LUMINANCE_ALPHA的定義沒有賦值,只是在+ 1之前使用了定義的編號.OpenGL在桌面上忽略了這個,因爲這個數字是有效的紋理格式,在iOS上失敗。

3

亮度alpha紋理使用LATC紋理壓縮。

而且由於iPhone不支持EXT_texture_compression_latc擴展名,因此您不能在iPhone上使用LATC紋理。

更多信息:

http://www.opengl.org/registry/specs/EXT/texture_compression_latc.txt

http://www.glbenchmark.com/phonedetails.jsp?benchmark=glpro25&D=Apple+iPhone+5&testgroup=gl

+1

但規格說:'最重要的原因,使這些新的壓縮格式 相同顯示常規亮度和亮度-α 紋理元素是使應用程序能夠無縫替代 新的壓縮格式爲現有GL_LUMINANCE和 GL_LUMINANCE_ALPHA textures.'此外,快速參考卡顯示它支持:http://www.khronos.org/opengles/sdk/docs/reference_cards/OpenGL-ES-2_0-Reference-card.pdf –

+0

請注意內部格式紋理不一定支持任何給定的GPU(PowerVR在你的情況)。 OpenGL驅動程序可能會嘗試將亮度-α紋理轉換爲某些支持的內部格式,但在移動設備上,驅動程序通常不會這樣做。我不使用iPhone,但在Android上,我總是通過檢查GL擴展名來檢查是否支持某些紋理格式,然後加載適當格式的紋理。請原諒我從另一個(Android)角度查看您的問題,在iPhone上OpenGL驅動程序可以更好。 – keaukraine

+0

沒問題,謝謝。但我認爲它應該工作。很難找到在iOS上遇到相同問題的人。 –

相關問題