使用DirectX Effect11与Visual Studio 2012

3
我最近升级到了Visual Studio 2012 Ultimate。之前我一直在使用DirectX 11 June 2010 SDK 进行编程,现在我想继续使用Visual Studio 2012进行编程。但是,我发现VS2012自带了自己的DirectX SDK(位于Windows Kit 8.0中),我一直在尝试使用更新版本的d3d11迁移我的代码。一切都很顺利,直到我尝试在项目中使用.fx文件时出现问题。我必须在使用VS2012编译DirectX SDK中的Effects11示例并将lib文件链接到我的项目中。这也很顺利。然而,当我编译我的项目时,函数D3DX11CreateEffectFromMemory返回一个E_NOINTERFACE错误(不支持此类接口)。有人能告诉我为什么会这样吗?请注意,我正在使用来自Windows Kit的d3d11.lib和来自DirectX SDK的d3dx11.lib。也许我不应该混合它们?然而,当我混合它们时,除了效果文件创建以外,其他所有东西都正常工作。

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


“Visual Studio 2012”不是一种编程语言,而是一个开发工具,可以与多种不同的编程语言一起使用。您使用的是哪种特定的语言?出现问题的具体代码是什么? - Ken White
抱歉,我应该让自己更清楚明白。我正在使用C++作为编程语言。具体的代码是函数D3DX11CreateEffectFromMemory(正如vini友好地为我指出的)。它返回一个“未找到接口”的错误。 - l3utterfly
4个回答

1

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

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


1

好的,DirectXTK似乎提供了很多功能。顺便说一句,如果有人感兴趣,我决定使用单独的着色器来处理所有内容。 - l3utterfly

0
这可能是由d3d库冲突引起的。
确保使用了哪个d3d库,因为有两个不同的d3d库。
一个位于DXSDK_DIR\Lib\x86或\x64中,另一个在c:\program files(x86?)\Microsoft SDKs中。
如果您正在使用DXSDK,则在Include目录和Library目录字段中将$(DXSDK_DIR)Include $(DXSDK_DIR)Lib\x86放在Microsoft SDK的包含、库目录之前。

由于VS 2012/VS 2013使用Windows 8.x SDK,因此重要的是您需要反转传统顺序,并将Microsoft SDK的include/lib路径放在$(DXSDK_DIR)路径之前。这在MSDN中有详细介绍。 - Chuck Walbourn

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文件放置在所有项目共享代码的Common目录中(有关示例项目组织的描述,请参见“介绍”部分)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接