我是圖形編程新手,需要爲我們創建的演示添加渲染後端。我希望你們能指引我正確的方向。畫一堆由CUDA/OpenCL生成的元素?
簡短版本:有沒有什麼辦法可以爲OpenGL發送不同元素的數據數組,而不必爲每個元素明確地發出繪圖命令?
長版本:我們有一個CUDA程序(最終是OpenCL),它會爲我們計算一堆物體的一堆數據。然後我們需要使用例如OpenGL來渲染這些對象。
CUDA內核可以生成我們的頂點,並且使用OpenGL互操作,它可以在OpenGL VBO中推送這些頂點,而不必將數據傳回主機設備內存。但問題是,我們有一堆(超過一百萬是我們的目標)不同的對象。看起來我們最好的選擇是分配一個VBO並將每個對象的頂點放入其中。然後我們可以用該VBO內的每個元素的偏移量和長度來調用glDrawArrays。
然而,每個對象可具有可變數目的頂點的(雖然在場景中的總的頂點可以被界定。)我想避免必須從CUDA傳送開始的索引和長度的列表 - > CPU的每一幀,特別是考慮到這些繪圖命令直接回到GPU。
有沒有辦法用數據打包一個緩衝區,以便我們只能向OpenGL發出一個調用來渲染緩衝區,並且它可以渲染緩衝區中的許多不同的元素?
(但願我也給予了足夠的信息,以避免這裏XY問題。)
定義「元素」。你說你正在使用'glDrawArrays'命令來渲染它。你渲染GL_TRIANGLE_STRIP,GL_TRIANGLES或其他東西嗎?你渲染了什麼原始的東西?此外,如果您在一次繪製調用中渲染它們,則不會在對象之間進行任何狀態更改。 –
GL_TRIANGLE_STRIP此刻(試圖繪製2D [甜甜圈]的片段,如[本圖]中所示)(http://arstechnica.com/business/2011/04/web-browser-market-share-modern-browser-edition /))。但是我們想把它推廣到在未來中繪製任意元素。 – int3h