我正在围绕OpenGL ES编写一个简单的OOP包装器。在编写render-和framebuffer时,我必须绑定缓冲区才能使用它:
- (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
会为我做这件事?