使用VS2012 Shader Designer创建XNA着色器

时间:2013-03-10 01:25:06

标签: xna shader direct3d hlsl

我创建了一个在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'功能的那个)在设计器中工作得很好,以具有上述技术/传递格式的格式?

1 个答案:

答案 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(效果文件)或顶点/像素着色器及其着色器模型版本,则可以更改。

希望有所帮助。