C++ 是否使用D3DX11CreateEffectFromMemory创建D3DCompileFromFile?

C++ 是否使用D3DX11CreateEffectFromMemory创建D3DCompileFromFile?,c++,directx,directx-11,C++,Directx,Directx 11,我有一个使用directX 9和10的旧代码,并使用directX 11和Effects 11(使用D3DX11)构建了它。一切正常。 我决定去掉任何不推荐的代码,只使用D3D库。但是,我仍然希望使用效果框架 我将代码转换为使用DirectXMath(D3DXVECTOR4到XMFLOAT4等)。我更改了de D3DX函数等。 我的代码可以编译,但在运行时D3DX11CreateEffectFromMemory返回一个错误。我想知道函数是否没有正确读取DXUTCompileFromFile返回的

我有一个使用directX 9和10的旧代码,并使用directX 11和Effects 11(使用D3DX11)构建了它。一切正常。 我决定去掉任何不推荐的代码,只使用D3D库。但是,我仍然希望使用效果框架

我将代码转换为使用DirectXMath(D3DXVECTOR4到XMFLOAT4等)。我更改了de D3DX函数等。 我的代码可以编译,但在运行时D3DX11CreateEffectFromMemory返回一个错误。我想知道函数是否没有正确读取DXUTCompileFromFile返回的二进制代码?我是否仍应使用D3DX11CompileFromFile(我认为它已被弃用)?但是我必须包括d3dx11.h

谢谢你的帮助

ID3DBlob* compileShader = 0;
ID3DBlob* compilationMsgs = 0;

V_RETURN( DXUTCompileFromFile(L"EffectsFile.fx", pShaderMacros, NULL, "fx_5_0", dwShaderFlags, 0, &compileShader) );

V_RETURN( D3DX11CreateEffectFromMemory( compileShader->GetBufferPointer(),
    compileShader->GetBufferSize(), 0, pd3dDevice, &g_pEffect) );

compileShader->Release();

显然问题出在我的Effects11.lib上。 我猜它是使用2010年6月的工具包编译的


按照此处的说明操作时,一切正常。

返回的错误是什么?您确定
compileShader
非空吗?您还可以尝试使用
fxc.exe
离线编译效果,并直接加载(与在运行时编译相比),然后查看是否有效。不管是哪种方式,请记住效果框架也不推荐使用,不仅仅是D3DX。@MooseBoys谢谢你,正如你所看到的,我发现了我的问题,它来自效果库本身。关于特效框架,我知道它被弃用了,但同时在这个程序中使用了太多的技术,以至于我对将所有内容分解为着色器的想法感到不知所措。。。(+使用effects方法访问着色器变量非常方便)。