C++ 从内存创建效果时出错(c+;+;,directx 11)

C++ 从内存创建效果时出错(c+;+;,directx 11),c++,directx,C++,Directx,我试图从我编译的着色器中创建一个效果变量,这样我就可以引用变量并设置它们的值,但是出现了一些问题。我从Frank Luna的《3D游戏编程入门》中提取了一个片段,并在必要时进行了调整 HRESULT hr; DWORD shaderFlags = 0; ID3D10Blob * compiledShader = 0; ID3D10Blob * compilationMessages = 0; hr = D3DX11CompileFromFile(L"cubemap.fx", 0, 0, 0, "

我试图从我编译的着色器中创建一个效果变量,这样我就可以引用变量并设置它们的值,但是出现了一些问题。我从Frank Luna的《3D游戏编程入门》中提取了一个片段,并在必要时进行了调整

HRESULT hr;
DWORD shaderFlags = 0;
ID3D10Blob * compiledShader = 0;
ID3D10Blob * compilationMessages = 0;
hr = D3DX11CompileFromFile(L"cubemap.fx", 0, 0, 0, "fx_4_0", shaderFlags, 0, 0, &compiledShader, &compilationMessages, 0);
if (FAILED(hr))
{
    MessageBox(nullptr,
        L"Failed to compile cubemap shader D3DX11", L"Error", MB_OK);
    return hr;
}
ID3DX11Effect * shader;
hr = D3DX11CreateEffectFromMemory(
    compiledShader->GetBufferPointer(), compiledShader->GetBufferSize(), 0, device, &shader);
if (FAILED(hr))
{
    MessageBox(nullptr,
        L"Could not create effect from memory", L"Error", MB_OK);
    return hr;
}
它抛出了错误

Could not create effect from memory

HR = E_FAIL

Attempted to create a device with the debug layer enabled and the layer is not installed.
我试着调试一下并重建效果库,但仍然一无所获。有人能发现这个问题或告诉我如何找到原因吗

编辑:我认为问题在于调试层。我尝试使用(D3D10和D3D11)启用调试层

我的设备标志还启用调试模式

    UINT createDeviceFlags = 0;

#if defined (_DEBUG) || defined(DEBUG)
    createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG;
#endif
默认情况下,我使用的是Windows 8.1,Visual Studio使用的是Windows 8.1 SDK,但我也引用了2010年6月的旧SDK,这就是问题所在。上面我尝试使用的方法来自旧的SDK

我相信所有需要的DLL都是为调试层安装的。

我还有旧sdk的DLL(我用来引用旧方法的那个)

已解决


我下载了最新版本的Effects11,并使用兼容的fx版本(fx_5_0)编译着色器

拖动最新版本的Effects 11似乎可以解决问题。

拖动最新版本的Effects 11似乎可以解决问题。

您没有告诉我们
hr
的确切值。您的编辑仍然没有告诉我们
hr
是什么:
失败的
宏只告诉我们
hr<0
试图创建启用调试层的设备,但该层未安装。
因此,实际错误的文本是否比
失败(hr)
更详细?@PaulMcKenzie我对其进行了一些阅读并进行了一些更改,但仍在发生。设备标志还启用调试模式。有什么我需要安装的吗?你应该从获得最新版本的特效11开始。其次,确保您的项目使用了正确的包含顺序,以便将旧的传统DirectX SDK与Windows 8.1 SDK混合使用。请参阅。您没有告诉我们
hr
的确切值。您的编辑仍然没有告诉我们
hr
是什么:
失败的
宏只告诉我们
hr<0
试图创建一个启用了调试层的设备,但该层没有安装。
实际错误的文本也给出了错误信息你知道的不仅仅是一个
失败(hr)
?@PaulMcKenzie我读了一点,做了一些修改,但仍然在发生。设备标志还启用调试模式。有什么我需要安装的吗?你应该从获得最新版本的特效11开始。其次,确保您的项目使用了正确的包含顺序,以便将旧的传统DirectX SDK与Windows 8.1 SDK混合使用。看见
    UINT createDeviceFlags = 0;

#if defined (_DEBUG) || defined(DEBUG)
    createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG;
#endif