Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用多像素着色器?_C#_Xna_Shader_Effect - Fatal编程技术网

C# 使用多像素着色器?

C# 使用多像素着色器?,c#,xna,shader,effect,C#,Xna,Shader,Effect,我刚开始在xna中使用像素着色器,但我不能将我的头脑集中在几件事情上,似乎在任何地方都没有明确的答案 我使用spriteBatch.Begin(SpriteSortMode.Immediate,BlendState.AlphaBlend)我想将着色器应用于我正在绘制的特定精灵,然后将其取消为默认着色器或无着色器 那么,你能帮我做以下事情吗 如果我在一个效果文件中有几种技术,我如何调用一种特定的技术?因为现在我要做的是:shaders.currentTechnical.Passes[0].App

我刚开始在xna中使用像素着色器,但我不能将我的头脑集中在几件事情上,似乎在任何地方都没有明确的答案

我使用spriteBatch.Begin(SpriteSortMode.Immediate,BlendState.AlphaBlend)我想将着色器应用于我正在绘制的特定精灵,然后将其取消为默认着色器或无着色器

那么,你能帮我做以下事情吗

  • 如果我在一个效果文件中有几种技术,我如何调用一种特定的技术?因为现在我要做的是:
    shaders.currentTechnical.Passes[0].Apply()它只适用于一种技术,但我希望有多种

  • 如果该技术有多个过程,我如何应用所有这些过程

  • 如果我已经应用了着色器,如何取消它?当然,我可以结束当前的雪碧批次,然后开始另一批。但我真的不知道这是否是最有效的方法


有关使用像素着色器的其他提示吗?

您可以在效果文件中定义不同的技术,如下所示:

// 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 ...
}
foreach(EffectPass p in effect.CurrentTechnique.Passes)
{
    // begin some drawing
    p.Begin();

    // draw ...

    // end some drawing
    p.End();
}
从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();

哦,那太深奥了!非常感谢您的解释!