我刚刚开始使用带有xna的像素着色器,但我无法绕过几件事情,而且似乎没有任何明确的答案......
我使用spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend);
并且我想将着色器应用于我正在绘制的特定精灵,然后将其取消回默认着色器或无着色器。
那么,你可以帮我跟进吗?
如果我在效果文件中有多种技巧 - 我该如何调用特定的?因为目前我所做的是:shaders.CurrentTechnique.Passes[0].Apply();
它适用于一种技术,但我希望有很多技术。
如果技术有多次通过,我如何应用所有这些?
如果我已应用着色器,如何取消它?我当然可以结束当前的sprite批处理并启动另一个。但我真的不知道这是不是应该如何做到最有效率。
使用像素着色器的其他任何提示?
答案 0 :(得分:3)
您可以在效果文件中定义不同的技巧,如下所示:
// shading code ...
technique Technique1
{
pass Pass1
{
// VertexShader = ...
// PixelShader = ...
}
pass Pass2
{
// VertexShader = ...
// PixelShader = ...
}
// more passes if you want
}
technique Technique2
{
pass Pass1
{
// VertexShader = ...
// PixelShader = ...
}
// more Passes if you want ...
}
从C#代码中使用效果文件,如下所示:
// declar your variable by loading the effect file from the content pipeline
Effect effect = ContentManager.Load<Effect>("NameOfMyEffectFile");
// use a particular technique
effect.CurrentTechnique = effect.Techniques["Technique1"];
// apply a particular pass
effect.CurrentTechnique.Passes[1].Apply();
// begin some drawing
effect.Begin();
// draw ...
// end some drawing
effect.End();
如果你想申请多个通行证,只需按照以下方式迭代所有通行证:
foreach(EffectPass p in effect.CurrentTechnique.Passes)
{
// begin some drawing
p.Begin();
// draw ...
// end some drawing
p.End();
}