1
我正在寫OpenGL ES的一個簡單的OOP包裝。雖然寫render-和幀緩存我有緩衝綁定,以便與它的工作:使用渲染緩衝區和幀緩衝區時,我應該清理OpenGL狀態嗎?
- (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
會做它對我?