5

当我使用 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 呢?是这样保存的吗?

4

1 回答 1

10

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

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

于 2013-07-20T10:49:20.333 回答