NV_vertex_array_range vs. ATI _vertex_array_object

I’m trying to get some rendering code that uses NV_vertex_array_range to work on a 9700. I see that ATI_vertex_array_object is very simple to use, but I’m not sure how to exploit the parallelism without fence-type functions.

I get tremendous speed increases by computing my geometry in chunks - a chunk is computed, copied to the video memory, then glDrawElements(). As that buffer is being rendered by the GPU, the CPU starts computing and copying the next buffer.

How can I implement this with ATI’s extensions?


As long as you are not mapping the memory to write directly to it, the driver will avoid the synchronizations when possible. So, to get maximum parallelism wothout locking, you keep calling update on the same buffer, and don’t worry aob ut flush, finish, or fence.

If you are mapping them in, you are probably best off alternating between two or more buffers. The map operation is like asking for a fence for the entire buffer to expire before giving you the pointer.