【问题标题】:Using DirectX Effect11 with Visual Studio 2012在 Visual Studio 2012 中使用 DirectX Effect11
【发布时间】:2012-09-23 03:23:14
【问题描述】:

我最近更新到 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 和 DirectX SDK 中的 d3dx11.lib。也许我不应该混合它们?但是,当我混合它们时,其他一切都可以正常工作,除了效果文件的创建。

任何帮助将不胜感激。

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

【问题讨论】:

  • “Visual Studio 2012”不是编程语言;它是一种可与多种不同语言一起使用的开发工具。您使用的是什么特定语言?失败的具体代码是什么?
  • 对不起,应该让自己更清楚。我使用 C++ 作为编程语言。具体代码是 D3DX11CreateEffectFromMemory 函数(如 vini 为我高亮显示的那样)。它返回“未找到接口”错误。

标签: directx visual-studio-2012


【解决方案1】:

D3DX 库已被最新版本的 DirectX 11 (Windows 8) 弃用。见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

【讨论】:

  • 好吧,DirectXTK 似乎提供了很多功能。顺便说一句,如果有人感兴趣,我决定用单独的着色器处理所有事情
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    这可能是由 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。

    【讨论】:

    • 对于 VS 2012/VS 2013,因为它们使用的是 Windows 8.x SDK,重要的是您反转这个传统顺序并将 Microsoft SDK 包含/lib 路径 $(DXSDK_DIR) 路径之前。 MSDN 对此进行了详细介绍。
    【解决方案4】:

    在先前版本的 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 文件放在我们所有项目共享代码的公共目录中(有关示例项目组织的描述,请参见“简介”)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-20
      • 2023-03-29
      • 2012-09-05
      • 2013-06-12
      • 1970-01-01
      相关资源
      最近更新 更多