最近,随着新的三维图形API引起的骚动,我想知道为什么以前没有这样做过。旧的方式和新的方式有什么不同?
我想知道它是如何实现的,甚至可能概述它是如何从gpu到驱动程序再到DX或OGL的API工作的。
发生的主要事情是GPU本身已经变得相当标准化,甚至在不同的供应商之间也是如此。DirectX和OpenGL在历史上一直致力于隐藏不同供应商GPU设计之间的差异,其中许多设计在过去都有非常独特的硬件架构——OpenGL一直是一个"泄漏"得多的抽象,有无数供应商特定的扩展。
DirectX 12和Mantle都比过去暴露了更多GPU的底层行为,因此运行库比底层驱动程序抽象得多。这种方法不适用于每一个视频卡,尤其是传统DirectX和OpenGL可以支持的许多旧的视频卡,OpenGL承载着几十年前遗留下来的巨大支持。DirectX 10和DirectX 11的GPU功能标准化的推动,使来自不同供应商的消费级PC图形硬件自DirectX早期以来不再那么古怪。
需要记住的另一件事是,这种权衡还要求应用程序/游戏本身更多地正确处理CPU/GPU同步,有效地驱动硬件,跟踪并详尽地描述它们使用的状态组合,并且通常在没有几乎安全级别的情况下运行;运行时的支持。
编写DirectX 12应用程序需要比现在的DirectX 11或OpenGL更多的图形编程技能。在Direct3D 9中设置设备/交换链和简单的渲染场景可能需要几十行代码,在Direct3D 11中需要几百行,但在DirectX 12中需要更多,因为应用程序本身必须完成过去在运行时"魔术"完成的所有单独步骤。这让应用程序/游戏可以调整确切的顺序,也许可以跳过它们实际上不需要的步骤,但这取决于它们,而不是运行时。
引用本叔叔的话,权力越大,责任越大
多年来,开发人员一直坚称他们想要在PC上使用"控制台式"API,所以现在他们将能够确定他们是否真的想要它。对于游戏引擎作者、带有自定义引擎的AAA游戏以及技术演示场景来说,对硬件有如此多几乎直接的控制是非常酷的。对于普通人来说,长时间使用DirectX 11或使用已经实现DirectX 12的引擎会容易得多。
要了解它从gpu到驱动程序再到API的工作原理,您可以从图形管道开始