所以我正在做的事情與XNA 3.1,我有很多的,它們通過像素着色器應用單獨的效果。這些來自各種來源,如特殊攻擊,環境等等。我遇到的問題是我注意到幀速率的顯着降低。合併多個像素着色器有效
目前,我畫整個場景的RenderTarget2D,這我然後將所有的效果。餘存儲包含的影響和它們的ID一個SortedDictionary(ID被用於在運行時改變參數),並且我遍歷它和其他之後施加每個效果之一:
foreach(KeyValuePair<Ref<int>,Effect> p in renderEffects)
{
Effect r = p.Value;
g.SetRenderTarget(0, MainGame.MainRenderTarget);
//Change RenderTarget to allow code to grab existing texture in the same draw area.
levelDraw = MainGame.LevelRenderTarget.GetTexture();
//Change back to draw back to this texture, allowing render effects to be layered.
g.SetRenderTarget(0, MainGame.LevelRenderTarget);
MainGame.StartDraw(MainGame.GameBatch);
//Starts the sprite batch and sets some parameters
r.Begin();
r.CurrentTechnique.Passes[0].Begin();
MainGame.GameBatch.Draw(levelDraw, new Rectangle(0, 0, levelDraw.Width, levelDraw.Height), Color.White);
r.CurrentTechnique.Passes[0].End();
r.End();
MainGame.GameBatch.End();
}
現在,這將產生明顯的當分層只有3個效果時幀丟失,而當應用10時,幀速從60FPS下降到16FPS,這當然是不可接受的。我想知道是否有更有效的方法來做到這一點。考慮到我只有一個紋理,我認爲我可以將這些效果組合到一個文件中,並執行多次通過而不會抓取紋理。但我不確定這是否可行。
我真的不知道要做到這一點的最好辦法究竟是怎麼一回事,但我想有一定比我做的方式更好的辦法。
我編輯了自己的冠軍。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –
謝謝你。我傾向於將它們包括在內,讓人們知道他們是否能夠一目瞭然,而不必查看標籤,但是我可以看到不使用它們的邏輯。 – Hoeloe
這些標籤包含比查看亂碼標題更好的機制。你可以設置「喜歡的標籤」,這將導致與這些標籤的消息被突出顯示;和「忽略標籤」,這些標籤會導致隱藏這些標籤的消息。 –