Direct3D 编程新手:11 对 12

New to Direct3D programming: 11 vs 12

对于 D3D 编程的新手,是直接学习 D3D12 还是在深入 D3D12 之前必须先学习 D3D11?

假设从零开始并且具备良好的 C++ 知识,我应该走哪条路?

我已经回答了 所以你应该看看那个 post。

简而言之,Direct3D 12 应该被认为是“DirectX Extreme Pro”。它假设您已经精通 Direct3D 11 运行时的工作原理,基本上可以自己编写。它旨在允许中间件引擎和低级图形开发人员最大限度地控制 GPU 的行为。 Direct3D 11 也是一种“低级”图形 API,但 DirectX 12 具有如此薄的抽象,以至于现代 GPU 的许多复杂性直接暴露给应用程序员; Direct3D 11 向您隐藏的复杂性。

Direct3D 12 非常强大,但要实现非常低的 CPU 开销,API 和运行时几乎无法帮助您。这暴露了驱动程序的内存模型并使 GPU/CPU 同步成为一个有点类似于 CPU.

上的 'lock-free programming' 的手动过程

如果您是 Direct3D 的新手,我强烈建议您从 DirectX Tool Kit and its tutorials 使用 Direct3D 11 开始。一旦您掌握了它,您就可以在 Direct3D 12对您的应用有意义。

Direct3D 11 上有大量教程、示例、书籍和其他教育 material。Direct3D 12 material 有点薄,主要由 DirectX-Graphics-Samples GitHub 回购。我目前正在努力为 DirectX 工具包 添加 DirectX 12 支持,但即使它可用,您也会发现从 Direct3D 11 开始比尝试跳脚要容易得多-首先进入 DirectX 12.

要记住的另一件事 w.r.t。到 DirectX 12:它仅在支持 DirectX 12 的视频驱动程序的 Windows 10 系统上受支持。这包括大多数 Direct3D Feature Level 11.0+ hardware including NVIDIA Fermi, Kepler, Maxwell; AMD GCN; and Intel's Haswell, Broadwell, and Skylake. This, however, does not include any older video cards. See DirectX 12: A Major Stride for Gaming, AMD DirectX 12 Technology, and DirectX Developer Blog

更新: DirectX Tool Kit for DirectX 12 is now available including basic tutorials。在学习 Direct3D 12 之前,您应该专注于学习 Direct3D 11。DirectX 12 是 API 专为图形专家设计的,对新手来说相当苛刻。 DirectX 工具包 有助于柔化边缘,但作用不大。一般来说,除非您达到 Direct3D 11 的 CPU 性能限制,否则无需使用 Direct3D 12。也就是说,对于图形专家来说,值得学习的是更好地了解底层 GPU 硬件的工作原理,或者那些想要将硬件推向性能极限。

更新 2: 根据最近的一些经验,如果您主要使用 DirectX 工具包中提供的功能(sprites、spritefont、基本原语和模型,等),从 DirectX 11 版本切换到 DirectX 12 版本相当简单。此外,如果您想使用 DirectX Raytracing, DirectML, or Shader Model 6,则需要使用 DirectX 12 而不是 DirectX 11。当然,大多数游戏开发人员实际上使用现有的第 3 方引擎,如 Unity 或 Unreal Engine,它们抽象了 API 所以这更多是目标平台的问题,而不是这些情况下的可用性问题。