gpt4 book ai didi

c++ - D3DX10CreateEffectFromFile 在另一台计算机上返回 E_FAIL

转载 作者:太空宇宙 更新时间:2023-11-04 14:11:56 26 4
gpt4 key购买 nike

我有一个小型应用程序,可以加载模型并在没有灯光或其他任何东西的情况下显示它。我一直在尝试构建一个版本并在另一台计算机上运行它,但 D3DX10CreateEffectFromFile 一直返回 E_FAIL。

Effect 文件编译完美,在我的开发机器上运行良好,但在其他 PC 上却不行。个人电脑的规范并没有那么不同。都是Windows7,都有GeForce显卡。唯一真正的区别是我尝试运行该版本的计算机具有兼容 DirectX 11 的显卡。

包含我的发布版本的文件夹如下所示...

G:\模型加载器

d3dx10_43.dll

模型查看器.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;
}

我认为着色器不包含任何错误,因为它可以在我的开发电脑上正确编译

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 从中读取。我已经搜索了几个小时,一直找不到答案,所有相关问题都证明是 Effect 文件中的一个错误,它可以在我的开发机器上编译。

当我向 Effect 文件添加错误并在我的开发机器上运行它时,该错误会显示在消息框中。当我在我的另一台电脑上运行相同的错误代码时,没有打印错误并且 l_pBlob_Errors == 0

它可能真的是新手和简单的东西,但我只是不明白发生了什么。任何帮助将不胜感激

最佳答案

问题的根本原因是您依赖于 d3dx10_43.dll 和d3dcompile_43.dll。 D3DX10 开始使用 D3DCompile,而不是在 DirectX SDK(2007 年 4 月)版本中使用另一个 HLSL 编译器拷贝。看这个post还有这个post .

另请记住,许可证不允许您将 D3DX10*.DLL 或 D3DCompiler #43 与您的应用程序并排复制。您必须使用旧版 DirectSetup REDIST。您还应该使用 refreshed version而不是 DirectX SDK 随附的版本(2010 年 6 月)。

当然,更好的解决方案是放弃 Direct3D 10,移至 Direct3D 11,并避免使用 legacy DirectX SDK完全......另外,许可证允许您将 D3DCompile #46 或 #47 与您的应用程序并排复制。

关于c++ - D3DX10CreateEffectFromFile 在另一台计算机上返回 E_FAIL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13788391/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com