gpt4 book ai didi

ios - 使用渲染缓冲区和帧缓冲区时是否应该清除 OpenGL 状态?

转载 作者:行者123 更新时间:2023-11-29 13:21:05 25 4
gpt4 key购买 nike

我正在围绕 OpenGL ES 编写一个简单的 OOP 包装器。在编写渲染和帧缓冲区时,我必须绑定(bind)缓冲区才能使用它:

- (void) setupSomething
{

glBindRenderbufferOES(GL_RENDERBUFFER_OES, myBufferID);

}

现在,如果在已经绑定(bind)了其他渲染缓冲区的上下文中调用此设置代码怎么办?我上面提到的简单版本会产生切换当前缓冲区的令人讨厌的副作用,这听起来很脆弱。我认为我应该更加防御性地编写代码:

- (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 可以为我做这件事?

最佳答案

使用像 OpenGL 这样的图形 API 时,尽量减少 API 调用次数通常是个好主意。有些调用可能非常昂贵——虽然我不确定 glBindRenderBuffer——它可能像只存储一个 int 一样便宜。但它可能是一些复杂的状态切换操作。你最好自己处理它 - 使用你自己的缓冲区“堆栈”(OpenGL ES 中没有 glPushAttrib 或类似的渲染缓冲区),或者,在我看来,最好避免这些情况 -始终确保在传递到另一个缓冲区之前使用已绑定(bind)的渲染缓冲区完成工作。

关于ios - 使用渲染缓冲区和帧缓冲区时是否应该清除 OpenGL 状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14341946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com