Hey adam,
The extension you want to use is
opengl.org/registry/specs/AR … object.txt
The idea here is you have 2 PBOs allocated. You download to one and you wait a frame before ‘mapping’ it. So each frame you are initiating a download and mapping the previous frames PBO. Once you have mapped it you have a CPU pointer to the data which you can then copy in your shared memory. If you map it too soon then you will cause a stall as it’ll wait for the download to complete before giving control back to your thread.
What is a PBO? It’s memory you allocate in the graphics driver (instead of using malloc). When a PBO is bound GL operations that would regularly copy from/into a CPU memory buffer instead copy into the bound PBO (and you pass NULL to the operation). For example you bind a PBO and then call glGetTexImage() with a NULL for the data pointer instead of the CPU pointer you would have used in the past.
It’s a broad overview but there are more in depth tutorials on the web (and in Nvidia’s SDK).
Let me know if you have further questions.