我對着色器很陌生,並且對整個事物感到非常困惑,即使在遵循幾個教程之後(其實這是我今天有關着色器的第二個問題)。如何在XNA中製作多個通道的像素着色器?
我試圖使着色器有兩個關:
technique Technique1
{
pass Pass1
{
PixelShader = compile ps_2_0 HorizontalBlur();
}
pass Pass2
{
PixelShader = compile ps_2_0 VerticalBlur();
}
}
然而,這僅適用VerticalBlur()。如果我刪除了Pass2,它將回落到Pass1中的HorizontalBlur()。我錯過了什麼嗎?也許它不會將第一次傳球的結果傳遞給第二次傳球,在這種情況下我該怎麼做?
此外,在我閱讀過的大多數教程中,我都會告訴我在開始使用效果的spritebatch之後要放入effect.CurrentTechnique.Passes[0].Apply();
。但是,這似乎沒有改變任何東西;我可以將它設置爲Passes [1],甚至完全刪除它,而且我仍然只獲得Pass2。 (但是,當我嘗試將其設置爲Passes [2]時,確實出現錯誤)。那麼,那條線的用法是什麼?最近版本中是否需要刪除它?
非常感謝!
噢,謝謝。是的,那就是我最終做的。一個問題是,使用不同的pass傳遞兩次着色器和僅應用兩個不同的着色器有什麼區別? – Orteil 2013-02-26 22:12:59
據我所知,除了組織着色器的不同方式之外,沒有其他任何東西。 – pauld 2013-02-26 22:43:38
然而,這樣的平臺支持着色器腳本編寫,您可以在着色器中編寫一個腳本(渲染pass0到渲染目標,然後渲染pass1到後臺緩衝區)甚至渲染傳遞到for循環等。 – pauld 2013-02-26 22:44:44