这是我的(包装)OpenGL调用,它会导致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。
答案 0 :(得分: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 :(得分:3)
我发现这个问题是因为它在桌面上运行而在iOS上运行。使用format
和internal format
的OpenGL纹理,当格式不同时,AFAIK从一种格式转换为另一种格式,但Apple的OpenGL ES 2.0实现不支持此格式。
我想到,对于不起作用的纹理和GL_INVALID_OPERATION
,这可能是唯一的问题。我检查了我的枚举,发现一个枚举中的LUMINANCE_ALPHA
的定义没有分配值,只是在+ 1之前使用了定义的编号.OpenGL在桌面上忽略了这个,因为数字是一个有效的纹理格式,在iOS上失败。