Direct3D编程新手:11与12的区别

14

对于一个D3D编程新手,是直接学习D3D12还是需要先学习D3D11再深入D3D12?

假设从零开始并具有C++的良好知识,应该选择哪种方式?

1个回答

31

我之前回答过这个问题,所以你应该看一下那篇文章。

简而言之,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的资料有点少,主要包括GitHub存储库DirectX-Graphics-Samples上的内容。我目前正在将DirectX Tool Kit添加到DirectX 12支持中,但即使它可用,您会发现从Direct3D 11开始比试图跳入DirectX 12更容易。

关于DirectX 12需要记住的另一件事:它仅支持启用DirectX 12视频驱动程序的Windows 10系统。这包括大多数Direct3D功能级别 11.0+的硬件,包括NVIDIA Fermi、Kepler、Maxwell;AMD GCN和Intel的Haswell、Broadwell和Skylake。然而,这不包括任何旧的视频卡。请参见DirectX 12: A Major Stride for GamingAMD DirectX 12 TechnologyDirectX Developer Blog

更新:DirectX Tool Kit for DirectX 12现在已经推出,其中包括基本教程。你应该先学习Direct3D 11再去尝试Direct3D 12。DirectX 12是为图形专家设计的API,对新手来说相当严苛。 DirectX Tool Kit可以帮助降低难度,但不是很多。一般来说,除非你已经达到了Direct3D 11的CPU性能极限,否则没有必要使用Direct3D 12。 但对于图形专家来说,学习它有助于更好地了解底层GPU硬件工作原理,或者那些想要将硬件性能推向极限的人。

更新2: 我应该提到,基于最近的一些经验,如果您主要使用DirectX工具包提供的功能(精灵、SpriteFont、基本图形和模型等),从DirectX 11切换到DirectX 12版本相当简单。另外,如果您想使用DirectX 光线追踪DirectML 或者 Shader Model 6,则需要使用DirectX 12而不是DirectX 11。当然,大多数游戏开发者实际上使用现有的第三方引擎,例如Unity或Unreal Engine,这些引擎会将API抽象化,因此在这些情况下,更多是针对目标平台而非可用性的问题。


1
w.r.t 是什么意思? - Soleil
2
关于,就...而言 - Chuck Walbourn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接