3

我创建了一个似乎在 VS2012 着色器设计器中运行良好的着色器。它以 DGSL 格式保存它,然后我将其导出到 HLSL。

我以为我可以在 XNA 项目中使用它,但是有两件事对我来说非常新,我希望有人能指出我正确的方向:

1)到目前为止我见过的每个着色器都有这样的部分

technique RibbonShader
{
    pass Pass0
    {   
        VertexShader = compile vs_2_0 VertexShader();
        PixelShader  = compile ps_2_0 PixelShader();
    }
}

不幸的是,由 VS2012 导出功能生成的 HLSL 只有一个 main 函数,如下所示:

P2F main(V2P pixel)
{
    // lots of stuff
    return result;
}

有人可以温和地解释我需要做什么才能让我的着色器(具有“主要”功能的着色器)在设计器中运行良好,以采用具有上述技术/通道格式的格式吗?

4

1 回答 1

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

希望有帮助。

于 2013-03-13T13:40:16.403 回答