CUDA and OpenGL rendering

Hello everyone,
I am having trouble in understanding how CUDA and OpenGL interoperate when rendering images.

From what I understood there are two main ways for drawing from CUDA, one involving the PBO and one involving the VBO ( source: https://www.nvidia.com/content/GTC/documents/1055_GTC09.pdf ).

I have the following questions:
-If I fill a properly mapped VBO through a cuda kernel, should I also write a shader program?
-Is it right that the vertex buffer undergoes all the rendering pipeline anyways, while the pixel buffer doesn’t?
-Which guidelines can I follow to decide the use of PBO instead of VBO?

Thanks!

It’s not always necessary to use a shader program to do interop with a VBO. You can look at the CUDA interop sample codes to see examples of VBO usage.

Neither a VBO nor a PBO get processed at all, unless you direct the processing through your code.

A VBO is useful when you want to modify geometry, e.g. the shapes/positions of the objects being displayed. A PBO is useful if you want to modify the appearance of objects being displayed. A PBO is also useful if you simply want to display 2D non-geometric data or information.