Versão diferente de Pixelshader e Vertexshader para Spritebatch
Pergunta
Eu tentei compilar alguns exemplos de shader de pixels. Mas todos eles dão a mesma mensagem de erro.
"Não é possível misturar o Shader Model 3.0 com os modelos de shader anteriores. Se o shader shader ou o shader de pixels for compilado como 3.0, eles devem ser".
O problema parece ser que o shader Pixel usa PS_3_0 e Sprite Batch possui versão anterior.
technique MyTechnique
{
pass
{
PixelShader = compile ps_3_0 Mandelbrot_PixelShader();
}
}
http://blogs.msdn.com/b/shawnhar/archive/2006/12/11/sixty-fractals-per-second.aspx http://blogs.msdn.com/b/shawnhar/archive/2010/04/05/spritebatch-and-custom-haders-in-xna-game-studio-4-0.aspx
Solução
Você deve recompilar o shader de vértice com a versão 3.0. Você pode obter sombreadores padrão de XNA de http://create.msdn.com/en-us/education/catalog/sample/stock_effects Copie o código daí, mas defina a versão do vértice shader como vs_3_0.
A maioria das GPUs converte versões silenciosamente, então você é um pouco azarado. :)