对于D3D编程新手来说,应该直接学习D3D12,还是在深入D3D12?之前D3D11是必要的?
假设从零开始,并且对C++有很好的了解,我应该走哪条路?
发布于 2015-11-30 04:05:49
我已经回答了这个问题以前,所以你应该看看那个帖子。
简而言之,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工具包及其教程。一旦您掌握了这一点,您应该在一个适合您的应用程序的地方迁移到Direct3D 12。
在Direct3D 11上有大量的教程、样本、书籍和其他教育材料。Direct3D 12的材料有点薄,主要由DirectX-图形学-样本 GitHub回购的内容组成。我目前正致力于在DirectX工具包中添加DirectX 12支持,但即使它可用,您也会发现,从Direct3D 11开始要比尝试跳入DirectX 12要容易得多。
另一件事要记住w.r.t。to DirectX 12:它只支持在DirectX 12支持的Windows 10系统上。这包括大多数Direct3D特征级 11.0+硬件,包括NVIDIA、开普勒、Maxwell、AMD和英特尔的Haswell、Broadwell和Skylake。然而,这不包括任何旧的视频卡。参见DirectX 12:游戏的一大步、AMD DirectX 12技术和DirectX开发者博客
更新: 用于DirectX 12的DirectX工具包现在可用,包括基础教程。在处理Direct3D 12之前,您应该专注于学习Direct3D 11。DirectX 12是一个为图形专家设计的API,对于新手来说是非常不宽容的。DirectX工具包有助于稍微软化边缘,但不多。一般来说,除非您达到了Direct3D 11的CPU性能极限,否则没有必要使用Direct3D 12。也就是说,对于图形专家来说,更好地了解底层GPU硬件的工作原理,或者那些希望将硬件推向性能极限的人是值得学习的。
更新2:我应该提到,根据最近的一些经验,如果您主要使用DirectX工具包(sprites、spritefont、基本原语和模型等)中提供的功能,那么从DirectX 11版本切换到DirectX 12版本是相当直接的。此外,如果您想使用DirectX射线跟踪、DirectML或6型着色机,您需要使用DirectX 12而不是DirectX 11。当然,大多数游戏开发人员实际上使用的是现有的第三方引擎,比如Unreal,这些引擎抽象了API,因此它更多地是目标平台的问题,而不是那些情况下的可用性问题。
https://stackoverflow.com/questions/33986737
复制相似问题