我正在使用VS 2013并试图让像素着色器正常工作。我已经在XNA 4中使用了这个着色器,所以我很确定它没问题。
我正在尝试使用2MGFX工具
编译着色器刚刚开始
2MGFX.exe AlphaMap.fx AlphaMap.fxg
工作,我得到我编译的AlphaMap.fxg文件。
然而,当尝试在MonoGame中使用/加载此文件时,我得到:
MGFX效果是此平台的错误配置文件!
对此的修复似乎是将/ DX11添加到2MGFX命令,但后来我得到了这个错误:
像素着色器'PixelShaderFunction'必须是SM 4.0 9.1或更高级别! 无法编译输入文件'AlphaMap.fx'!
我做错了什么?
着色器代码。
uniform extern texture ScreenTexture;
sampler screen = sampler_state
{
// get the texture we are trying to render.
Texture = <ScreenTexture>;
};
uniform extern texture MaskTexture;
sampler mask = sampler_state
{
Texture = <MaskTexture>;
};
// here we do the real work.
float4 PixelShaderFunction(float2 inCoord: TEXCOORD0) : COLOR
{
float4 color = tex2D(screen, inCoord);
color.rgba = color.rgba - tex2D(mask, inCoord).r;
return color;
}
technique
{
pass P0
{
// changed this to reflect fex answer
PixelShader = compile ps_4_0_level_9_1 PixelShaderFunction();
}
}
修改
fex的答案让我能够加载效果,但它似乎现在可以正常工作。
我这样使用它:
Texture2D Planet = _Common.ContentManager.Load<Texture2D>("Materials/RedPlanet512");
Texture2D AlphaMapp = _Common.ContentManager.Load<Texture2D>("Materials/Dots2");
Effect AlphaShader = _Common.ContentManager.Load<Effect>("Effects/AlphaMap");
AlphaShader.Parameters["MaskTexture"].SetValue(AlphaMapp);
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, null, null, null, AlphaShader, _Common.Camera.View);
spriteBatch.Draw(Planet,
new Vector2(0, 0),
null, Color.White, 0f,
new Vector2(Planet.Width / 2, Planet.Height / 2),
1f, SpriteEffects.None, 1f);
spriteBatch.End();
这些是我正在使用的纹理:
http://www.syntaxwarriors.com/wp-content/gallery/alphamapping-gallery/redplanet512.png http://www.syntaxwarriors.com/wp-content/gallery/alphamapping-gallery/whitedots_0.png
答案 0 :(得分:7)
尝试更改此行:
PixelShader = compile ps_2_0 PixelShaderFunction();
成:
PixelShader = compile ps_4_0_level_9_1 PixelShaderFunction();
顺便说一下 - 为什么不使用MonoGame内容模板?