3
查看MSDN文檔,找不到鎖定VertexBuffers的方法,以便我可以在設備上更改其數據。這在XNA中可能嗎?有沒有辦法在XNA中鎖定VertexBuffers?
查看MSDN文檔,找不到鎖定VertexBuffers的方法,以便我可以在設備上更改其數據。這在XNA中可能嗎?有沒有辦法在XNA中鎖定VertexBuffers?
你有多種選擇在XNA修改頂點緩衝區的內容:
VertexBuffer
有SetData
成員。在任何情況下,您只能在Draw
之外安全地使用此項目,您可以激活Predicated Tiling(因此最好總是在Draw之外完成)。
DynamicVertexBuffer
就像VertexBuffer
,但設置其內容時速度更快。但是它很容易丟失圖形設備,並且必須處理這種情況。另請看SetDataOptions
。
DrawUserPrimitives
(和indexed版本)。這具有不影響Predicated Tiling的優點,並且不會導致命令緩衝區對少量基元進行刷新。
有關MSDN約Dynamically Updating Vertices的詳細信息。而XNA論壇上的this thread也值得一讀。
非常感謝。這是很多很好的信息。還有一個問題:在Draw之外的VertexBuffer上調用SetData總是安全的嗎? – blachniet 2010-07-30 15:38:09
@blachniet:是的(實際上它是一個命令緩衝區,但是,是的,在簡單情況下,在Draw之外)。您聽起來像是來自DirectX背景:如果需要絕對確定XNA在後臺執行的操作,則始終可以通過PIX運行您的遊戲。 – 2010-07-30 15:58:10