我阅读了iOS OpenGL ES 逻辑缓冲区负载,可以通过在每个绘制周期后“丢弃”深度缓冲区来实现性能提升。我试试这个,但这是因为我的游戏引擎不再渲染。当我尝试渲染下一个周期时,我收到 glError 1286 或 GL_INVALID_FRAMEBUFFER_OPERATION_EXT。
如果我要丢弃它,我觉得我需要在每个周期初始化或设置深度缓冲区,但我似乎找不到任何关于此的信息。这是我如何初始化深度缓冲区(实际上是所有缓冲区):
// ---- GENERAL INIT ---- //
// Extract width and height.
int bufferWidth, bufferHeight;
glGetRenderbufferParameteriv(GL_RENDERBUFFER,
GL_RENDERBUFFER_WIDTH, &bufferWidth);
glGetRenderbufferParameteriv(GL_RENDERBUFFER,
GL_RENDERBUFFER_HEIGHT, &bufferHeight);
// Create a depth buffer that has the same size as the color buffer.
glGenRenderbuffers(1, &m_depthRenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, m_depthRenderbuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24_OES, GAMESTATE->GetViewportSize().x, GAMESTATE->GetViewportSize().y);
// Create the framebuffer object.
GLuint framebuffer;
glGenFramebuffers(1, &framebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_RENDERBUFFER, m_colorRenderbuffer);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
GL_RENDERBUFFER, m_depthRenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, m_colorRenderbuffer);
这是我试图在每个绘制周期结束时丢弃深度缓冲区的方法:
// Discard the depth buffer
const GLenum discards[] = {GL_DEPTH_ATTACHMENT, GL_COLOR_ATTACHMENT0};
glBindFramebuffer(GL_FRAMEBUFFER, m_depthRenderbuffer);
glDiscardFramebufferEXT(GL_FRAMEBUFFER,1,discards);
我在所有的抽奖电话之后立即调用它并且......
[m_context presentRenderbuffer:GL_RENDERBUFFER];
有任何想法吗?有人可以指出我的任何信息吗?我尝试阅读有关该主题的Apple指南(我得到了最初的想法),http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/WorkingwithEAGLContexts/WorkingwithEAGLContexts.html,但它没有似乎不太适合我。