我正在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?
答案 0 :(得分:2)
使用CUDA OpenGL图形互操作将OpenGL纹理映射为CUDA全局内存。将数据直接写入纹理或使用cudaMemcpy2D。
答案 1 :(得分:1)
Here is a function我做了一次,渲染数据驻留在GPU全局内存中的图像。
您需要freeglut
和glew
以及CUDA来运行它。目前它仅适用于Windows。
我仍然使用此功能渲染GPU图像。只需致电ShowRawImage
即可。
它唯一的开销是从全局内存到OpenGL设备缓冲区的内存复制。但它更好,因为它是设备到设备的复制。