切换FBO时是不是保留glEnable?

Posted

技术标签:

【中文标题】切换FBO时是不是保留glEnable?【英文标题】:Is glEnable kept when switching FBO?切换FBO时是否保留glEnable? 【发布时间】:2013-07-20 09:52:26 【问题描述】:

当我使用 glEnable 设置东西,或者为我启用的东西指定 func,然后切换帧缓冲区对象时,我的设置是为每个帧缓冲区对象保留的,还是我必须为每个对象设置它们?在实践中,这行得通吗?

glEnable(GL_CULL_FACE);
glCullFace(GL_FRONT); 
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
for int i=0; i<N; i++
     glBindFramebuffer(GL_FRAMEBUFFER, fbos[i]);
     rendering something to the fbos here

还是我必须写

for int i=0; i<N; i++
     glBindFramebuffer(GL_FRAMEBUFFER, fbos[i]);
     glEnable(GL_CULL_FACE);
     glCullFace(GL_FRONT); 
     glEnable(GL_DEPTH_TEST);
     glDepthMask(GL_TRUE);
     rendering something to the fbos here

编辑:那么 glUseProgram 呢?保留了吗?

【问题讨论】:

【参考方案1】:

不,GL_CULL_FACE 和其他光栅化状态不会存储在每个帧缓冲区对象中。实际上,您只需要设置一次状态。

要检查这个事实,您可以阅读OpenGL specification 的第 23 章(状态表)中的状态规范。该表定义了每个帧缓冲区对象的状态。

【讨论】:

以上是关于切换FBO时是不是保留glEnable?的主要内容,如果未能解决你的问题,请参考以下文章

使用 BottomNavigationView 在它们之间切换时保留片段状态

在视图之间来回切换时保留一个值

切换视图控制器时如何保留 UIDatePicker 和 UITextField 值?

UI-Router:如何在切换视图时保留视图

在视图控制器之间切换时保留按钮状态

补充与预告 切换页面时保留状态 后 增加 Tabs 模式 , 允许看到多个页面与关闭.