当我使用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呢?保留了吗?

最佳答案

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

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

关于opengl - 切换FBO时是否保持glEnable?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17760937/

10-09 06:21