3

我最近更新到 Visual Studio 2012 Ultimate。我以前使用 DirectX 2010 年 6 月 11 日 SDK 进行编程,并希望继续使用 Visual Studio 2012 进行编程。但是,我发现 VS2012 带有自己的 DirectX SDK(在 Windows Kit 8.0 中)并且我一直在尝试迁移我的代码使用较新版本的 d3d11。一切都很顺利,直到我尝试在我的项目中使用效果文件(.fx 文件)。我必须使用 VS2012 在 DirectX SDK 中编译 Effects11 示例,并在我的项目中链接 lib 文件。那也很顺利。但是,当我编译我的项目时,该函数D3DX11CreateEffectFromMemory返回一个E_NOINTERFACE error (no such interface is supported). 谁能告诉我这是为什么?请注意,我使用的是 Windows Kit 中的 d3d11.lib 和d3dx11.lib来自 DirectX SDK。也许我不应该混合它们?但是,当我混合它们时,其他一切都正常,除了效果文件创建。

任何帮助,将不胜感激。

PS我不知道这是否有帮助,但你知道,如果我在项目设置中添加一个额外的库目录,"DirectXSDKInstallPath\lib\x86\"它就可以工作。这是为什么?这是否意味着我正在使用旧版本的库?这将给出大量关于 winerror.h 中重新定义的标头的警告

4

4 回答 4

1

Effect11 已经移到https://fx11.codeplex.com/了,需要自己编译链接。

DirectXTK 不提供 effect11 接口,只提供简化效果

于 2013-09-19T02:26:43.720 回答
1

最新版本的 DirectX 11 (Windows 8) 已弃用 D3DX 库。请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/bb172965(v=vs.85).aspx

效果现在以不同的方式处理。您可以编写自己的库来加载效果或使用 DirectX 工具包 (DirectXTK):http ://directxtk.codeplex.com/

Microsoft 已在其网站上推荐此工具包,有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/ee663275.aspx

于 2013-01-10T20:39:56.080 回答
0

这可能是由 d3d 库冲突引起的。

确保您使用的是什么 d3d 库。因为有 2 个不同的 d3d 库。

一个在 DXSDK_DIR\Lib\x86 或 \x64 中,一个在 c:\program files(x86?)\Microsoft SDKs 中。

如果您使用的是 DXSDK,则在包含目录和库目录字段中分别在 Microsoft SDK 的包含、libs 目录之前传递 $(DXSDK_DIR)Include $(DXSDK_DIR)Lib\x86。

于 2013-10-24T03:51:03.040 回答
0

在以前版本的 Direct3D 中,一旦您与 D3D10 库链接,效果框架就可以立即使用。在 Direct3D 11 中,效果框架已移至 D3DX 库,您必须包含单独的头文件 (d3dx11Effect.h) 并与单独的库链接(D3DX11Effects.lib 用于发布版本,D3DX11EffectsD.lib 用于调试版本)。

此外,在 Direct3D 11 中,它们为您提供了效果库代码的完整源代码 (DirectX SDK\Samples\C++ \Effects11)。因此,您可以根据自己的需要修改效果框架。在本书中,我们将只使用效果框架,无需修改。为了使用该库,您需要首先在发布和调试模式下构建 Effects11 项目以生成 D3DX11Effects.lib 和 D3DX11EffectsD.lib 文件;除非更新了效果框架,否则您只需要这样做一次(例如,新版本的 DirectX SDK 可能会更新这些文件,因此您可能需要重新构建 .lib 文件以获得最新版本)。d3dx11Effect.h 头文件可以在 DirectX SDK\Samples\C++\Effects11\Inc 中找到。

对于我们的示例项目,我们将 d3dx11Effect.h、D3DX11EffectsD.lib 和 D3DX11Effects.lib 文件放在我们所有项目共享代码的公共目录中(有关示例项目组织的描述,请参见“简介”)。

于 2016-04-29T01:58:07.827 回答