基本的なDirectX11の問題。画面に何かを描画し始めるとすぐにコードがクラッシュします。 Netbeansの構成も支援します

c++ directx directx-11 netbeans visual-c++
基本的なDirectX11の問題。画面に何かを描画し始めるとすぐにコードがクラッシュします。 Netbeansの構成も支援します

そこで、今日DirectX11でプログラミングを開始しました。コーディングの経験は豊富ですが、特にDirectXではありませんでしたので、いくつかのチュートリアルを見てみました。 すべてが膨らみ、ウィンドウを初期化し、背景色を設定できましたが、シェーダーを定義してオブジェクトを描画しようとするとすぐに、ロード時にクラッシュします。 このコードは非常に単純であり、rarに配置しているので、何がおかしいのかわかります。 NetBeansでOpenGL参照パスを設定しようとして昨日何時間も試みたため、Visual C ++ Express Editionでコーディングしているので、DirectXを動作させようとはしていません。 現在私が持っているコードは次のとおりです。http://www.mediafire.com/?i8w1trkx7c03qts

また、www.dx11.org.uk / 3dcube.htmにある提供されたexeをダウンロードして実行してみて、それが私の直接のXか何かかをテストしましたが、「D3D11デバイスの作成に失敗しました」彼らのコードからは、「D3D11CreateDeviceAndSwapChain」コマンドを完了できません。 正直言って、私は何を間違っているのか、何が起こっているのか? (および、netbeansでdirectXライブラリ参照を設定する方法に関するヘルプは、非常に役立ちます)。

  1  0


ベストアンサー

わたしにはできる :)

コードをコンパイルするために、いくつかの文字列のLプレフィックスを削除する必要がありました: " shaders.hlsl "" WindowClass "" Our First Direct3D Program "

実行可能ファイルと同じパスに.hlslファイルがありますか? また、VSからプログラムを開始することもできません。 エクスプローラーから.exeを起動する必要があります。 ただし、次のようなこの動作が望ましくない場合は、シェーダーへの絶対パスを設定できます。

D3DX11CompileFromFile("C:\\Users\\Stringer\\Desktop\\DXTest\\shaders.hlsl", ...
D3DX11CompileFromFile("C:\\Users\\Stringer\\Desktop\\DXTest\\shaders.hlsl", ...

*編集:*また、デバイスまたはデバイス/スワップチェーンを作成するときは、常にデバッグモードで `D3D11_CREATE_DEVICE_DEBUG`を使用します。 これにより、VS出力ウィンドウに有用な警告とエラーが出力されます(すべてが私の側では問題なく見えます)。

    D3D11CreateDeviceAndSwapChain(NULL,
                                  D3D_DRIVER_TYPE_REFERENCE,
                                  NULL,
#ifdef _DEBUG
                                  D3D11_CREATE_DEVICE_DEBUG,
#else
                                  0,
#endif
                                  NULL,
                                  NULL,
                                  D3D11_SDK_VERSION,
                                  &scd,
                                  &swapchain,
                                  &dev,
                                  NULL,
                                  &devcon);

編集2:

また、アプリケーションが失敗する可能性があるすべての場所でエラーコードを常に確認します。

ID3D10Blob* pErrorBlob = NULL;

HRESULT hr = D3DX11CompileFromFile("C:\\Users\\Stringer\\Desktop\\\\DXTest\\shaders.hlsl", 0, 0, "VShader", "vs_5_0", 0, 0, 0, &VS, &pErrorBlob, 0);
LPVOID pError = NULL;
if( pErrorBlob )
{
    pError = pErrorBlob->GetBufferPointer();
    // then cast to a char* to see it in the locals window
}

4


www.directxtutorial.comのDX11コードは、シェーダーモデル5としてシェーダーをコンパイルしようとします。 DX 10 / 10.1クラスのハードウェアは、いくつかのDX11機能を利用するように更新されていますが、シェーダーモデル5はそれらの1つではありません。

変更:D3DX11CompileFromFile(L “shaders.hlsl”、0、0、 “VShader”、 “vs_5_0″、0、0、0、&VS、0、0); D3DX11CompileFromFile(L “shaders.hlsl”、0、0、 “PShader”、 “ps_5_0″、0、0、0、&PS、0、0);

to

D3DX11CompileFromFile(L “shaders.hlsl”、0、0、 “VShader”、 “vs_4_0″、0、0、0、&VS、0、0); D3DX11CompileFromFile(L “shaders.hlsl”、0、0、 “PShader”、 “ps_4_0″、0、0、0、&PS、0、0);

1


同じチュートリアルを使用してもまったく同じ問題が発生しました。 同じチュートリアルのDirectX 9バージョンを代わりに試してみましたが、問題なくすぐに動作しました(文字列の先頭からL文字を削除する必要はありませんが、Unicodeサポートと関係があります)。 この問題の根本的な原因は、一部の人々のシステムでDX11のサポートが不足しているようです。

1


タイトルとURLをコピーしました