5

我在GPU上做一个路径跟踪器,我在GPU全局内存上得到了一些像素数据(这是一个float3数组)的跟踪结果,我在屏幕上显示数组的方法是将数组复制到CPU内存和调用 OpenGL glTexImage2D

glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, pixelArray);

然后显示纹理。pixelArray是要显示的像素数据数组。由于 GPU 是管理整个渲染过程的设备,有没有办法pixelArray在不将数据从 GPU 复制到 CPU 的情况下在屏幕上显示?

4

2 回答 2

2

使用 CUDA OpenGL 图形互操作将 OpenGL 纹理映射为 CUDA 全局内存。将数据直接写入纹理或使用 cudaMemcpy2D。

于 2013-03-27T10:53:52.130 回答
1

这是我曾经做过的一个函数,用于渲染数据驻留在 GPU 全局内存中的图像。您将需要freeglut和 以及glewCUDA 来运行它。目前它仅适用于 Windows。

我仍然使用这个函数来渲染 GPU 图像。只需打电话ShowRawImage,你就完成了。

它的唯一开销是从全局内存到 OpenGL 设备缓冲区的内存副本。但它更好,因为它是一个设备到设备的复制。

于 2013-03-27T06:56:51.790 回答