C# 仅使用着色器渲染到纹理的结果为空

C# 仅使用着色器渲染到纹理的结果为空,c#,android,shader,monogame,C#,Android,Shader,Monogame,我认为我很愚蠢,因为我不知道在这个最简单的例子中是什么导致了这个问题 项目类型为Windows OpenGL(在Android上,该问题仍然存在) 以下是着色器: //---------------------------------------------------------------------------- float4 PSTest (float2 TexCoords : TEXCOORD0) : COLOR0 { float4 color = float4 (1, 0,

我认为我很愚蠢,因为我不知道在这个最简单的例子中是什么导致了这个问题

项目类型为Windows OpenGL(在Android上,该问题仍然存在)

以下是着色器:

//----------------------------------------------------------------------------
float4 PSTest (float2 TexCoords : TEXCOORD0) : COLOR0
{
    float4 color =  float4 (1, 0, 0, 1);

    return color;
}

//----------------------------------------------------------------------------
Technique Test
{
    pass Test
    {
        PixelShader = compile ps_2_0 PSTest();
    }
}   
如果我使用
纹理将其绘制到屏幕上(128x128),效果会很好:

现在我决定将其绘制到由代码创建的渲染目标
输出中:

new RenderTarget2D (GraphicsDevice, 256, 256, false, 
   SurfaceFormat.Color, DepthFormat.None);
绘图代码:

        // Render into Output
        Shader.CurrentTechnique = Shader.Techniques["Test"];
        GraphicsDevice.SetRenderTarget (Output);
        GraphicsDevice.Clear (Color.DimGray);

        Batch.Begin (SpriteSortMode.Immediate, BlendState.Opaque,
           SamplerState.PointClamp, DepthStencilState.None, null, Shader);
        Batch.Draw (Texture, Vector2.Zero, Color.White);
        Batch.End();

        // Draw Output
        GraphicsDevice.SetRenderTarget (null);
        GraphicsDevice.Clear (Color.White);

        Batch.Begin();
        Batch.Draw (Output, Vector2.Zero, Color.White);
        Batch.End();
但结果是完全荒谬的:

我尝试过不同的最简单着色器,SurfaceFormat.HdrBlendable,纹理大小-但没有任何帮助

此外,我还尝试在没有着色器的情况下将
纹理
(填充紫色)绘制到渲染目标(然后绘制到屏幕),并且效果良好

似乎我错过了XNA中着色器的一些基本功能,但我无法理解它是什么。

以下是解决方案:。原因在于着色器的输入参数

        // Render into Output
        Shader.CurrentTechnique = Shader.Techniques["Test"];
        GraphicsDevice.SetRenderTarget (Output);
        GraphicsDevice.Clear (Color.DimGray);

        Batch.Begin (SpriteSortMode.Immediate, BlendState.Opaque,
           SamplerState.PointClamp, DepthStencilState.None, null, Shader);
        Batch.Draw (Texture, Vector2.Zero, Color.White);
        Batch.End();

        // Draw Output
        GraphicsDevice.SetRenderTarget (null);
        GraphicsDevice.Clear (Color.White);

        Batch.Begin();
        Batch.Draw (Output, Vector2.Zero, Color.White);
        Batch.End();