glBuffer与堆内存

时间:2013-01-16 02:37:39

标签: c++ opengl

我遇到了一个问题,我不确定如何妥善处理。我最近开始为我的游戏创建一个粒子系统,并且已经为我的粒子数据使用了一个名为“粒子”的结构。 'Particle'包含用于渲染的顶点信息。

我遇到问题的原因是我在堆内存中汇集我的粒子结构以节省大量的分配,但是我不确定如何在glBufferData中使用指针数组,我感觉不足glBufferData需要实际的结构实例,而不是指向结构实例的指针。

我知道我可以重建一个浮点数组,每个浮点数只是为了绘制我的粒子,但是有一个像glBufferData这样的OpenGL调用,我错过了某个地方能够在我通过数据时解除引用我的指针供应?理想情况下,我希望不必迭代数组只是为了复制数据。

1 个答案:

答案 0 :(得分:3)

  

我的印象是glBufferData需要实际的结构实例,而不是指向结构实例的指针。

正确。实际上,glBufferData会在通过 data 参数指向的地址处创建预先存储的数据的平面副本。

  

我遗漏的某个地方能够取消引用我的指针,因为它正在通过我提供的数据?

您正在考虑客户端顶点数组,这些是OpenGL最古老的功能之一。自从19年前发布的OpenGL-1.1以来,它们就已存在。

你只是使用缓冲区对象,即不要调用glGenBuffers,glBindBuffer,glBufferData并将客户端数据地址直接传递给glVertexPointer或glVertexAttribPointer。

但是我强烈建议实际使用缓冲区对象。无论如何必须将数据复制到GPU,以便可以渲染它。通过缓冲区对象执行此操作可使OpenGL驱动程序更有效地工作。此外,自Ope​​nGL-4以来,缓冲对象的使用不再是可选的。