如何解决帧缓冲区对象FBO与渲染和深度缓冲区关系
|| 我在网上看到了许多示例(例如),这些示例执行以下操作 创建并绑定FBO 创建和绑定缓冲(纹理,渲染,深度,模具) 然后,UnBind BUFFERS 要使用FBO-绑定FBO,请先进行工作,然后取消绑定FBO 但是,也可以将纹理缓冲区与纹理缓冲区绑定以进行读取,写入等操作 但是从未见过其他装订器(渲染,深度,模版)的重新绑定,为什么? BUFFERS创建和绑定/解除绑定的示例(下面的代码仅是为了说明我所解释的内容和工作原理),// create a framebuffer object,you need to delete them when program exits.
glGenFramebuffersEXT(1,&fboId);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,fboId);
// create color buffer object and attached to fbo
glGenRenderbuffersEXT(1,&rboId);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT,rboId);
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT,GL_RGB,TEXTURE_WIDTH,TEXTURE_HEIGHT);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT,0); //UnBind
if(useDepthBuffer) {
glGenRenderbuffersEXT(1,&rboIdDepth);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT,rboIdDepth);
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT,GL_DEPTH_COMPONENT,TEXTURE_HEIGHT);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT,0); //UnBind
}
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,GL_COLOR_ATTACHMENT0_EXT,GL_RENDERBUFFER_EXT,rboId);
if(useDepthBuffer)
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,GL_DEPTH_ATTACHMENT_EXT,rboIdDepth);
// check FBO status
printFramebufferInfo();
bool status = checkFramebufferStatus();
if(!status)
fboUsed = false;
.
//then,.
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,fboId);
// Do the work
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,0);
1.为什么我们不需要再次绑定所有缓冲块(我的意思是
使用/绘制对象
FBO)?
2.这里的幕后情况是什么?
编辑:附加->绑定并取消附加->取消绑定
解决方法
我不知道我是否完全了解您,但是绑定到附件点(
GL_COLOR_ATTACHMENT
...)的渲染缓冲区是按FBO状态,并且此FBO状态保持不变,您只需要绑定FBO即可告知OpenGL此FBO现在已使用,并且其所有状态(您之前设置的状态)都将生效。
,我认为
然后,拆下BUFFERS
你指的是这个
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT,rboIdDepth);
但是,这不是分离的,而是解除绑定的,这意味着有所不同。渲染缓冲区仍附加到FBO。但是,绑定选择要在其上执行以下缓冲区对象操作的缓冲区对象。有点像某些语言中的with
语句。
不必绑定缓冲区对象的实际附加操作在此处进行
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,GL_COLOR_ATTACHMENT0_EXT,GL_RENDERBUFFER_EXT,rboId ); // rboID != 0
它将由匹配项分离
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,0 );
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。