【发布时间】:2013-03-17 04:30:11
【问题描述】:
我在 GPU 上做一个路径跟踪器,我在 GPU 全局内存上得到了一些像素数据(这是一个 float3 数组)的跟踪结果,我在屏幕上显示数组的方法是将数组复制到CPU内存和调用OpenGLglTexImage2D:
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, pixelArray);
然后显示纹理。 pixelArray 是要显示的像素数据数组。由于 GPU 是管理整个渲染过程的设备,有没有办法在屏幕上显示pixelArray 而无需将数据从 GPU 复制到 CPU?
【问题讨论】:
-
“彩色像素阵列”到底是什么意思?你说的是一个存储像素数据的 OpenGL 缓冲区对象,一块存储像素数据的 CUDA 内存,还是什么?
-
这只是一个 float3 (RGBcolor) 类型的数组,它存储在 GPU 全局内存中。 @NicolBolas
-
对,但您将其标记为 OpenGL 和 CUDA。它们中的每一个都有自己的、独立的方式来在 GPU 全局内存中存储数据数组。您使用的方式将影响您将其粘贴到纹理中的选项。那么它是什么?
-
我们可以忘记 OpenGL。像素数据确实存在于像 [(R,G,B),(R,G,B),...,(R,G,B)] 这样的 cuda 全局内存中,可以将这样的数组直接放到屏幕上,而无需涉及 CPU会减少开销。 @NicolBolas
-
@Tony:不,我们不能忘记 OpenGL。 CUDA 具有图形和 OpenGL 互操作性。您可以将 OpenGL 纹理映射为 CUDA 全局内存数组。要么将数据直接写入映射纹理,要么将 cudaMemcpy2D 写入纹理映射。