Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 如何将GPU全局内存中的像素阵列直接显示在屏幕上?_Opengl_Cuda_Gpu - Fatal编程技术网

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

Opengl 如何将GPU全局内存中的像素阵列直接显示在屏幕上?,opengl,cuda,gpu,Opengl,Cuda,Gpu,我在GPU上做了一个路径跟踪器,我在GPU全局内存上得到了一些像素数据的跟踪结果(这是一个float3数组),我在屏幕上显示数组的方法是将数组复制到CPU内存,并调用OpenGLglTexImage2D: glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, pixelArray); 然后显示纹理pixelArray是要显示的像素数据数组。由于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是管理整个渲染过程的设备,是否有一种方法可以在屏幕上显示
像素阵列
,而无需将数据从GPU复制到CPU

我做了一次,渲染数据驻留在GPU全局内存中的图像。 您将需要并与CUDA一起运行它。目前它只在Windows上工作

我仍然使用这个函数来渲染GPU图像。只要调用
ShowRawImage
,您就完成了


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

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

您所说的“彩色像素阵列”到底是什么意思?你说的是一个存储像素数据的OpenGL缓冲区对象,一块存储像素数据的CUDA内存,还是什么?那只是一个浮点3(RGBcolor)类型的数组,存储在GPU全局内存中@NicolasBolasRight,但您将其标记为OpenGL和CUDA。它们中的每一个都有各自独立的方式在GPU全局内存中存储数据数组。使用哪种方式会影响将其粘贴到纹理中的选项。那是哪一个呢?我们可以忘记OpenGL。像素数据确实存在于cuda全局内存中,如[(R,G,B),(R,G,B),…,(R,G,B)],将这样的阵列直接放在屏幕上而不涉及CPU将减少开销@NicolBolas@Tony:不,我们不能忘记OpenGL。CUDA有图形和OpenGL互操作。您可以将OpenGL纹理映射为CUDA全局内存阵列。要么直接将数据写入贴图纹理,要么在纹理贴图中执行cudaMemcpy2D。