我对 CUDA 很陌生,但我已经设法使用 OpenGL 在屏幕上显示内核生成的内容。我尝试了几种方法:
- 使用 PBO 和 OpenGL 纹理(旧式);
- 使用 OpenGL 纹理作为 CUDA 表面并在四边形上进行渲染(新样式);
- 使用渲染缓冲区作为 CUDA 表面并使用 glBlitFramebuffer 进行渲染。
所有这些都有效,但是,在实现 #2 时,我错误地将提示设置为 cudaGraphicsRegisterFlagsWriteDiscard。由于所有数据都将由 CUDA 生成,我认为这是正确的选择。但是,后来我意识到我需要一个 CUDA 表面来写入 OpenGL 纹理,并且当您使用表面时,您需要使用 LoadStore 标志。
所以基本上我的问题是:由于我绝对需要一个 CUDA 表面来写入 CUDA 中的 OpenGL 纹理,那么 cudaGraphicsRegisterFlagsWriteDiscard 在 cudaGraphicsGLRegisterImage 中的用例是什么?