【问题标题】:glTexSubImage2D -> GL_INVALID_OPERATIONglTexSubImage2D -> GL_INVALID_OPERATION
【发布时间】:2012-03-08 11:59:36
【问题描述】:

为什么glTexSubImage2D()会突然导致GL_INVALID_OPERATION?

我正在尝试将我过时的增强现实应用程序从 iOS4.x 升级到 iOS5.x,但我遇到了困难。我运行iOS5.0。上周我跑了iOS4.3。我的设备是 iPhone4。


这是我的captureOutput:didOutputSampleBuffer:fromConnection: 代码中的一个 sn-p

uint8_t *baseAddress = /* pointer to camera buffer */
GLuint texture = /* the texture name */
glBindTexture(GL_TEXTURE_2D, texture);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 480, 360, GL_BGRA, GL_UNSIGNED_BYTE, baseAddress);
/* now glGetError(); -> returns 0x0502 GL_INVALID_OPERATION on iOS5.0, works fine on iOS4.x */

这是我的设置代码中的一个 sn-p

GLuint texture = /* the texture name */
glGenTextures(1, &texture);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 512, 512, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);

为简单起见,我在此处插入了硬编码值。在我的实际代码中,我使用 CVPixelBufferGetWidth/Height/BaseAddress 获取这些值。 EAGLContext 使用 kEAGLRenderingAPIOpenGLES2 初始化。

【问题讨论】:

    标签: ios opengl-es-2.0 augmented-reality


    【解决方案1】:

    啊..我在发布这个问题后立即修复了它。不得不把 GL_RGBA 改成 GL_BRGA。

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 512, 512, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL);
    

    希望对某人有所帮助。

    顺便说一句。如果您想编写 AR 应用程序,请考虑使用 CVOpenGLESTextureCache 而不是 glTexSubImage2d。它应该更快。

    【讨论】:

    • 在 iOS 5.0 上,纹理缓存要快得多。我的 iPhone 4S 视频帧上传和处理时间从 9.0 毫秒到 1.8 毫秒。我在这个答案中描述了我如何将它集成到我的框架中:stackoverflow.com/a/9574798/19679
    • 谢谢!!!在我使用 glTexImage2D(..., GL_BGRA, ..., GL_BGRA, ...) 之前。将第一个切换到 GL_RGBA 解决了问题(glTexSubImage2D 仍在使用 GL_BGRA)。
    • 谁能解释一下为什么 glTexSubImage2D 需要 GL_BGRA 而不是 GL_RGBA??这只是帮了我很多忙,但不明白为什么会有所不同。
    • 太棒了!!!我也有同样的问题(glTexImage2D 给出 GL_INVALID_OPERATION)。或者更确切地说,其他人遇到了这个问题,我必须为他们解决这个问题。我很少接触 OpenGL 代码,所以这是一个救命稻草。 :-)
    猜你喜欢
    • 1970-01-01
    • 2014-04-02
    • 2012-01-20
    • 2023-01-12
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 2012-11-04
    • 2020-02-19
    相关资源
    最近更新 更多