2017-05-29 2 views
0

J'essaie d'implémenter un PixelShader en Monogame. Le shader (pour l'instant) devrait juste prendre une texture et la rendre non manipulée.MonoGame 2D PixelShader ne fonctionne pas

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(); 
    } 
} 

mes implémentations monogame ressemble à ceci:

dans LoadContent:

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

et dans la méthode draw:

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(); 

Mais il ne montre rien. Changer le BlendState en Opaque me donne un Rectangle noir où la texture devrait être. J'ai également essayé de changer To other Sortmodes et BlendStates sans succès. Je n'arrive pas à trouver le problème. Toute réponse qui aide à résoudre le problème ou diminue la haine de soi que j'ai à cause de cela est très appréciée!

EDIT: Le problème est-il que la liaison de ressources (enregistrement) a été modifiée dans les versions du modèle de shader ?! Quelqu'un s'il vous plaît aider!

Répondre

0

Salut Steffen J'ai essayé ce code pour effet Greyscale

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

// Ces données proviennent du sommet lot de sprite shaders

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

// Notre pixel shader

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; 
} 

// Compiler notre shader

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

ou vous pouvez essayer cette link et this

+0

Merci pour votre réponse, mais avec ce shaderfile je ne peux même pas compiler. MSBuild \ MonoGame \ v3.0 \ MonoGame.Content.Builder.targets (90,5): erreur MSB3073: [..] terminé avec le code 1 – Steffen