我试图在OpenGL中渲染一个场景,并将颜色和深度纹理数据Map到连续的CUDA device_ptr
,类似于glReadPixels
,但在GPU内存上。有可能吗?
颜色和深度纹理的数据类型分别为GL_UNSIGNED_BYTE
和GL_UNSIGNED_INT
。
我对CUDA没有太多的经验,所以我只找到了一些将OpenGL 2D纹理Map到另一个CUDA纹理的例子,我想只需要对Map的原始数据的引用。
我尝试用cudaGraphicsGLRegisterImage
和cudaGraphicsSubResourceGetMappedArray
Maptexture2D
,但由于它返回一个cudaArray
,我不知道我是否可以转换这个指针并使用它作为device_ptr
。此外,当我尝试注册深度纹理时,它崩溃,我认为它可能不被支持,但我想尝试一些变通方法,如果有任何。
1条答案
按热度按时间w6mmgewl1#
所以,我想告诉你我最后做了什么。我最终只处理颜色数据,最初丢弃深度信息。
我使用方法cudaMemcpyFromArrayAsync将cudaArray复制到一个新的设备向量。这是CUDA 11.6上的一个过时的方法,但它可以工作并且速度相对较快,因为它是设备到设备的复制(cudaMemcpyDeviceToDevice)。