我创建了一个在VS2012着色器设计器中运行良好的着色器。它将其保存为DGSL格式,然后我将其导出到HLSL。
我以为我可以在XNA项目中使用它,但有两件事对我来说很新,我希望有人可以指出我正确的方向:
1)到目前为止,我见过的每个着色器都有这样的部分
technique RibbonShader
{
pass Pass0
{
VertexShader = compile vs_2_0 VertexShader();
PixelShader = compile ps_2_0 PixelShader();
}
}
不幸的是,VS2012导出功能生成的HLSL只有一个主要功能,如下所示:
P2F main(V2P pixel)
{
// lots of stuff
return result;
}
有人可以轻轻地解释我需要做些什么才能让我的着色器(具有'main'功能的那个)在设计器中工作得很好,以具有上述技术/传递格式的格式?
答案 0 :(得分:2)
technique RibbonShader
{
pass Pass0
{
VertexShader = compile vs_2_0 VertexShader();
PixelShader = compile ps_2_0 PixelShader();
}
}
是否使用效果框架为着色器使用的格式。 Visual Studio生成的着色器只是一个具有单个主函数的顶点或像素着色器。
要将其转换为效果文件,您必须添加技术部分并使用效果框架。像
这样的东西V2P mainVS(...)
{
// vertex shader
}
P2F mainPS(V2P pixel)
{
// lots of stuff
return result;
}
technique YourTechniqueName // can be anything you choose.
{
pass Pass0
{
VertexShader = compile vs_2_0 mainVS();
PixelShader = compile ps_2_0 mainPS();
}
// can have other passes
}
如果你不使用效果框架,你仍然可以使用单独的顶点/像素着色器文件,只有一个主内部,让Visual Studio将它们编译成二进制着色器文件,然后你可以在你的应用程序中加载它们。
在Visual Studio 2012中,将着色器文件添加到项目时会自动完成。此外,当您右键单击并转到着色器文件的属性时,如果它是* .fx(效果文件)或顶点/像素着色器及其着色器模型版本,则可以更改。
希望有所帮助。