1

モデルをロードして、照明などを使わずに表示する小さなアプリケーションがあります。リリースをビルドして別のコンピューターで実行しようとしましたが、D3DX10CreateEffectFromFile が E_FAIL を返し続けます。

エフェクト ファイルは完全にコンパイルされ、私の開発マシンでは完全に動作しますが、他の PC では動作しません。PCのスペックはそこまで変わらない。どちらも Windows7 で、どちらも GeForce グラフィックス カードを搭載しています。唯一の実際の違いは、リリースを実行しようとしているコンピューターに DirectX 11 互換のグラフィックス カードがあることです。

私のリリースビルドのフォルダーは次のようになります...

G:\ModelLoader

d3dx10_43.dll

ModelViewer.exe

シンプル.fx

test.txt (モデル ファイル)

これは私の開発マシンで完全に正常に動作します (ほとんどのコードをコメントアウトしたので、ウィンドウを開き、initD3D10 を開き、エフェクトを試してロードするだけです)。他のPCでは、すべて正常に動作します...

ID3D10Blob* l_pBlob_Errors = NULL;

HRESULT hr = D3DX10CreateEffectFromFile(L"Simple.fx", 
    NULL, 
    NULL, 
    "fx_4_0",
    //D3D10_SHADER_ENABLE_STRICTNESS || D3D10_SHADER_WARNINGS_ARE_ERRORS, 
    0,
    0, 
    pD3DDevice, 
    NULL, 
    NULL, 
    &modelObject->pEffect,
     &l_pBlob_Errors ,
     NULL); 

if (FAILED(hr))
{
       LPVOID l_pError = NULL;
    if( l_pBlob_Errors )
    {
          l_pError = l_pBlob_Errors->GetBufferPointer();
          char* myChar = (char*)l_pError;
          MessageBoxA(0, myChar, 0,0);
           }
else
{
     MessageBox(0,0,0,0);
        }
    return false;
 }

シェーダーにエラーが含まれているとは思わないため、開発用 PC で適切にコンパイルされます。

matrix Projection;

// PS_INPUT - input variables to the pixel shader
// This struct is created and fill in by the 
// vertex shader
struct PS_INPUT
{
float4 Pos : SV_POSITION;
float4 Color : COLOR0;
};

PS_INPUT VS(float4 Pos : POSITION, float4 Color : COLOR)
{
PS_INPUT psInput;

// Pass through both the position and the color
psInput.Pos = mul( Pos, Projection );
psInput.Color = Color;

return psInput;
}

float4 PS(PS_INPUT psInput) : SV_Target
{
return psInput.Color;
}

// Define the technique
technique10 Render
{
pass P0
{
    SetVertexShader( CompileShader( vs_4_0, VS() ) );
    SetGeometryShader( NULL );
    SetPixelShader( CompileShader( ps_4_0, PS() ) );
}
}

L"simple.fx" は、std::ifstream を使用して読み取ることができるため、適切なファイルパスでもあります。数時間検索しましたが、答えが見つかりませんでした。関連するすべての質問は、開発マシンで正しくコンパイルされるエフェクト ファイルのエラーであることが判明しました。

エフェクト ファイルにエラーを追加して開発マシンで実行すると、メッセージ ボックスにエラーが表示されます。他のPCで同じエラーコードを実行すると、エラーは出力されず、l_pBlob_Errors == 0

それはおそらく本当に初心者で簡単なことですが、何が起こっているのか理解できません。どんな助けでも大歓迎です

4

1 に答える 1