【问题标题】:CUDA + OpenGL Interop without deprecated functionality没有弃用功能的 CUDA + OpenGL 互操作
【发布时间】:2014-05-11 00:10:09
【问题描述】:

我以前能够通过以下方式在 CUDA 中填充纹理以在 OpenGL 中使用:

  1. 创建和初始化 GL 纹理(gl::GenTextures() 等)
  2. 创建 GL 像素缓冲区对象
  3. 向 CUDA 注册 PBO

在更新/渲染循环中:

  1. cudaGraphicsMapResource() 与 PBO
  2. 启动内核以更新 PBO
  3. cudaGraphicsUnmapResource() CUDA 的 PBO
  4. 加载 GL 程序,绑定纹理,正常渲染
  5. 洗涤、漂洗重复。

但是,我想知道 PBO 是否仍然是从内核编写纹理的最佳方式。我看过像 this one (updated for v5 here) 这样的文章,它们似乎根本没有使用 PBO。

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

PBO 仍然是推荐的方法吗?如果不是,我应该研究哪些替代方案?

(我专门针对 Kepler 和更新的架构。)

【问题讨论】:

    标签: c++ opengl cuda interop


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您可能想查看 NVIDIA 提供的这个最近的 CUDA GL 互操作示例:

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

      【讨论】:

      • 看来此代码示例使用表面引用,而不是表面对象,就像请求的原始海报一样。
      猜你喜欢
      • 2011-09-22
      • 2011-12-03
      • 1970-01-01
      • 2013-10-15
      • 1970-01-01
      • 2013-04-30
      • 2016-11-06
      • 2013-04-04
      相关资源
      最近更新 更多