Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Visual Studio 2012中使用DirectX Effect11_Directx_Visual Studio 2012 - Fatal编程技术网

在Visual Studio 2012中使用DirectX Effect11

在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文件。

我最近更新到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)路径之前。本章将对这一点进行详细介绍。