2013-03-10 89 views
3

我创建了一个着色器,它似乎在VS2012着色器设计器中很好地工作。它将其保存为DGSL格式,然后导出到HLSL。使用VS2012着色器设计器创建XNA着色器

我想我能在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'功能的着色器)在设计器中很好地处于具有上述技术/传递格式的格式中?

回答

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(效果文件)或顶点/像素着色器及其着色器模型版本。

希望有所帮助。

+1

谢谢。我将补充说明,生​​成的着色器包含许多参数,其中大部分参数都被忽略,其中一些参数是必不可少的。没有文档指出哪些对着色器的使用很重要。没有示例显示如何使用这种方式生成的HLSL。 事实上,我可能是唯一已经尝试过的人,因为我发现DGSL导出在ANSI中是这样做的,FX编译器需要UNICODE,所以我必须用记事本手动转换。它如何能够工作我不知道。 – Dave 2013-03-13 19:01:43