Now I’m displaying the buffer generated by OptiX with an OpenGL Pixel Unpack buffer, which means that I need to use a texture to render the buffer indirectly. But it’s still needed to copy buffer in GPU memory. Is there any way to render without memory copy? For example, render directly to an OpenGL render buffer?
Is this question a OpenGL issue or OptiX issue? @_@…
Because the question seems like how to exchange data with OpenGL Buffer Object and OpenGL Framebuffer…
I want to know the answer too… XD…
OptiX doesn’t support direct interop with OpenGL texture images or render buffers, aka. surfaces in general.
Such surfaces do not have a linear memory layout on the hardware and would require image load/store operations to access the data, as they do in OpenGL itself.
OptiX doesn’t provide an API to create buffers from surfaces, and output and input_output buffers and the
operator to access single elements in them is implemented for a linear memory layout only, which is the case for the PixelBufferObject.
Note that OpenGL interop gets complex or isn’t even possible on multi-GPU configurations.
OptiX 5 and earlier versions only allow it on single GPU.
OptiX 6 can also handle it on multi-GPU. Single GPU or dual GPU NVLINK configurations will perform best there.
For all other configurations I would not recommend using OpenGL interop today.