我正在围绕 OpenGL ES 编写一个简单的 OOP 包装器。在编写渲染和帧缓冲区时,我必须绑定缓冲区才能使用它:
- (void) setupSomething
{
…
glBindRenderbufferOES(GL_RENDERBUFFER_OES, myBufferID);
…
}
现在,如果在已经绑定了其他渲染缓冲区的上下文中调用此设置代码怎么办?上面提到的我的简单版本会产生切换当前缓冲区的令人讨厌的副作用,这听起来很脆弱。我想我应该更加防御性地编写代码:
- (void) setupSomething
{
// Store current state
GLint previousRenderBuffer = 0;
glGetIntegerv(GL_RENDERBUFFER_BINDING_OES, &previousRenderBuffer);
// Do whatever I want to do
glBindRenderbufferOES(GL_RENDERBUFFER_OES, myBufferID);
…
// Restore previous state
glBindRenderbufferOES(GL_RENDERBUFFER_OES, previousRenderBuffer);
}
我的问题是:真的有必要/明智/习惯像这样保存以前的状态吗?如果是的话,有glPushSomething
什么方法可以为我做吗?