我遇到了不确定如何正确处理的问题。我最近开始为我的游戏创建一个粒子系统,并且一直在使用一个名为“粒子”的结构作为我的粒子数据。 “粒子”包含用于渲染的顶点信息。
我遇到问题的原因是我将我的粒子结构池化到堆内存中以节省大量分配,但是我不确定如何在glBufferData中使用指针数组,我的印象是glBufferData需要实际的结构实例,而不是指向结构实例的指针。
我知道我可以重建每个渲染的浮点数数组,只是为了绘制粒子,但是是否存在像glBufferData这样的OpenGL调用,而我在某个地方丢失了它,可以在处理提供的数据时取消引用我的指针?理想情况下,我想避免仅复制数据就必须遍历数组。
最佳答案
正确的。有效地,glBufferData
在通过data参数指向它的地址处创建预置给它的数据的平面拷贝。
您正在考虑客户端顶点数组,这些是OpenGL最古老的功能之一。自19年前发布OpenGL-1.1以来,它们就存在了。
您只是不使用缓冲区对象,即不要调用glGenBuffers,glBindBuffer,glBufferData并将客户端数据地址直接传递给glVertexPointer或glVertexAttribPointer。
但是我强烈建议您实际使用缓冲区对象。无论如何,必须将数据复制到GPU,以便可以呈现它。通过缓冲区对象执行此操作可使OpenGL驱动程序更有效地工作。同样从OpenGL-4开始,使用缓冲区对象不再是可选的。