如何在CUDA中检索OpenGL纹理Map的原始数据?

oug3syen  于 2023-08-04  发布在  其他
关注(0)|答案(1)|浏览(76)

我试图在OpenGL中渲染一个场景,并将颜色和深度纹理数据Map到连续的CUDA device_ptr,类似于glReadPixels,但在GPU内存上。有可能吗?
颜色和深度纹理的数据类型分别为GL_UNSIGNED_BYTEGL_UNSIGNED_INT
我对CUDA没有太多的经验,所以我只找到了一些将OpenGL 2D纹理Map到另一个CUDA纹理的例子,我想只需要对Map的原始数据的引用。
我尝试用cudaGraphicsGLRegisterImagecudaGraphicsSubResourceGetMappedArrayMaptexture2D,但由于它返回一个cudaArray,我不知道我是否可以转换这个指针并使用它作为device_ptr。此外,当我尝试注册深度纹理时,它崩溃,我认为它可能不被支持,但我想尝试一些变通方法,如果有任何。

w6mmgewl

w6mmgewl1#

所以,我想告诉你我最后做了什么。我最终只处理颜色数据,最初丢弃深度信息。
我使用方法cudaMemcpyFromArrayAsynccudaArray复制到一个新的设备向量。这是CUDA 11.6上的一个过时的方法,但它可以工作并且速度相对较快,因为它是设备到设备的复制(cudaMemcpyDeviceToDevice)。

相关问题