gpt4 book ai didi

iphone - 在 opengl es 2.0 iphone 中使用深度缓冲区

转载 作者:行者123 更新时间:2023-12-03 19:16:01 28 4
gpt4 key购买 nike

我遵循了在 opengl es 1.1 中使用深度缓冲区的教程。但我用的是opengl es 2.0。实现的代码会导致错误:无法制作完整的帧缓冲区对象 8cd6。请参阅下面的实现代码:

 (void)createFramebuffer
{
if (context && !defaultFramebuffer)
{
[EAGLContext setCurrentContext:context];

// Create default framebuffer object.
glGenFramebuffers(1, &defaultFramebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, defaultFramebuffer);

// Create color render buffer and allocate backing store.
glGenRenderbuffers(1, &colorRenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer);

// Create depth render buffer
glGenRenderbuffers(1, &depthRenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, depthRenderbuffer);

[context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer *)self.layer];
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &framebufferWidth);
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &framebufferHeight);

glBindRenderbuffer(GL_RENDERBUFFER, depthRenderbuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, framebufferWidth, framebufferHeight);

glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, colorRenderbuffer);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthRenderbuffer);


if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
NSLog(@"Failed to make complete framebuffer object %x", glCheckFramebufferStatus(GL_FRAMEBUFFER));
}
}

问候尼古拉斯

最佳答案

问题是您两次将存储绑定(bind)到深度渲染缓冲区,而不是颜色渲染缓冲区。发送到 EAGLContext 的 -renderbufferStorage:fromDrawable: 消息将存储绑定(bind)到当前绑定(bind)的渲染缓冲区,在您的情况下是深度渲染缓冲区。接下来,您将使用 glRenderbufferStorage 调用再次将存储绑定(bind)到它。

解决方案是在发送存储消息之前绑定(bind)颜色渲染缓冲区,以便存储与其绑定(bind)。也就是说,在创建深度渲染缓冲区后,在消息上方直接插入一行 glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer); 。它应该有效,我能够重现您的错误并随后以这种方式解决它。

注意。始终确保绑定(bind)了正确的缓冲区。您可以使用 glGetIntegerv() 检查绑定(bind),使用 glGetRenderbufferParameteriv() 检查其他参数。

关于iphone - 在 opengl es 2.0 iphone 中使用深度缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4060704/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com