glTexImage2D导致GL_INVALID_OPERATION

时间:2012-11-08 18:52:24

标签: ios opengl-es

这是我的(包装)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。

2 个答案:

答案 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上运行。使用formatinternal format的OpenGL纹理,当格式不同时,AFAIK从一种格式转换为另一种格式,但Apple的OpenGL ES 2.0实现不支持此格式。

我想到,对于不起作用的纹理和GL_INVALID_OPERATION,这可能是唯一的问题。我检查了我的枚举,发现一个枚举中的LUMINANCE_ALPHA的定义没有分配值,只是在+ 1之前使用了定义的编号.OpenGL在桌面上忽略了这个,因为数字是一个有效的纹理格式,在iOS上失败。