2012-03-04 21 views
1

這是關於XNA中SpriteBatches的性能問題。當你想在XNA中開始繪圖時,你必須使用spritebatch.Begin()。這就是你如何指定一堆東西,比如使用的着色器。這會產生問題,因爲不同的精靈可能會使用不同的着色器。我看到了一些教程,在每個單獨對象的繪製調用中使用了開始和結束。我想這樣做,因爲我希望每個精靈都能夠使用它自己的着色器。我怎樣才能做到這一點而不會導致性能問題?SpriteBatch.Begin和SpriteBatch.End

回答

3

如果你打算讓每個精靈使用它自己的着色器,大概他們中的一些將共享相同的着色器。確保這些精靈進入同一批次,以獲得儘可能高的性能。

(這可能涉及一些非常醜陋的或相當複雜的代碼,通過着色器到你的對象進行排序,並檢測何時改變批次。你將不得不住在一起。)

背後SpriteBatch的想法是,它在將它們發送到GPU之前,將精靈們拼湊在一起。在開始/結束塊中更改紋理或者開始新的開始/結束塊將需要新批次。

您可以獲得每幀幾百個批次。

關於這方面的更深入的討論,請參閱遊戲開發網站上的this answerthis answer

+0

哇謝謝,但你是說我可以做一百個批次沒有表現擊中每幀? – user1152717 2012-03-05 03:51:33

+0

基本上是的。批次不是免費的 - 它們都會佔用CPU時間。批處理限制僅僅是表達每個幀可支付多少批次的方式,在CPU時間用完之前,FPS下降到FPS目標以下進行補償。 「幾百」是遊戲的典型限制。 – 2012-03-05 05:17:33

相關問題