DirectX是一组API的集合,用于在微软平台上,包括Windows,Windows Phone,Xbox 360,以及Xbox One,开发游戏或图形相关的应用程序。DirectX从1990年代中期发展至今,并处于现在图形开发的前沿。Direct3D是DirectX里面一套3D图形API,是这本书主要讲述的。DirectX也包含了2D图形,输入,音频,文字渲染和GPU编程的系统支持。本章概述了DirectX和DirectX 11的图形管线。
回顾历史
DirectX 1.0版本发布于1995年九月,刚好在Windows95发布之后。以前游戏主要在MS-DOS环境下开发。DirectX的发布是微软试图让游戏开发者转到新操作系统。DirectX的早期使用者很少有人转移到新的平台,DirectX库的快速发布使这种情况更加严重。2000年2月,微软已经开发了Directx的6个额外的主要版本,以及大量小的修改。但是Directx库的已经得到了稳定的提高,于是2001年微软发布了自己的第一款游戏主机,支持DirectX 8的修订。与些同时,DirectX已经获得了大量开发者的支持,微软一举成为游戏和图形领域的领导者。
在同一时期,3D图形硬件也处于类似的快速发展状态。在1990年代中期以前,低成本,面向消费者的3D图形硬件根本不存在。早期的3D显卡只提供固定功能的APIs-这种只针对特定显卡的特性不能被更改或者被图形开发者扩展。随着2001年Xbox,nVidia GeForce 3,DirectX 8的发布,开发者第一次被广泛介绍可编程shaders。可编程shaders使得开发者可以操作一个3D object,通过GPU(也被称为显卡)一个像素一个像素的计算输出。在DirectX 8的时候,shaders是用汇编语言编写的,但是到2002年,随着DirectX 9的发布,微软介绍了High-Level Shading Language(HLSL),一种用于编写shaders的C风格编程语言。
2005年11月,微软推出了Xbox 360,并保证服务一直持续到2013年11月的(这是游戏主机推出以来最长的主机服务周期)。Xbox 360使用了DirectX 9。一年后,在2006年11月,微软发布了Windows Vista和DirectX 10。然而在此期间,游戏主机占领了视频游戏市场,而且Xbox 360仅支持DirectX 9。因此,很少有开发者使用DirectX 10,而且那些使用DirectX 10的开发者也受限于PC平台的DirectX 10特性。其他抑制DirectX 10被大规模使用的因素是DirectX9和DirectX10之间的重大改变,以及Windows Vista只被少数人使用。
2009年推出了Windows 7,并且很快就发布了DirectX 11。这次发布相对DirectX 10只有一点小的改变(与早期更新迭代相比算是比较小的改变)。DirectX 11介绍了DirectCompute,通用GPU编程API,Tessellation支持,以及改进了Multithreading。在这段时间,PC平台的游戏市场开始复苏变得爱欢迎,一部分是因为像Valve的Stream数字发行平台,另一部分是因为游戏主机已经开始过时了。这些因素导致越来越多的开发人员开始采用DirectX 11。然后在2012年秋天,微软发布了Windows 8和Windows Phone 8,还有DirectX 11.1。这也是本书重点讲述的版本,而且微软最近大多数平台,包括最新的Xbox One都支持。
仅管就是一本关于DirectX的书籍,但如果我不提及OpenGL(同时期非常有竞争力的图形库),我被会认为不尽责。OpenGL是Silicon Graphics Inc. (公司)于1991年发布的一个跨平台渲染API。编写这本书的时候,OpenGL最新的版本是4.4版(于2013年7月发布),并由Kronos Group管理。仅管OpenGL和DirectX在设计架构上显著不同,但他们如今都支持相同的渲染能力。因此,如何选择DirectX或者OpenGL对于平台是一个大问题。DirectX主要针对微软平台,由于显卡厂商广泛支持,使得微软的Windows操作系统成为了桌面电脑上的主导。而OpenGL,并不针对某一特写平台,被移动开发领域大量采用。
至此,回顾完历史,我们开始学习下面的内容。