为什么第二次调用glBindBuffer?

Nar*_*ser 3 opengl

我正在阅读教程中的内容,最后我将了解如何使用Vertex Buffers,我看到我生成的顶点缓冲区并且一次调用了glBindBuffer,我必须第二次绑定:

glBindBuffer(GL_ARRAY_BUFFER, vbo_triangle);
Run Code Online (Sandbox Code Playgroud)

我仍然是openGL的新手(比如3天)所以我试图围绕着很多这些东西是如何工作的.我花了大部分时间在khronos或opengl.org上阅读有关命令的内容,但我无法弄清楚为什么这个命令会被调用两次.任何提示?谢谢.

Nic*_*las 7

这个特定的例子是否严格需要第二个绑定?不.OpenGL保留状态,因此如果缓冲区对象绑定到目标,那么它将保持绑定,直到您将其他内容绑定到该目标.

但是,如果在创建创建第二个缓冲区的缓冲区之后插入代码会发生什么?毕竟,您可能想要两个对象.或者10.或者你想要多少; 他们不必共享缓冲区对象.

一旦这样做,您的代码就会中断,因为代码期望绑定的缓冲区实际上并未绑定.因此,除非你擅长管理状态并且真正知道你正在做什么(如果你仍然关注教程,答案是"不"),你应该设置你需要做的任何你想要的状态.

因此,如果您打算从特定缓冲区绘制,则应绑定它并设置适当的状态(gl*Pointer调用).


Mar*_*ett 5

你必须绑定和解除绑定缓冲区以从'C'复制到它并从openGL中使用它绘制.将其视为程序和图形之间的锁定/解锁.

所以序列是
创建
绑定
东西数据
unbind

绑定
显示
unbind