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