对于 D3D 编程的新手,应该直接学习 D3D12 还是在深入研究 D3D12 之前需要 D3D11?
假设从头开始并且对 C++ 有良好的了解,我应该走哪条路?
对于 D3D 编程的新手,应该直接学习 D3D12 还是在深入研究 D3D12 之前需要 D3D11?
假设从头开始并且对 C++ 有良好的了解,我应该走哪条路?
我之前回答过这个问题,所以你应该看看那个帖子。
简而言之,Direct3D 12 应该被认为是“DirectX Extreme Pro”。它假定您已经是 Direct3D 11 运行时如何工作的专家,以至于您基本上可以自己编写它。它旨在允许中间件引擎和低级图形开发人员最大限度地控制 GPU 的行为。Direct3D 11 也是一个“低级”图形 API,但 DirectX 12 的抽象如此之薄,以至于现代 GPU 的许多复杂性直接暴露给应用程序程序员;Direct3D 11 对您隐藏的复杂性。
Direct3D 12 非常强大,但要实现非常低的 CPU 开销,API 和运行时对您的帮助很少。这暴露了驱动程序的内存模型,并使 GPU/CPU 同步成为一个手动过程,有点类似于 CPU 上的“无锁编程”。
如果您对 Direct3D 完全陌生,我强烈建议您从DirectX Tool Kit及其使用 Direct3D 11 的教程开始。一旦您掌握了这一点,当它对您的应用程序有意义时,您应该可以迁移到 Direct3D 12 .
有大量关于 Direct3D 11 的教程、示例、书籍和其他教育材料。Direct3D 12 材料有点薄,主要由DirectX-Graphics-Samples GitHub repo 上的内容组成。我目前正在努力将 DirectX 12 支持添加到DirectX Tool Kit,但即使它可用,您也会发现从 Direct3D 11 开始比尝试从脚先跳到 DirectX 12 容易得多。
关于 DirectX 12 要记住的另一件事:它仅在启用了 DirectX 12 的视频驱动程序的 Windows 10 系统上受支持。这包括大多数Direct3D Feature Level 11.0+ 硬件,包括 NVIDIA Fermi、Kepler、Maxwell;AMD GCN;和英特尔的 Haswell、Broadwell 和 Skylake。但是,这不包括任何较旧的视频卡。请参阅DirectX 12:游戏的一大进步、AMD DirectX 12 技术和DirectX 开发人员博客
更新: DirectX 12的 DirectX 工具包现已推出,包括基本教程。在处理 Direct3D 12 之前,您应该专注于学习 Direct3D 11。DirectX 12 是为图形专家设计的 API,对新手来说非常无情。DirectX Tool Kit有助于稍微软化边缘,但不多。一般来说,除非你达到 Direct3D 11 的 CPU 性能限制,否则没有必要使用 Direct3D 12。也就是说,对于图形专家来说,值得学习更好地了解底层 GPU 硬件的工作原理,或者那些想要推动硬件性能的极限。
UPDATE 2:我应该提一下,根据最近的一些经验,如果您主要使用 DirectX Tool Kit 中提供的功能(sprites、spritefont、基本图元和模型等),从 DirectX 11 切换到 DirectX 12 版本是公平的直截了当。此外,如果您想使用DirectX Raytracing、DirectML或Shader Model 6,则需要使用 DirectX 12 而不是 DirectX 11。当然,大多数游戏开发人员实际上使用现有的 3rd 方引擎,如 Unity 或 Unreal Engine,它们抽象了 API,因此这更多的是您的目标平台的问题,而不是这些情况的可用性。