2013-03-27 32 views
4

我正在做GPU上的路徑跟蹤器,並且我在GPU全局內存中獲得了像素數據(這是一組float數組)的跟蹤結果,我在屏幕上顯示數組的操作是將數組複製到CPU內存和調用OpenGL glTexImage2D如何將GPU全局內存中的像素數組直接顯示在屏幕上?

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

然後顯示紋理。 pixelArray是要顯示的像素數據數組。由於GPU是管理整個渲染過程的設備,有沒有辦法在屏幕上顯示pixelArray而不將數據從GPU複製到CPU?

+2

你究竟是什麼意思的「彩色像素陣列」?你在談論一個存儲像素數據的OpenGL緩衝區對象,一塊存儲像素數據的CUDA內存,或者是什麼? – 2013-03-27 06:28:11

+0

這將只是一個float3(RGBcolor)類型的數組,它存儲在GPU全局內存中。 @NicolBolas – Tony 2013-03-27 06:39:11

+4

沒錯,但是你把它標記爲OpenGL和CUDA。他們每個人都有自己的*獨立*的方式在GPU全局內存中存儲數據數組。您使用哪種方式會影響您將其粘貼到紋理中的選項。那它是哪一個? – 2013-03-27 06:44:13

回答

2

使用CUDA OpenGL圖形互操作將OpenGL紋理映射爲CUDA全局內存。將數據直接寫入紋理或使用cudaMemcpy2D。

1

Here is a function我做了一次,渲染其數據駐留在GPU的全局內存中的圖像。 您將需要freeglutglew以及CUDA來運行它。目前它僅適用於Windows。

我仍然使用這個函數來渲染GPU圖像。只需撥打ShowRawImage即可完成。

它唯一的開銷是從全局內存到OpenGL設備緩衝區的內存拷貝。但它更好,因爲它是一個設備複製設備。

相關問題