我认为我非常愚蠢,因为在这个最简单的情况下,我无法弄清楚导致问题的原因。
项目类型是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();
现在我决定将它绘制到由代码创建的渲染目标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
(填充紫罗兰色)绘制到渲染目标而不使用着色器(然后到屏幕)并且它可以正常工作。< / p>
似乎我错过了一些关于XNA中着色器的基本知识,但我无法弄清楚它是什么。