【发布时间】:2014-05-11 00:10:09
【问题描述】:
我以前能够通过以下方式在 CUDA 中填充纹理以在 OpenGL 中使用:
- 创建和初始化 GL 纹理(
gl::GenTextures()等) - 创建 GL 像素缓冲区对象
- 向 CUDA 注册 PBO
在更新/渲染循环中:
-
cudaGraphicsMapResource()与 PBO - 启动内核以更新 PBO
-
cudaGraphicsUnmapResource()CUDA 的 PBO - 加载 GL 程序,绑定纹理,正常渲染
- 洗涤、漂洗重复。
但是,我想知道 PBO 是否仍然是从内核编写纹理的最佳方式。我看过像 this one (updated for v5 here) 这样的文章,它们似乎根本没有使用 PBO。
我看到了一些对 cudaTextureObject 和 cudaSurfaceObject 的引用,但我不清楚它们在 OpenGL 互操作中的作用。
PBO 仍然是推荐的方法吗?如果不是,我应该研究哪些替代方案?
(我专门针对 Kepler 和更新的架构。)
【问题讨论】: