【问题标题】:Direct3D Static LinkingDirect3D 静态链接
【发布时间】:2014-12-09 05:01:55
【问题描述】:

有什么方法可以静态链接 Direct3D,使程序不依赖任何 D3D DLL? Direct3D 9 及更高版本似乎不可能(尽管我想被证明是错误的),但我找不到旧版本的任何信息。我正在制作一个简单的小游戏,我真的不想要强制安装程序,但我想使用 Direct3D。

【问题讨论】:

  • 我不认为你可以而且你肯定不想......主要是为了在系统范围内进行简单的更新和修复,这样你的代码也可以从中受益。

标签: direct3d


【解决方案1】:

不,从来没有任何时候您可以将任何版本的 Direct3D 静态链接到您的应用程序中。对于 OpenGL 也是如此。

如果你问的是“我如何创建一个不需要安装程序的 Direct3D 应用程序?”,那么这实际上很容易实现,只要你放弃尝试支持旧版本和无关版本的 Windows 操作系统。

最简单的做法是针对 DirectX 11.0。您的系统要求如下:

Windows 8.1、Windows 8.0、Windows 7、带有 KB 971644 的 Windows Vista Service Pack 2

Direct3D 11 Deployment for Game Developers

  • 使用 Direct3D 11.0 API
  • 使用静态链接的 DirectXMath、DirectX Tool KitDirectXTex 和/或 DirectXMesh
  • 如果需要,您可以使用Effects 11,因为它也是静态链接的。
  • 避免使用 D3DX9、D3DX10 和 D3DX11
  • 使用 XInput 9.1.0;避免使用 XInput 1.3(在 Windows 8.0+ 上,您可以使用 XInput 1.4
  • 避免使用 XAudio2.7(在 Windows 8.0+ 上,您可以使用 XAudio 2.8
  • 避免使用 XACT
  • 如果您使用 VS 2010 或更高版本,则可以通过简单的副本将所需的 VCREDIST 文件与您的应用程序并排部署
  • 如果您使用 D3DCompile 的 Windows 8.x SDK 版本,您可以通过一个简单的副本将它与您的应用程序并排部署。

音频是这里最大的挑战,因为 XAudio 2.8 仅适用于 Windows 8.0 或更高版本,而 XAudio 2.7 需要 DirectSetup 重新部署才能部署。大多数音频中间件解决方案直接在 Windows Vista+ 上使用 WASAPI,因此这些都是合理的选择。您可以使用旧版 DirectSound8,其标头至少在 VS 2012/VS 2013 附带的 Windows 8.x SDK 中。

如果您需要 Windows XP 支持,则需要 Windows XP Service Pack 3 作为最低操作系统。这将包括作为操作系统一部分的 DirectX 9.0c 和 WIC 组件。

  • 您需要使用 Direct3D 9 和 DirectSound8
  • 完全避免使用 D3DX9,因此所有 HLSL 着色器都必须离线预构建,并且您不能使用效果 (FX9) 系统或 D3DXMath。
  • 如果您使用的是 VS 2012/VS 2013,您可以使用 *_xp 平台工具集来定位 Windows XP,但请记住,它使用的是 Windows 7.1A SDK 而不是 Windows 8.x SDK,因此它对DirectX development
  • 在 Windows 8.0 或更高版本上调试 Direct3D 9 也是一个巨大的痛苦,因为没有可用的开发人员运行时。

所有这些都假设您使用的是 C++。使用 .NET 是不现实的,因为 .NET 的部署故事相当复杂。如果您需要 Windows Vista+ 或更高版本,理论上您可以使用 .NET 2.0,但它可能需要在某些版本的操作系统上启用 Windows 功能,并且您不能指望任何版本的 .NET 出现在 Windows XP 上。 .NET 4.0 在 Windows 8.0+ 上默认开启,但对 .NET 3.5 及更早版本的支持默认关闭。但是,所有从 C# 中使用 DirectX 都需要额外的程序集,这些程序集本身可能依赖于旧版 DirectSetup 部署。

【讨论】:

    猜你喜欢
    • 2010-12-31
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多