C++ CUDA和x2B;没有弃用功能的OpenGL互操作

C++ CUDA和x2B;没有弃用功能的OpenGL互操作,c++,opengl,cuda,interop,C++,Opengl,Cuda,Interop,我以前能够通过以下方式在CUDA中填充纹理以用于OpenGL: 创建并初始化GL纹理(GL::GenTextures()等) 创建GL像素缓冲区对象 向CUDA注册PBO 在更新/渲染循环中: cudaGraphicsMapResource()与PBO 启动内核以更新PBO cudaGraphicsUnmapResource()来自CUDA的PBO 加载GL程序,绑定纹理,渲染为法线 清洗,冲洗,重复 但是,我想知道PBO是否仍然是从内核编写纹理的最佳方式。我看过类似()的文章,它们似乎根本没有

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

  • 创建并初始化GL纹理(
    GL::GenTextures()
    等)
  • 创建GL像素缓冲区对象
  • 向CUDA注册PBO
  • 在更新/渲染循环中:

  • cudaGraphicsMapResource()
    与PBO
  • 启动内核以更新PBO
  • cudaGraphicsUnmapResource()
    来自CUDA的PBO
  • 加载GL程序,绑定纹理,渲染为法线
  • 清洗,冲洗,重复
  • 但是,我想知道PBO是否仍然是从内核编写纹理的最佳方式。我看过类似()的文章,它们似乎根本没有使用PBOs

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

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


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

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

    您可能想看看NVIDIA最近的CUDA GL互操作示例:


    似乎此代码示例使用的是曲面参照,而不是曲面对象,就像原始海报所要求的那样。