Результат рендеринга в текстуру пустой только с шейдером

Я думаю, что я очень глуп, потому что я не могу понять, что вызывает проблему в этом простейшем случае.

Тип проекта — Windows OpenGL (на Android проблема также сохраняется).

Вот шейдер:

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

    return color;
}

//----------------------------------------------------------------------------
Technique Test
{
    pass Test
    {
        PixelShader = compile psTexture0 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();

Изображение

Теперь я решаю нарисовать его в цели рендеринга 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();

Но результат совершенно абсурден:

Изображение

Пробовал разные простейшие шейдеры, SurfaceFormat.HdrBlendable, размеры текстур - ничего не помогает.

Также я попытался нарисовать Texture (залитый фиолетовым цветом) в рендер-цель без шейдера (затем на экран), и все работает нормально.

Изображение

Кажется, я пропустил некоторые основы шейдеров в XNA, но я не могу понять, что это такое.


person Ghosthack    schedule 12.02.2014    source источник


Ответы (1)


Вот решение: https://monogame.codeplex.com/discussions/530086. Причина во входных параметрах шейдера.

person Ghosthack    schedule 12.02.2014