是否有某種方法在GPU上的Direct2D中存儲「場景」?在GPU上的Direct2D中存儲資源
我正在尋找類似於ID2D1Mesh
(即以矢量格式存儲資源,而不是作爲位圖)的東西,但我可以在其中配置網格/場景/資源是否應使用抗鋸齒進行渲染。
是否有某種方法在GPU上的Direct2D中存儲「場景」?在GPU上的Direct2D中存儲資源
我正在尋找類似於ID2D1Mesh
(即以矢量格式存儲資源,而不是作爲位圖)的東西,但我可以在其中配置網格/場景/資源是否應使用抗鋸齒進行渲染。
有一種方法可以通過ID2D1Mesh
來獲得抗鋸齒功能,但它不是微不足道的。您必須自己創建Direct3D設備,然後使用ID2D1Factory::CreateDxgiSurfaceRenderTarget()
。這允許您直接配置D3D設備的多重採樣/抗混疊設置,然後網格一切正常(實際上,我認爲您總是告訴Direct2D使用別名渲染)。我自己並沒有這樣做,但是有一個MSDN示例演示瞭如何執行此操作。它不適用於心靈的懦弱......爲了進行軟件渲染,你必須初始化一個WARP設備。它確實有效,但是。此外,在Direct2D 1.1(Windows 8或Windows 7 +平臺更新)中,您可以使用ID2D1CommandList
接口進行錄製/播放。我不確定這是否實現爲「編譯到GPU」(ala mesh),或者它只是宏(記錄/回放命令)。
裏克是正確的,你可以在兩個不同的級別應用抗鋸齒。通過Direct2D或Direct3D。你可以做到這兩點,但這是毫無意義的,只會浪費資源,導致效果不佳。如果您想要基於原始幾何的抗鋸齒功能,則Direct2D抗鋸齒功能非常適合。如果您想在某些場景中犧牲一點質量以獲得更好的整體性能,Direct3D抗鋸齒功能非常有用。
Direct2D 1.1命令列表逐字地存儲/記錄可以針對不同目標回放的繪圖命令列表。這可能是因爲它沒有柵格化後的結果。從概念上講,就像將矢量圖像存儲在設備內存中一樣。命令列表在某種程度上受到限制,因爲一旦創建命令列表就不能修改命令列表,並且繪製的資源也可能無法更改,但它仍然非常方便。
在Windows 8.1中,Direct2D引入了geometry realizations,它允許您存儲曲面細分版本的幾何圖形,然後使用或不使用抗鋸齒將其渲染回來,就像您問的一樣。這些強烈建議使用網格。命令列表雖然方便,卻沒有像自己創建和存儲幾何實現那樣的緩存功能。
'ID2D1CommandList'原來是非常快速且易於使用的。 – finnsson