不使用废弃功能的CUDA + OpenGL互操作

4
我以前通过以下步骤,能够在CUDA中填充纹理以供OpenGL使用:
  1. 创建和初始化GL纹理 (gl::GenTextures()等)
  2. 创建GL像素缓冲区对象(Pixel Buffer Object, PBO)
  3. 将PBO与CUDA注册
在更新/渲染循环中:
  1. 使用PBO调用cudaGraphicsMapResource()
  2. 启动核函数以更新PBO
  3. 使用cudaGraphicsUnmapResource()将PBO从CUDA中解除映射
  4. 加载GL程序、绑定纹理并按照正常流程进行渲染
  5. 重复以上步骤。
但我想知道是否仍然有更好的方法来从核函数中写入纹理。例如,像这篇文章针对v5做了更新)似乎根本不使用PBO。
我看到一些关于cudaTextureObjectcudaSurfaceObject的引用,但它们在OpenGL互操作中的作用不清楚。
PBO仍然是推荐的方法吗?如果不是,我该研究哪些替代方案?
(我具体针对Kepler及以上架构。)
2个回答

2

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


2

看起来这个代码示例使用的是表面引用,而不是原始帖子中请求的表面对象。 - Benjamin Bray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接