The*_*bit 2 c++ directx-11 d3dx direct3d11 visual-studio-2013
我正在尝试学习DirectX 11,并且正在使用Visual Studio 2013 for Windows 7编写一个小应用程序.我正在阅读"使用DirectX 11进行3D游戏编程简介"一书,到目前为止,一切都很顺利.我刚刚介绍了本书的部分内容,其中显示了BoxApp示例,我正在尝试在我的应用程序中实现类似的代码,以便更好地了解最新情况.
我遇到了示例代码中使用的以下不推荐使用的库函数的问题:
D3DX11CompileFromFile(....);
D3DX11CreateEffectFromMemory(...);
Run Code Online (Sandbox Code Playgroud)
首先,只是为了看看我是否理解为什么这些不再可用,我对这些函数不再存在的理解是,对于Windows 8,不推荐使用D3DX头文件和库.最初它们是DirectX SDK中提供的辅助库. Dx9,然后由Os提供Dx10,然后弃用Dx11.1(2)?
现在我的主要问题是如何在没有弃用的D3DX标题的情况下编译着色器和效果?我对这个问题的正确方法感到有些困惑.
对我来说似乎有两种选择:
就像我说的那样,我不太确定哪种选择最好(或者即使有更好的替代选择).我的理解是Effects11更多地用于支持需要移植到Dx11的旧版Dx10.由于我没有任何Dx10代码移植,我对这种支持并不太感兴趣,我对Windows 8中的Metro应用程序支持并不太感兴趣(我认为这对他们来说是正确的术语?)或者如果D3DCompiler路径将意味着支持地铁应用程序,然后我想这是可取的.
无论如何,任何建议或见解将不胜感激.提前致谢.
好吧,它可能有助于了解Direct3DX实用程序库(D3DX)的历史.它最初作为DirectX 7 SDK的一部分作为静态库提供,您可以直接链接到您的应用程序中.它涵盖了许多与现在相同的功能,但值得注意的是它不支持效果,因为在Direct3D 8之前不会引入着色器.
这一切都很顺利,直到有一天微软认为静态库是一个很大的安全漏洞.这可能是因为在GDI +中发现了一些令人讨厌的错误,导致许多使用GDI +的应用程序容易受到与格式错误的图像相关的攻击.即使GDI +作为DLL发布,使用它的每个应用程序都会在自己的安装目录中安装自己的副本.这意味着微软不能简单地使用Windows更新修补GDI + DLL,使用它的每个应用程序都必须创建自己的补丁并将其分发给用户.
所以微软决定向开发人员发送二进制代码以包含他们的应用程序是一个错误.Microsoft提供的任何二进制代码都必须通过Windows Update进行更新.这意味着不再有共享库和对如何重新分发和安装DLL的新限制.这就是在重新分发D3DX DLL时需要使用DirectX运行时安装程序的原因.(这也是为什么Visual Studio具有涉及带有可再发行DLL的清单的所有复杂要求的原因.)
但问题在于,它导致Microsoft每次更改时都必须创建新版本的D3DX DLL,几乎每次他们发布新版本的SDK时.每个新DLL都不向后兼容旧DLL,因此它有一个新名称.如果你查看你的system32目录,你可能会发现几十个不同的D3DX DLL.
(显然,D3DX中只有一个安全漏洞被公开,CVE-2006-4183.尽管我已经知道这只是在后续版本的SDK中修复了,但是没有发布修补程序来修复旧版本D3DX DLL中的错误. )
最终,微软决定停止发布新版本的DirectX SDK并使其成为Windows SDK的一部分.除了D3DX之外的所有东西都是如此,因此就微软而言它几乎已经死了.无需维护,无需改进,无需更换.
然后有一天微软决定基本上开源D3DX库,因为我不知道.所以我们几乎回到了我们开始的地方,应用程序将库直接链接到它们的可执行文件中.除了现在它是开源的,而不是二进制文件,因此任何与安全相关的错误都不是微软的问题.
所以你基本上有四种选择:
第一个选项意味着您可能需要将DirectX redist与安装程序捆绑在一起.让它工作更新版本的Visual Studio也是一个相当复杂的过程.第二种选择意味着您最终有责任让它发挥作用.第三种选择也是如此,它可能还有很多工作要做.第四个选项可能不存在.所以我认为作为一个新的Direct3D程序员,今天最好与开源库一起使用.
另一个选择是使用已经建立的游戏引擎,如虚幻或Unity,但我假设你已经打折了这种可能性.
| 归档时间: |
|
| 查看次数: |
2957 次 |
| 最近记录: |