我正在使用CUDA生成此ABGR输出图像 . 有问题的图像存储在uchar4数组中 . 数组的每个元素表示图像中每个像素的颜色 . 显然,这个输出数组是一个2D图像,但它在CUDA中被分配为交错字节的线性存储器 .
我知道CUDA可以轻松地将此数组映射到OpenGL顶点缓冲区对象 . 我的问题是,假设我拥有图像中每个像素的RGB值,以及图像的宽度和高度,我如何使用OpenGL将此图像绘制到屏幕?
我知道必须使用某种着色器,但由于我的知识很少,我不知道着色器如何使用每个像素的颜色,而是将其映射到正确的屏幕像素 .
我知道我应该增加我对OpenGL的了解,但这似乎是一项微不足道的任务 . 如果有一个简单的方法来绘制这个图像,我宁愿不花太多时间学习OpenGL .
1 回答
我终于想出了一个简单的方法来做我想做的事情 . 不幸的是,我不知道罗伯特在NVIDIA网站上谈论的样本的存在 .
简而言之,绘制图像最简单的方法是在OpenGL中定义一个Pixel Buffer Object,用CUDA注册缓冲区并将其作为
uchar4
的输出数组传递给CUDA内核 . 这是一个基于JOGL和JCUDA的快速伪代码,显示了所涉及的步骤 . 大多数代码都是从NVIDIA网站上的样本中获得的:1) Creaing the OpenGL buffers
2) Initialize the texture and set texture parameters
3) Run the CUDA kernel and display the results in OpenGL's display loop.
3.5) The CUDA call:
PS:我感谢Robert提供样本的链接 . 我也感谢那些在没有任何有用反馈的情况下弃我问题的人!