我正在运行 XCode 为 iOS 的 OpenGL 项目创建的样板 OpenGL 示例代码。这设置了一个简单的 ViewController 并使用 GLKit 来处理其余的工作。
应用程序的所有更新/绘制功能都在 C++ 中。它是跨平台的。
有很多帧缓冲区的创建正在进行。绘制阶段渲染到几个帧缓冲区,然后尝试将其设置回默认帧缓冲区。
glBindFramebuffer(GL_FRAMEBUFFER, 0);
这会生成一个 GL_INVALID_ENUM。仅在 iOS 上。
我完全不知道为什么。该代码在除 iOS 之外的所有主要平台上运行良好。我想责怪 GLKit。任何不使用 GLKit 的 iOS OpenGL 设置示例?
更新
下面的代码片段让我看到了 GLKit 正在使用的默认帧缓冲区。由于某种原因,它显示为“2”。如果我在我所有的 glBindFrameBuffer 调用中使用“2”就可以了。这非常令人沮丧。
[view bindDrawable ];
GLint defaultFBO;
glGetIntegerv(GL_FRAMEBUFFER_BINDING_OES, &defaultFBO);
LOGI("DEFAULT FBO: %d", defaultFBO);
到底什么原因会导致 GLKit 不会在 0 处生成其内部帧缓冲区?这是所有其他 OpenGL 实现使用的语义,0 是默认的 FBO。