如何直接在GPU全局内存中将像素阵列显示在屏幕上?

时间:2013-03-27 06:22:50

标签: opengl cuda gpu

我正在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?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

Here is a function我做了一次,渲染数据驻留在GPU全局内存中的图像。 您需要freeglutglew以及CUDA来运行它。目前它仅适用于Windows。

我仍然使用此功能渲染GPU图像。只需致电ShowRawImage即可。

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