2017-10-09 65 views
1

因此,我已經通過關於保留與立即模式渲染的問題列表,但似乎沒有人指定圖形API(OpenGL/DirectX)存儲的場景數據是存儲在RAM中還是存儲在GPU內存中。常識告訴我,API會將場景數據存儲到GPU上,但我沒有在線看過直接指定的數據。這是因爲它取決於API中的設置?保存在GPU上的模式數據是?

只是要清楚,我的問題如下:在保留模式圖形中,場景數據是否總是存儲在GPU的內存中,還是取決於圖形API中的某些設置?

+1

它絕對取決於API。據我所知,甚至沒有保證任何保留模式API都使用GPU進行繪圖。 – BDL

+0

因此,在現代OpenGL中**默認**,如果存在GPU,OpenGL是否總是在GPU上存儲所有場景數據? (當然在保留模式下,因爲立​​即模式不存在於新版本中) – pIjIN

+1

它可能會將其存儲在GPU內存中。除非實現決定將其存儲在CPU內存中更好(例如,當數據映射到CPU內存或GPU內存已滿時)。 – BDL

回答

1

在現代的OpenGL中。您可以將數據存儲在CPU內存(RAM)中,將數據存儲爲一些數組中的頂點。當我這樣做一些這樣的

void* memory = glMapBuffer(...); 

這會返回我處理設備驅動程序區域中的內存。 因此,您將數據直接複製到設備驅動程序內存,並且可以避免本地數據複製。後來在設備驅動程序將此數據移動到圖形內存。 取決於您的設置,如GL_STATIC_DRAW,GL_DYNAMIC_DRAW設備驅動程序決定選擇哪個內存(GPU或CPU)以及如何對齊數據以實現最佳訪問。 所以一些什麼樣的立即模式(OpenGL)

如果你看到舊版本的OpenGL有一些稱爲顯示列表。 如果您只編寫一次幾何圖形並將其編譯到顯示列表中,並且只要使用預編譯代碼即可繪製。所以一些保留的功能在那裏。

在純保留模式API中,比如WPF,所有主要工作負載(如初始化),生命週期管理均由API完成,因此您幾乎不能控制此調整,因此它取決於API,它將數據放在優化訪問。

+0

我沒有說GPU內存。如果你仔細閱讀,我會提到驅動程序的內存。當驅動程序將其移至GPU時,與實現相關,而不是由OpenGL確定。但直接在驅動程序內存中獲取內容仍然是優化的一個步驟。 –

+1

感謝您輸入完成編輯。 –