3

MSDNによると、.hlslファイルをヘッダーファイルで定義されたバイト配列にコンパイルできるとのことです。そして、これは彼らが与えるコードです。

    #include "PixelShader.h"
    ComPtr<ID3D11PixelShader> m_pPixelShader;
    hr = pDevice->CreatePixelShader(g_psshader, 
         sizeof(g_psshader), nullptr, &m_pPixelShader);

g_psshaderバイト配列もそうです。しかし、g_psshaderを定義する方法は?それについての話を見つけることができる場所はどこにもありません。私はシリアルな方法を試しましたが、すべて失敗しました。MSDNは、メディア拡張機能のサンプルを提供しました。ただし、そのサンプルにはPixelShader.hはありません。

質問を見逃した場合:上記のコードでg_psshaderを定義する方法(つまり、ヘッダーPixelShader.h)。

4

2 に答える 2

7

このソリューションは、VisualStudio2012用です。

.fxまたは.hlslファイルに関連付けられたヘッダーファイルと変数名を設定するには:

  1. ソリューションエクスプローラー内の.fxまたは.hlslファイルを右クリックし、[プロパティ]を選択します。
  2. 左側に「HLSLコンパイラ」というツリーがあるはずです。このツリーを展開し、「出力ファイル」を選択します。
  3. 右側のプロパティシートには、HLSLコンパイルを管理するためのいくつかのプロパティがあります。

「ヘッダー変数名」->シェーダーバイトコードを含む変数の名前。

「ヘッダーファイル名」->シェーダーバイトコードを入れるヘッダーファイルの名前。

私の理解では、このファイルをコードに含めると、このファイルにコンパイルされた変数にアクセスできるはずです。メインプロジェクトのビルドプロセスを開始する前に、FXおよびHLSLコードをこれらのファイルにコンパイルする必要があります。

注:コンパイルするテクニックの名前を反映するために、[一般]の下の[エントリポイント名]を変更する必要がある場合もあります(.fxを使用している場合)。特定のシェーダーファイルに指定する必要がある「シェーダータイプ」と「シェーダーモデル」にも問題がある可能性があります。

于 2013-05-20T02:43:11.633 に答える
0

プレフィックスはg_、それがグローバル変数である可能性があることを示唆しており、CreatePixelShaderドキュメントを読むと、コンパイルされたバイトコードへのポインタであることがわかります。つまり、最初にシェーダーソースを実際にロードしてコンパイルしてから、このコンパイル済みコードへのポインターをCreatePixelShader関数に渡す必要があります。シェーダーソースのロード/コンパイルはどの機能を実行するのかわかりません。D3Dについては何も知らないので、常識(変数名に関して)と関数のドキュメントをインターネットですばやく検索しています。

于 2013-01-14T14:17:08.090 に答える