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

时间:2014-02-12 13:39:25

标签: c# android shader monogame

我认为我非常愚蠢,因为在这个最简单的情况下,我无法弄清楚导致问题的原因。

项目类型是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();
    }
}   

如果我使用Texture(128x128)将其绘制到屏幕上,它可以正常工作:

        Shader.CurrentTechnique = Shader.Techniques["Test"];
        GraphicsDevice.SetRenderTarget (null);
        GraphicsDevice.Clear (Color.White);

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

Image

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

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();

但结果完全荒谬:

Image

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

此外,我尝试将Texture(填充紫罗兰色)绘制到渲染目标而不使用着色器(然后到屏幕)并且它可以正常工作。< / p>

Image

似乎我错过了一些关于XNA中着色器的基本知识,但我无法弄清楚它是什么。

1 个答案:

答案 0 :(得分:0)

以下是解决方案:https://monogame.codeplex.com/discussions/530086。原因在于着色器的输入参数。