在Visual Studio 2012中使用DirectX Effect11

问题描述:

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

任何帮助,将不胜感激。

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

+0

“Visual Studio 2012”不是一种编程语言,它是一种可与多种不同语言结合使用的开发工具。你使用什么特定的语言?什么是特定的代码失败? –

+0

对不起,应该让自己更清楚。我使用C++作为编程语言。具体代码是D3DX11CreateEffectFromMemory函数(正如vini为我强调的那样)。它返回一个“找不到接口”的错误。 – l3utterfly

D3DX Library已被弃用,用于最新版本的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以获取更多信息。

+0

好吧,DirectXTK似乎提供了很多功能。顺便说一句,如果任何人有兴趣,我决定用独立的着色器处理所有东西。 – l3utterfly

效果11已移至https://fx11.codeplex.com/,您需要编译并链接自己。

DirectXTK不提供effect11接口,但只有简单的效果

这可能是由于D3D库冲突造成的。

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

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

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

+0

由于使用Windows 8.x SDK,因此使用VS 2012/VS 2013时,重要的是*反转*这种传统顺序并将Microsoft SDK包含/ lib路径*在$(DXSDK_DIR)路径之前。这在[MSDN](http://msdn.microsoft.com/en-us/library/windows/desktop/ee663275.aspx)中有详细介绍。 –

在以前的Direct3D版本中,一旦与D3D10库链接后,效果框架即可开箱即用。在Direct3D 11中,效果框架已转移到D3DX库中,并且必须包含单独的头文件(d3dx11Effect.h)并链接到单独的库(D3DX11Effects.libfor发布版本和D3DX11EffectsD.libfor调试版本)。此外,在Direct3D 11中,它们会为您提供效果库代码的完整源代码(DirectX SDK \ Samples \ C++ \ Effects11)。因此,您可以根据自己的需要修改效果框架。在本书中,我们只会按原样使用效果框架,不作任何修改。为了使用该库,您需要首先在发布和调试模式下构建Effects11项目以生成D3DX11Effects.lib和D3DX11EffectsD.libfiles;除非更新了效果框架(例如,新版本的DirectX SDK可能会更新这些文件,因此您可能需要重新生成.lib文件以获取最新版本),否则只需执行一次此操作。 d3dx11Effect。h头文件可以在DirectX SDK \ Samples \ C++ \ Effects11 \ Inc中找到。

对于我们的示例项目中,我们在d3dx11Effect.h,D3DX11EffectsD.lib,并在Commondirectory D3DX11Effects.libfiles我们所有的项目份额代码(见“简介”示例项目组织的描述) 。