0

現在、第2シリーズのチュートリアルのwww.rastertek.comのDirectX 11チュートリアルに従っています。私は現在Windows7 x64でVS2015を使用しています。このチュートリアルに続いて、私はWindows 10キットを使用しています。DirectX11シェーダファイルのコンパイル

私はちょうど頂点&ピクセルシェーダとHLSLを使って色の三角形をレンダリングするためのチュートリアル4を完了しまし成功し最初の3つのチュートリアルを完了したとDirectX 11を使用して色ウィンドウをレンダリングすることができましたしました。私は頂点シェーダとピクセルシェーダの両方が別々のファイルにあるこのチュートリアルに従っています。私のコードの唯一の違いは、使用しているファイル拡張子です。彼のウェブサイトでは* .vsと* .psを使用しています。これは* .vshと* .pshを使用しています。すべてのクラスファイルが正しくコンパイルされますが、私が解決策を構築し始めると、このエラーが発生します。

1>------ Build started: Project: DirectX 11 Engine, Configuration: Debug x64 ------ 
1>FXC : error X3501: 'main': entrypoint not found 
1> 
1> compilation failed; no code produced 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

このウェブサイトの作成者には、連絡先情報やコミュニティベースのフォーラムはありません。これがウェブサイトのチュートリアル内のエラーであるかどうかはわかりません。今度は、このコードがWindows VistaとWindows 7の両方で2010年、2012年、2013年などの旧バージョンのVSを使用する前に、Windows 7の& Windows 8キットをDirectX 10の& DirectX 11チュートリアルのWindows 8キットから使用しています。 www.msdn.comからのヘルプを見つけることができませんでした。そのチュートリアルの一部は、VS2013を使用するDirectX 11用のWindows 8の要件で書かれています。彼らの文書もかなり貧弱です。

次のように私はシェーダファイルをコンパイルするときには廃止2010年6月のダイレクトX SDKリリース対WindowsのキットからのDirectX 11内の異なる気づいたことの一つは次のとおりです。

2010年6月のダイレクトX SDK - 用途:

HRESULT result; 

result = D3DX11CompileFromFile("shaderFilename", NULL, NULL, "ShaderName", "*s_5_0" or "*s_5_1", D3D10_SHADER_ENABLE_STRICTNESS, 0, NULL, &pShaderBuffer, &pErrorMessage, NULL); 

対...

をこのチュートリアル(VS2015からWindowsの10キット) - 用途:

HRESULT result; 
result = D3DCompileFromFile("shaderFilename", NULL, NULL, "ShaderName", "*s_5_0" or "*s_5_1", D3D10_SHADER_ENABLE_STRICTNESS, 0, &pShaderBuffer, &pErrorMessage); 

ここで、シェーダのファイル名、シェーダ名、機能レベル、およびシェーダバッファは、頂点シェーダタイプまたはピクセルシェーダタイプのいずれかです。両方の機能レベルを指定していても、両方の場合に使用されている機能レベルは「5_0」で、「5_1」ではありません。

DirectXのHLSL用に異なるコンパイラ間で何が変更されたのか分かりませんが、このエラーがどこから発生しているのかわかりません。ウェブサイトのチュートリアルのShader Sourceコードに何かが見つからないか、VS2015に何らかの種類のプロパティや設定があって、私が気付いていないように設定されていないかどうかはわかりません。私は、この問題の解決に役立つあらゆる提案をしています。

答えて

0

に変更します。私はこの質問FXC : error X3501: 'main': entrypoint not foundとその中のいくつかのコメントと答えにつきものになった。私は単に右の「color.psh」と「color.vsh」ファイルにし、そのプロパティの下にクリックしてしまった:

  • 構成プロパティ - >一般 - >私は「はい」にフラグを設定し、ビルドセクションから除外します
    • HLSLコンパイラ - >一般 - >シェイダータイプセクションピクセルごとにシェイダータイプを設定します。&頂点シェーダーファイルごとに設定しました。
    • HLSLコンパイラ - >一般 - >シェイダーモデルセクション両方のファイルのShader Model 5.0(/ 5_0)に設定しました。

今、すべてのものが正常に構築し、予想通り、私は黒のウィンドウ表示の背景の上に緑色の三角形をレンダリングしています。

0

エラーメッセージは非常に明白です。コンパイラはエントリポイントを見つけることができません。デフォルトではmainです。私の推測では、あなたがD3DCompileFromFileの文書を見れば、あなたは1つのパラメータは、エントリポイントの名前であることがわかります...あなたのシェーダがvsmainまたはpsmainのようなものを使用することを

です:https://msdn.microsoft.com/en-us/library/windows/desktop/hh446872(v=vs.85).aspx

また、 "*s_5_0" or "*s_5_1"があなたの擬似コードであると想像してください。orは、最近のC++では廃止予定の機能で、ここではポインタが2つだけでtrueになり、コンパイル関数はワイルドカードを認識しません。

+0

いいえ、ワイルドチャードは、それぞれ「v」または「p」のいずれかを表す質問のプレースホルダーに過ぎませんでした。私は、この手順をシェーダごとに1回、2回呼びます。 –

3

Visual Studioは、FXCを使用して自動的にシェーダをコンパイルします。ここで、FXCは、mainエントリポイント、すなわち、mainという機能が見つからないと報告しています。これは、2つのソリューションを持って、デフォルトである:VertexShaderエントリポイントを仮定し

  • が(それはあなたがリンクチュートリアルである)ColorVertexShaderで、main
  • 変更にプロパティのエントリ・ポイントを、それを変更します。Right click on file -> Properties -> HLSL Compiler -> General -> Entrypoint name
  • Visual Studioがあなたのためにシェーダをコンパイルし

ので、あなたがしてID3D11DeviceからCreateVertexShaderでそれらを渡し、データを読み取るためにD3DReadFileToBlobを使用することを検討して、D3DCompileFromFileを経由して自分でコンパイルする必要はありません。


あなたがシェーダをコンパイルするFXCにしたくない場合は、Right click on file -> Properties -> General -> Item typeことができます - 私はこの質問を提出した後Does not participate in build

+0

しかし、興味深いと思うが、私は自分のウェブサイトのシリーズ2のセクションで地形のチュートリアルにジャンプするために、その実装のウェブサイトのチュートリアルに近づこうとしている。 –

+1

@FrancisCuglerこの場合、ビルドから除外されたファイルのプロパティを設定することができます – galop1n

+0

@ galop1nありがとうございます。あなたのコメントは少し遅れてきましたが、私はそれを把握しました。私はこの問題を解決するために数時間を探していましたので、ここで尋ねました。答えやコメントを待っている間に、別のスレッドがうまくいきませんでした。悪いタイミングの確率! –

関連する問題