glTexImage2D导致GL_INVALID_OPERATION

Fel*_* K. 6 opengl-es ios

这是我的(包装的)OpenGL调用,它导致GL_INVALID_OPERATION:

GLTextures.TexImage2D(TexImage2DTarget.TEXTURE_2D, 0, TexImageInternalFormat.LUMINANCE_ALPHA, Width, Height, TexImageFormat.LUMINANCE_ALPHA, TexImagePixelType.UNSIGNED_BYTE, source.GetData());
Run Code Online (Sandbox Code Playgroud)

此调用适用于Windows但不适用于iOS,在Windows中一切正常并且显示纹理.我在iOS和Windows上使用相同的枚举值,甚至着色器也是相同的(在iOS上有一些精确的提示).最多的纹理也适用于iOS.

Fel*_* K. 3

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

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