我必须画一个能容纳几千个顶点的缓冲区。我正在使用vbo存储数据。
我知道我将不得不更新很多次的VBO -但一次只在小部分。
因此,我想知道这样做的最佳方法是:
glBufferSubData()调用?glMapBuffer()和一个大的VBO?H 210G 211更新各个VBO。发布于 2011-01-31 21:41:29
还有另一个选项,有点像选项3-使用一个大的VBO (可能使用GL_STREAM_DRAW模式)来重置每个帧(通过使用NULL缓冲区指针调用glBufferData,每次调用相同的大小),然后立即使用glMapBuffer-ed。缓冲区在填充时被左映射,然后在绘图前取消映射。重复一遍。
对glBufferData的调用告诉OpenGL,不需要旧的缓冲区内容,因此glMapBuffer不必等待以确保GPU完成。
这种方法似乎得到了vertex_buffer_object扩展的官方认可。参见“使用映射缓冲区对象的顶点数组”示例:
http://www.opengl.org/registry/specs/ARB/vertex_buffer_object.txt
这表明OpenGL (还是驱动程序?)将监视这类行为,并(当发现)安排事情,使它能够有效地执行。
发布于 2011-01-31 18:36:38
如果认为glBufferData或glMapBuffer是更好的解决方案,如果您的缓冲区是小的。100000 * sizeof(float) * 3 ~= 1MB。这不应该有问题。
https://stackoverflow.com/questions/4854565
复制相似问题