如何将 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:使用灰度图像作为纹理