使用异步缓冲区上传流式顶点

时间:2015-07-15 00:51:10

标签: opengl

我已经对流顶点做了一些研究,我发现有四种异步上传方式(我认为)。

孤儿的方法:

  • 在每次写入之前,为缓冲区创建新的存储空间 glBufferData,然后使用glmapbuffer高效写入它 / glunmapbuffer

  • 在使用glmapbuffer编写代码之前,请使用
    GL_MAP_INVALIDATE_BUFFER_BIT标志表示执行 可以创建新的存储。在实践中,这与
    做同样的事情 孤儿与glbufferdata

其他方法:

  • 使用GL_MAP_UNSYNCHRONIZED_BIT和glmapbuffer强制异步 写入GPU可能正在读取的相同缓冲区。你承诺 不要写在读取正在发生的同一位置或 你得到未定义的行为。我猜你使用它的方式是 不断地交替写入缓冲区的一侧,然后 让gpu读取未被写入的一面。

  • 使用双缓冲:创建2个VBO。替代哪一个写的 从哪一个读取。使用glmapbuffer从中读取/写入 他们有效率。将正确的VBO绑定到VAO以进行每次绘图。应该是异步的。

如果我说错了,请告诉我。

我想知道,哪个是最合适的。我关心表现。孤立的方法似乎很昂贵,因为所有的分配/解除分配。双缓冲似乎是最好的,因为它不会有分配成本(对吗?)并且它没有第三种方法那么复杂。

0 个答案:

没有答案