CUDA 结果可以存储在 OpenGL 可访问的纹理中吗?
CUDA可以用来生成OpenGL纹理吗?我知道可以通过将 CUDA 结果读回系统内存,然后将其加载到纹理中来完成...但我想找到一种方法来保存此副本...可以使用 CUDA 来生成纹理吗?
Can CUDA be used to generate OpenGL textures? I know it can be done by reading the CUDA results back into system memory, and then loading that into a texture... But I'd like to find a way to save this copy... Can CUDA be used to generate textures?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
有点像。您无法直接从内核写入纹理,但可以将结果从内核复制到纹理的映射 cudaArray,而无需将其复制回系统内存。查看
cudaGraphicsGLRegisterImage()
、cudaGraphicsMapResources()
和cudaGraphicsSubResourceGetMappedArray()
。Sort of. You can't write directly to textures from a kernel, but you can do a copy of the results from your kernel to the texture's mapped cudaArray without having to copy it back to system memory. Look into
cudaGraphicsGLRegisterImage()
,cudaGraphicsMapResources()
andcudaGraphicsSubResourceGetMappedArray()
.是的,CUDA 具有允许 OpenGL 互操作性的 API 函数。
使用
cudaGLRegisterBufferObject(GLuint bufObj)
注册到 CUDA,然后使用cudaGLMapBufferObject( void ** devPtr, GLuint bufObj)
获取用于操作 CUDA 内核中缓冲区的设备内存指针。完成后,取消映射 cudaGLUnmapBufferObject(GLuint bufObj) 并显示。
完整的解释位于 CUDA 编程指南中,您可以在 CUDA 工具包中下载该指南。
Yes, CUDA has API functions to allow for OpenGL Interoperability
Use
cudaGLRegisterBufferObject(GLuint bufObj)
to register to CUDA and then usecudaGLMapBufferObject( void ** devPtr, GLuint bufObj)
to get the device memory pointer to manipulate the buffer in your CUDA kernal.Once done, you unmap
cudaGLUnmapBufferObject(GLuint bufObj)
and then display.Full explanation is in the CUDA Programming Guide that you download in the CUDA Toolkit.