0

C++ を使用して HLSL の基本を学び始めたところです。本のチュートリアルに従っています。最初の基本的なシェーダーは次のとおりです。

float4 VS_Main( float4 pos:POSITION):SV_POSITION
{

return pos;
}

しかし、コンパイル時に多くのエラーが発生します:

エラー C2146: 構文エラー: ';' 識別子「VS_Main」の前にありません

エラー C4430: 型指定子がありません。int と見なされます。注: default-int はサポートされなくなりました

エラー C2146: 構文エラー: ')' が識別子 'pos' の前にありません

エラー C2059: 構文エラーは関数定義のように見えますが、正式なパラメーター リストはありません。

エラー C2059: 構文エラー: '{'

コンパイラがHLSLをまったく処理できないように見えます.VS2012 ExpressはHLSLをサポートしていないのでしょうか?

前もって感謝します

4

3 に答える 3

2

HLSL は C++ ではありません。シェーダーはシェーダー コンパイラーでコンパイルし、C++ は C++ コンパイラーでコンパイルする必要があります。混合しないでください。HLSL のコンパイルには 2 つのオプションがあります。

  1. fxc.exeDirectX SDK に含まれているコマンド ライン ユーティリティを使用します ( MSDN のドキュメントと使用法)。ここで説明するいくつかの方法で実行時にロードする必要があるファイルを生成します。
  2. D3DCompileFromFile関数を使用して、実行時にシェーダーをコンパイルします 。

各バリアントには長所と短所があります。要するに、ビルド時にプリコンパイルすると、実行時にいくらかの時間が得られますが、実行時にコンパイルすると、開発段階でより柔軟で快適になります (再コンパイルやビルド後のスクリプトを使用することを覚えておく必要はありません)。傾向がある。自分で選んでください。

于 2013-02-02T17:52:19.377 に答える
1

コードは HLSL に適しています。VS2012 内からコンパイルする場合は、「.fx」ファイルを HLSL シェーダー コンパイラを使用してビルドするように設定します。ファイル選択プロパティを右クリックします。次に、General を選択し、Item Type を HLSL コンパイラに設定する必要があります。

本当に C++ を使用してシェーダーを作成したい場合は、C++AMP を調べて、ニーズに合うかどうかを確認できます。

于 2013-02-02T22:18:32.270 に答える
0

コンパイラがHLSLをまったく処理できないように見えます...多分VS2012ExpressはHLSLをサポートしていませんか?

C++コンパイラは行いません。コンパイラによって処理されることは想定されていません。

これをリソースに変換し、ビルド後のスクリプトを使用してbinディレクトリにコピーし、実行時にHLSLをロードする必要があります。

参照:http ://www.directxtutorial.com/Lesson.aspx?lessonid = 11-4-5

于 2013-02-02T17:41:27.403 に答える