6

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

4

2 回答 2

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

于 2012-11-09T08:13:34.287 回答
3

我通过考虑它在桌面上运行但不在 iOS 上的事实发现了这个问题。当格式不同但 Apple 的 OpenGL ES 2.0 实现不支持这一点时,使用 aformat和和 的OpenGL 纹理被 AFAIK 从一种格式转换为另一种格式。internal format

我想到这可能是不工作的纹理和GL_INVALID_OPERATION. 我检查了我的枚举,发现LUMINANCE_ALPHAin one enum 的定义没有分配任何值,只是使用了 + 1 之前的定义编号。OpenGL 在桌面上忽略了这一点,因为该数字一直是有效的纹理格式,在 iOS 上它失败了。

于 2012-11-17T13:43:04.867 回答