c++ - 没有弃用功能的 CUDA + OpenGL Interop

标签 c++ opengl cuda interop

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

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

在更新/渲染循环中:

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

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

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

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

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

最佳答案

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

关于c++ - 没有弃用功能的 CUDA + OpenGL Interop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22765216/

相关文章:

c++ - 当派生类的析构函数是虚拟的而基类的 dtor 不是时代码崩溃

c++ - 将 cuBLAS 与来自 Thrust 的复数结合使用

c++ - 翻译以前绘制的元素 (OpenGL)

c++ - OpenGL:天空盒放大太多

cuda - 使用 CUDA Profiler nvprof 进行内存访问

multithreading - cudaDeviceSynchronize() 仅在当前 CUDA 上下文或所有上下文中等待完成?

类中的 C++ 指针返回奇怪的值

c++ - 分配期间未调用构造函数

c++ - 颜色类型 3 的 PNG 图像纹理格式

c++ - 将指针指向的图像数据分成多段