First off, I have been reading up on pixel buffer objects in various sources but have failed to find the concrete details I am looking for. If I was just looking the wrong places then please feel free to redirect me.
In my understanding, calling something like
glBufferData(GL_PIXEL_PACK_BUFFER_ARB, bufferSize, NULL, GL_STATIC_READ_ARB);
will allocate bufferSize bytes somewhere in system memory and associate the currently bound buffer with this data. This will cost as any normal memory allocation.
Then calling something like
will give a pointer to this system memory buffer
When I call something like glReadPixels, data will be transfered into the bound pixel buffers area in system memory and this transfer will be using DMA.
The read into system memory will be required to complete before a following call to glUnmapBuffer returns, but can otherwise be delayed by the driver.
Is that a correct understanding? Originally I beleived that glMapBuffer was actually mapping a portion of device memory into io-address space so a read would be direct from the device, but other sources indicate that this is not the case.
If mapping is to an actual buffer area in system memory, then is it possible to let a pixel buffer object dma its data to another physical card without going around system memory? I have a video card (not graphics card, but one that generates sdi-video) which in its sdk documentations claims that
would copy pixels directly between the cards. How would that be possible with the system memory buffer?