gpt4 book ai didi

opengl - 解除绑定(bind) OpenGL 缓冲区有什么影响?

转载 作者:行者123 更新时间:2023-12-02 03:38:26 24 4
gpt4 key购买 nike

按照教程进行操作 here为了了解 OpenGL 3.3,我知道顶点和索引缓冲区需要与 glBindBuffer() 绑定(bind)才能向它们发出命令。有人提到可以通过将 0 句柄传递给 glBindBuffer() 来取消绑定(bind)缓冲区,这似乎是一个好主意,可以防止在使用完缓冲区后意外使用不正确的缓冲区。在发出设置或绘制调用后,是否有任何理由不总是解除顶点和索引缓冲区的绑定(bind)?

最佳答案

由于 OpenGL 的架构是状态机,因此经常会提出这样的话题 - 并且没有明确的答案。缓冲区绑定(bind)确实会影响各种其他 GL 命令的操作,具体取决于绑定(bind)目标。

在某些情况下,对象 0 代表一些“无缓冲区/默认对象”情况。例如,使用 GL_PIXEL_UNPACK_BUFFER ,使用 0 将允许您将像素数据直接从客户端内存传输到 GL - 因此,如果您想这样做,您绝对需要在某个时候取消绑定(bind)任何绑定(bind)的 PBO。尽早或尽可能晚地完成这取决于程序员,并且在很大程度上取决于软件的架构。一般规则应该是避免不必要的状态更改,其中包括缓冲区(取消)绑定(bind)操作。但是遵循这条路线通常会导致某些状态“泄漏”超出其真正应有的范围的情况 - 而且这样的东西调试起来可能很烦人。

在其他情况下,0不是做任何事情的有效状态。例如,现代 GL 要求您使用 VBO。实际上并不需要将 0 绑定(bind)为 GL_ARRAY_BUFFER ,因为唯一的用例 - 指定一些指向客户端内存的 attrib 指针 - 已经消失了。因此,取消绑定(bind) VBO 总是浪费时间 - 下次设置 attrib 指针时,无论如何都必须绑定(bind)一些 VBO,如果不设置 attrib 指针,则该绑定(bind)目标完全无关。

关于opengl - 解除绑定(bind) OpenGL 缓冲区有什么影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22123222/

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