gpt4 book ai didi

OpenGL VAO 最佳实践

转载 作者:行者123 更新时间:2023-12-03 05:17:17 27 4
gpt4 key购买 nike

我面临一个问题,我认为该问题与 VAO 相关,但我不确定..

我不确定 VAO 的正确用法,我在 GL 初始化期间所做的很简单

glGenVertexArrays(1,&vao)

后跟

glBindVertexArray(vao)

后来,在我的绘图管道中,我只是调用了glBindBuffer()、glVertexAttribPointer()、glEnableVertexAttribArray()等等......而不关心初始绑定(bind)的VAO

这是正确的做法吗?

最佳答案

就绑定(bind)方式而言,VAO 的作用与 VBO 和纹理类似。在程序的整个长度上使用单个 VAO 不会产生任何性能优势,因为您可能根本就没有 VAO 进行渲染。事实上,它可能会更慢,具体取决于实现在绘制顶点属性设置时如何拦截它们。

VAO 的要点是在初始化期间运行一次绘制对象所需的所有方法,并在主循环期间消除所有额外的方法调用开销。重点是拥有多个 VAO 并在绘图时在它们之间切换。

就最佳实践而言,您应该如何组织代码:

initialization:
for each batch
generate, store, and bind a VAO
bind all the buffers needed for a draw call
unbind the VAO

main loop/whenever you render:
for each batch
bind VAO
glDrawArrays(...); or glDrawElements(...); etc.
unbind VAO

这避免了绑定(bind)/取消绑定(bind)缓冲区和传递每个顶点属性的所有设置的困惑,并用绑定(bind) VAO 的单个方法调用替换它。

关于OpenGL VAO 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8923174/

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