在Visual Studio 2012中使用DirectX Effect11
我最近更新到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文件。那也很好。但是,当我编译我的项目时,函数在Visual Studio 2012中使用DirectX Effect11,directx,visual-studio-2012,Directx,Visual Studio 2012,我最近更新到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\u NOINTERFACE错误(不支持这样的接口)
。有人能告诉我为什么吗?请注意,我使用的是Windows工具包中的d3d11.lib和DirectX SDK中的d3dx11.lib
。也许我不该把它们混在一起?但是,当我混合它们时,除了创建效果文件之外,其他一切都可以正常工作
任何帮助都将不胜感激
顺便说一句,我不知道这是否有帮助,但正如您所知,如果我在
“DirectXSDKInstallPath\lib\x86\”
的项目设置中添加一个额外的库目录,它就会起作用。为什么呢?这是否意味着我正在使用旧版本的库?这将给出大量关于winerror中重新定义的头的警告。对于最新版本的DirectX 11(Windows 8),已不推荐使用D3DX库。看
效果现在以不同的方式处理。您可以编写自己的库以加载效果或使用DirectX工具包(DirectXTK):
Microsoft已在其网站上推荐此工具包,有关详细信息,请参阅。Effect11已移动到,您需要自行编译并链接它
DirectXTK不提供effect11接口,只提供简化的效果,这可能是由d3d库冲突引起的 确保您使用的是什么d3d库。因为有两个不同的d3d库 一个在DXSDK_DIR\Lib\x86或\x64中,另一个在c:\program files(x86?)\Microsoft SDK中
如果您使用的是DXSDK,请在“包含目录”和“库目录”字段中分别将$(DXSDK_DIR)Include$(DXSDK_DIR)Lib\x86传递到Microsoft SDK的Include、libs目录之前。在早期版本的Direct3D中,一旦链接到D3D10库,效果框架就会立即生效。在Direct3D 11中,效果框架已移动到D3DX库中,您必须包含一个单独的头文件(d3dx11Effect.h)并链接到一个单独的库(D3DX11Effects.lib用于发布版本,D3DX11EffectsD.lib用于调试版本) 此外,在Direct3D 11中,它们为您提供了效果库代码的完整源代码(DirectX SDK\Samples\C++\Effects11)。因此,您可以根据自己的需要修改效果框架。在本书中,我们将只按原样使用效果框架,不做任何修改。为了使用该库,您需要首先在release和debug模式下构建Effects11项目,以生成D3DX11Effects.lib和D3DX11EffectsD.lib文件;除非更新了effects framework,否则您只需执行一次(例如,新版本的DirectX SDK可能会更新这些文件,因此您可能需要重新生成.lib文件以获得最新版本)。d3dx11Effect.h头文件可以在DirectX SDK\Samples\C++\Effects11\Inc中找到
对于我们的示例项目,我们将d3dx11Effect.h、D3DX11EffectsD.lib和D3DX11Effects.lib文件放在所有项目共享代码的Commondirectory中(有关示例项目组织的描述,请参见“简介”)。“Visual Studio 2012”不是一种编程语言;它是一种可与多种不同语言配合使用的开发工具。您使用的是什么特定语言?失败的具体代码是什么?对不起,我应该说得更清楚。我用C++作为编程语言。具体代码是函数D3DX11CreateEffectFromMemory(如vini为我特别强调的)。它返回一个“找不到接口”错误。好的,DirectXTK似乎提供了很多功能。顺便说一句,如果有人感兴趣,我决定使用VS 2012/VS 2013使用单独的着色器来处理所有事情,因为它们使用的是Windows 8.x SDK,重要的是要颠倒这种传统顺序,将Microsoft SDK include/lib路径放在$(DXSDK_DIR)路径之前。本章将对这一点进行详细介绍。