Я прочитал Загрузки логического буфера 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,, но, похоже, оно мне не совсем подходит.