VBO的第一次初始化。在哪里绑定重要吗?
Posted
技术标签:
【中文标题】VBO的第一次初始化。在哪里绑定重要吗?【英文标题】:First Inizialization of VBO. Does it matter where to bind? 【发布时间】:2018-02-15 21:50:58 【问题描述】:假设我只想创建和填充缓冲区。
GLuint ret;
glGenBuffers(1,&ret);
glBindBuffer(GL_ARRAY_BUFFER, ret);
glBufferData(GL_ARRAY_BUFFER,size,data,usage);
glBindBuffer(GL_ARRAY_BUFFER,0);
我在两次调用中使用哪个目标真的很重要吗? (当然它们必须相同)。
例如:我可以在绑定到GL_ARRAY_BUFFER
目标时填充写入缓冲区,然后在代码中将健全的缓冲区绑定到GL_UNIFORM_BUFFER
目标并使用它的数据填充glBindBufferRange
的统一块吗?
【问题讨论】:
您所展示的一切都不是“VAO”。 根据代码示例,我假设 OP 表示 VBO 是的,我的意思是 vbo,标题已编辑。 【参考方案1】:没关系;任何目标都应该有效。我已经创建了缓冲区,其目标与之前的预期用途相匹配,但没有任何区别。
我猜 OpenGL 实现(即驱动程序)可能会根据传递的目标以不同的方式分配内存,但我还没有看到这方面的证据。
此外,较新的glNamedBufferData
与glBufferData
执行相同的操作而不需要先前的glBindBuffer
调用,它没有target
参数。这强烈暗示目标是可以互换的。
【讨论】:
以上是关于VBO的第一次初始化。在哪里绑定重要吗?的主要内容,如果未能解决你的问题,请参考以下文章