【问题标题】:New to Direct3D programming: 11 vs 12Direct3D 编程新手:11 与 12
【发布时间】:2016-03-03 09:19:27
【问题描述】:

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

假设从零开始并且对 C++ 有一定的了解,我应该走哪条路?

【问题讨论】:

    标签: direct3d direct3d11 direct3d12


    【解决方案1】:

    我已经回复了this question before,所以你应该看看那个帖子。

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

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

    如果您对 Direct3D 完全陌生,我强烈建议您从使用 Direct3D 11 的 DirectX Tool Kit 及其 tutorials 开始。一旦您掌握了这一点,您应该可以在 Direct3D 12对您的应用有意义。

    有大量关于 Direct3D 11 的教程、示例、书籍和其他教育材料。Direct3D 12 材料有点薄,主要由 DirectX-Graphics-Samples GitHub 存储库上的内容组成。我目前正在努力将 DirectX 12 支持添加到 DirectX 工具包,但即使它可用,您也会发现从 Direct3D 11 开始比尝试先跳到 DirectX 容易得多12.

    另一件事要记住 w.r.t.至 DirectX 12:仅在启用了 DirectX 12 的视频驱动程序的 Windows 10 系统上受支持。这包括大多数Direct3D Feature Level 11.0+ 硬件,包括 NVIDIA Fermi、Kepler、Maxwell; AMD GCN;和英特尔的 Haswell、Broadwell 和 Skylake。但是,这不包括任何较旧的视频卡。请参阅DirectX 12: A Major Stride for GamingAMD DirectX 12 TechnologyDirectX Developer Blog

    更新: DirectX Tool Kit for DirectX 12 现已推出,包括 basic tutorials。在处理 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 RaytracingDirectMLShader Model 6,则需要使用 DirectX 12 而不是 DirectX 11。当然,大多数游戏开发人员实际上使用现有的 3rd 引擎,如 Unity 或 Unreal Engine,它们抽象API,因此更多的是目标平台的问题,而不是这些情况的可用性。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多