如何将 OpenGL 纹理转换为 CUDA 纹理?

Posted

技术标签:

【中文标题】如何将 OpenGL 纹理转换为 CUDA 纹理?【英文标题】:How to translate OpenGL texture to CUDA texture? 【发布时间】:2012-06-02 11:03:53 【问题描述】:

这里我有一个 OpenGL 纹理:GLuint tex1;

现在我想使用 tex1 作为 CUDA 中的搜索表,所以也许我应该将其转换为 CUDA 纹理。

众所周知,CUDA 纹理作为一种纹理,来自于一个 CUDABindTextureToArray。

那么,如何从 OpenGL 纹理中获取 CUDA 纹理?

【问题讨论】:

请参阅 CUDA C 编程指南中的第 3.2.11 节“图形互操作性”。此外,你最近问了一些关于 CUDA 的问题,看起来你在哪里发布了它们,然后放弃了它们。包含问题的评论尚未得到回复,有效的答案未被接受等。如果您找到了自己对这些旧问题的解决方案,请发布您自己的答案并接受它们。这表明问题已解决,并为以后可能出现的其他人留下信息。 Stack Overflow 不是一条单行道...... 谢谢,我会听从你的建议 【参考方案1】:

您应该首先使用cudaGraphicsGLRegisterImage 函数注册您的纹理。

cudaGraphicsResource *resource;
cutilSafeCall(cudaGraphicsGLRegisterImage(&resource,text1,GL_TEXTURE_2D, cudaGraphicsMapFlagsNone));

然后你可以得到这个资源的数组引用。

cudaArray* array;

cudaGraphicsMapResources (1, &resource, 0);
cudaGraphicsSubResourceGetMappedArray (&array, resource, 0, 0);

之后,您可以使用 array 并将其绑定到 CUDA 纹理。

【讨论】:

以上是关于如何将 OpenGL 纹理转换为 CUDA 纹理?的主要内容,如果未能解决你的问题,请参考以下文章

CUDA/OpenGL InterOp:使用灰度图像作为纹理

在 CUDA 中修改 OpenGL FBO 纹理附件

Android 上的 OpenGL - 将位图转换为纹理,并保存纹理

CUDA 立方体贴图纹理

浅谈 OpenGL 中相关阻塞问题

在 CUDA 中使用 OpenGL 深度信息