Direct3D 编程新手:11 与 12
Posted
技术标签:
【中文标题】Direct3D 编程新手:11 与 12【英文标题】:New to Direct3D programming: 11 vs 12 【发布时间】:2016-03-03 09:19:27 【问题描述】:对于 D3D 编程的新手,应该直接学习 D3D12,还是在深入 D3D12 之前必须先学习 D3D11?
假设从零开始并且对 C++ 有一定的了解,我应该走哪条路?
【问题讨论】:
【参考方案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 Gaming、AMD DirectX 12 Technology 和 DirectX 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 Raytracing、DirectML 或Shader Model 6,则需要使用 DirectX 12 而不是 DirectX 11。当然,大多数游戏开发人员实际上使用现有的 3rd 引擎,如 Unity 或 Unreal Engine,它们抽象API,因此更多的是目标平台的问题,而不是这些情况的可用性。
【讨论】:
w.r.t 的用途是什么? with respect to以上是关于Direct3D 编程新手:11 与 12的主要内容,如果未能解决你的问题,请参考以下文章
《逐梦旅程 WINDOWS游戏编程之从零开始》笔记5——Direct3D编程基础
《逐梦旅程 WINDOWS游戏编程之从零开始》笔记6——Direct3D中的顶点缓存和索引缓存
Direct3D中 SetStreamSource 函数与数据流
Direct3D 11 Tutorial 3: Shaders and Effect System_Direct3D 11 教程3:着色器和效果系统