3

VS2012シェーダーデザイナーでうまく機能するように見えるシェーダーを作成しました。DGSL形式で保存し、HLSLにエクスポートしました。

これをXNAプロジェクトで使用できると思いましたが、私にとって非常に新しいことが2つあり、誰かが私を正しい方向に向けてくれることを望んでいます。

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」関数を備えたシェーダー)を上記のようなテクニック/パス形式にするために必要なことを誰かが優しく説明できますか?

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
}

エフェクトフレームワークを使用しない場合でも、メインが1つだけの個別の頂点/ピクセルシェーダーファイルを使用して、Visual Studioでそれらをバイナリシェーダーファイルにコンパイルしてから、アプリケーションにロードできます。

Visual Studio 2012では、シェーダーファイルをプロジェクトに追加すると、これが自動的に行われます。また、右クリックしてシェーダーファイルのプロパティに移動すると、*。fx(エフェクトファイル)または頂点/ピクセルシェーダーとそのシェーダーモデルバージョンのどちらであるかを変更できます。

お役に立てば幸いです。

于 2013-03-13T13:40:16.403 に答える