you can read/write PBO in cuda as any arrays.
You can also access texture in read-only in cuda, but on my experience it only works for a reduced number of formats and it is hard to do something with.
Check the cuda examples based on opengl interoperability.
(I never try, but there is also a directx interoperability maybe more developed)
1.) The safest way might be to store your cuda data in linear device memory.
2.) In OpenGL, allocate a texture big enough to hold this data.
3.) Use the Cuda-OpenGL interop to get the OpenGL texture mapped as cuda array ( cudaGraphicsMapResources, cudaGraphicsSubResourceGetMappedArray)
4.) Use cudaMemcpyToArray to copy the linear data to the mapped OpenGL array.
5.) Unmap the texture (cudaGraphicsUnmapResources)
6.) Render using texture access in the vertex shader.
It is theoretical possible to write directly to the mapped array, however this caused a lot of headache for me a few months ago(worked with older drivers(v197.xx), was broken with newer ones). Maybe it works now.
Or, as an alternative, there is the sample “SimpleGL” in the SDK which updates Vertex Buffer Objects by cuda before rendering.