我读iOS OpenGL ES Logical Buffer Loads,可以通过在每个绘制周期后“丢弃”深度缓冲区来达到性能增益。我尝试了这一点,但这是因为我的游戏引擎不再渲染。当我尝试呈现下一个周期时,出现glError 1286或GL_INVALID_FRAMEBUFFER_OPERATION_EXT。OpenGL ES 2.x:如何放弃深度缓冲区glDiscardFramebufferEXT?
我感觉我需要初始化或设置深度缓冲区每个周期,如果我要放弃它,但我似乎无法找到任何有关此信息。这里是我的init深度缓冲(所有的缓冲区,实际上):
// ---- 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];
任何想法?有人可以指点我的任何信息?我尝试阅读苹果公司关于这个主题的指南(我有最初的想法),http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/WorkingwithEAGLContexts/WorkingwithEAGLContexts.html,但它似乎并不适合我。
StuDev,你是对的钱 - 我发送它1而不是2的第二个参数。而且,我在GL_FRAMEBUFFER上运行放弃,但是当我实例化深度缓冲区到GL_RENDERBUFFER时(虽然这样做)。 – David
有趣的修正...对于我而言,我必须将深度缓冲区绑定到GL_RENDERBUFFER,但在丢弃时使用GL_FRAMEBUFFER枚举。 – David