2012-11-08 70 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上遇到相同问题的人。 –

相关问题