モデルをロードして、照明などを使わずに表示する小さなアプリケーションがあります。リリースをビルドして別のコンピューターで実行しようとしましたが、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
それはおそらく本当に初心者で簡単なことですが、何が起こっているのか理解できません。どんな助けでも大歓迎です