CUDA + OpenGL Interop没有弃用的功能

时间:2014-03-31 15:07:38

标签: c++ opengl cuda interop

我以前能够在CUDA中填充纹理,以便在OpenGL中使用:

  1. 创建并初始化GL纹理(gl::GenTextures()等)
  2. 创建GL像素缓冲区对象
  3. 使用CUDA注册PBO
  4. 在更新/渲染循环中:

    1. cudaGraphicsMapResource()与PBO
    2. 启动内核以更新PBO
    3. cudaGraphicsUnmapResource()来自CUDA的PBO
    4. 加载GL程序,绑定纹理,正常渲染
    5. 洗涤,冲洗重复。
    6. 但是,我想知道PBO是否仍然是从内核编写纹理的最佳方式。我发现this oneupdated for v5 here)之类的文章似乎根本没有使用公益组织。

      我已经看到了对cudaTextureObjectcudaSurfaceObject的一些引用,但我们不清楚它们在OpenGL互操作中的作用。

      PBO仍然是推荐的方法吗?如果没有,我应该调查哪些替代方案?

      (我专门针对开普勒和更新的架构。)

2 个答案:

答案 0 :(得分:2)

您可以在CUDA 6 SDK的官方示例中看到,它被称为" simpleCUDA2GL" in" 3_Imaging"目录。 它有两种不同的方法来访问CUDA内核中的纹理。 其中一个(我认为旧的)使用PBO,它在我的机器上慢了3倍。

答案 1 :(得分:2)

您可能想看一下NVIDIA最近的CUDA GL Interop示例:

https://github.com/nvpro-samples/gl_cuda_interop_pingpong_st