MonoGame 2D PixelShader无法正常工作

时间:2017-05-29 08:55:35

标签: c# xna 2d shader monogame

我正在尝试以Monogame实现PixelShader。

着色器(现在)应该只使用纹理并将其恢复为未操作。

sampler MyTex : register(s0);

float4 PixelShaderFunction( float2 coords: TEXCOORD0 ) : COLOR0
{
    float4 Color = tex2D(MyTex, coords);
    return Color;
}

technique tech
{
    pass Pass1
    {
        PixelShader = compile ps_4_0_level_9_1 PixelShaderFunction();
    }
}

我的Monogame实现看起来像这样:

在LoadContent中

spriteBatch = new SpriteBatch(GraphicsDevice);
texture = Content.Load<Texture2D>("surge");
GraphicsDevice.Textures[0] = texture;
effect = Content.Load<Effect>("sha");

并在绘制方法中:

GraphicsDevice.Clear(Color.Aquamarine);

spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend,null, null, null, effect, null);
spriteBatch.Draw(texture, new Vector2(150, 150), Color.White);
spriteBatch.End();

但它没有显示任何内容。将BlendState更改为Opaque为我提供了一个纹理应该是黑色矩形。我也试过改变其他的Sortmodes和BlendStates但没有成功。我似乎无法找到问题。 任何有助于解决问题或正在减少我自己的仇恨的答案都非常感谢!

编辑:资源绑定(注册)在整个着色器模型版本中是否发生了变化? 有人请帮忙!

1 个答案:

答案 0 :(得分:0)

嗨Steffen我已尝试使用此代码进行灰度效果

texture Texture;
sampler TextureSampler = sampler_state
 {
   Texture = <Texture>;
 };

//此数据来自sprite批处理顶点着色器

struct VertexShaderOutput
{
  float4 Position : TEXCOORD0;
  float4 Color : COLOR0;
  float2 TextureCordinate : TEXCOORD0;
};

//我们的像素着色器

float4 PixelShaderFunction(VertexShaderOutput input) : COLOR0
{
   float4 color = tex2D(TextureSampler, input.TextureCordinate);

   float value = 0.299*color.r +  0.587*color.g + 0.114*color.b;
   color.r = value;
   color.g = value;
   color.b = value;
   color.a = 1.0f;

   return color;
}

//编译我们的着色器

technique Technique1
{
  pass Pass1
  {
    PixelShader = compile ps_2_0 PixelShaderFunction();
  }
}

或者您可以尝试此linkthis