我已经对流顶点做了一些研究,我发现有四种异步上传方式(我认为)。
孤儿的方法:
在每次写入之前,为缓冲区创建新的存储空间 glBufferData,然后使用glmapbuffer高效写入它 / glunmapbuffer
在使用glmapbuffer编写代码之前,请使用
GL_MAP_INVALIDATE_BUFFER_BIT标志表示执行
可以创建新的存储。在实践中,这与
做同样的事情
孤儿与glbufferdata
其他方法:
使用GL_MAP_UNSYNCHRONIZED_BIT和glmapbuffer强制异步 写入GPU可能正在读取的相同缓冲区。你承诺 不要写在读取正在发生的同一位置或 你得到未定义的行为。我猜你使用它的方式是 不断地交替写入缓冲区的一侧,然后 让gpu读取未被写入的一面。
使用双缓冲:创建2个VBO。替代哪一个写的 从哪一个读取。使用glmapbuffer从中读取/写入 他们有效率。将正确的VBO绑定到VAO以进行每次绘图。应该是异步的。
如果我说错了,请告诉我。
我想知道,哪个是最合适的。我关心表现。孤立的方法似乎很昂贵,因为所有的分配/解除分配。双缓冲似乎是最好的,因为它不会有分配成本(对吗?)并且它没有第三种方法那么复杂。