DirectX(DX)是由微软公司创建的一系列专为多媒体以及游戏开发的应用程序接口。旗下包含Direct3D、Direct2D、DirectCompute等等多个不同用途的子部分,因为这一系列API皆以Direct字样开头,所以DirectX(只要把X字母替换为任何一个特定API的名字)就成为这一巨大的API系列的统称。目前最新版本为DirectX 12,随附于Windows 10操作系统之上。
DirectX的第一个版本作为Windows Games SDK发布于1995年9月,它作为Windows API的一部分用以替换Windows 3.1中的DCI和WinGAPI。
2002年,微软发布了DirectX 9,它支持最新的顶点阴影着色器2.0版本,又于2004年4月将shader model 3.0(SM 3.0)加入了DirectX 9.0c。
2005年4月,DirectShow从DirectX移除,加入到Microsoft Platform SDK。
2010年6月7日发布的DirectX SDK是最后独立发布的SDK版本,之后的DirectX SDK被集成进新版的Microsoft Windows SDK里。例如DirectX 11.2 SDK被放在Windows Software Development Kit (SDK) for Windows 8.1里。
DirectX并不是一个单纯的图形API,它是由微软公司开发的用途广泛的API,它包含有Direct Graphics(Direct 3D+Direct Draw)、Direct Input、Direct Play、Direct Sound、Direct Show、Direct Setup、Direct Media Objects等多个组件,它提供了一整套的多媒体接口方案。只是其在3D图形方面的优秀表现,让它的其它方面显得暗淡无光。DirectX开发之初是为了弥补Windows 3.1系统对图形、声音处理能力的不足,而今已发展成为对整个多媒体系统的各个方面都有决定性影响的接口。
1996.1 DirectX 1.0 win95 这个时候叫做GDK 游戏开发工具包
1996.7 DirectX 2.0 win95
1996.9 DirectX 3.0 win95
******** Directx 4.0 不存在
1997.7 DirectX 5.0 win95
1998.7 DirectX 6.0 win98
1999.9 DirectX 7.0 win98 SE
2000.11 DirectX 8.0 win2000/ME
2002.7 DirectX 8.1b winxp
2002.10 DirectX 9.0
2003.4 DirectX 9.0a win2003
2003.10 DirectX 9.0b
2004.7 DirectX 9.0c
2006? Directx 10.0
DirectX 1.0
DirectX的第一个版本作为Windows Games SDK发布于1995年9月,它作为Windows API的一部分用以替换Windows 3.1中的DCI和WinGAPI
第一代的DirectX很不成功,推出时众多的硬件均不支持,当时基本都采用专业图形API-OpenGL,缺乏硬件的支持成了其流行的最大障碍。
DirectX 1.0版本是第一个可以直接对硬件信息进行读取的程序。它提供了更为直接的读取图形硬件的性能(比如:显示卡上的块移动功能)以及基本的声音和输入设备功能(函数),使开发的游戏能实现对二维(2D)图像进行加速。第一代DirectX不包括所有的3D功能,还处于一个初级阶段。
DirectX 2.0
DirectX 2.0在二维图形方面做了些改进,增加了一些动态效果,采用了Direct 3D的技术。这样DirectX 2.0与DirectX 1.0有了相当大的不同。在DirectX 2.0中,采用了“平滑模拟和RGB模拟”两种模拟方式对三维(3D)图像进行加速计算的。DirectX 2.0同时也采用了更加友好的用户设置程序并更正了应用程序接口的许多问题。从DirectX 2.0开始,整个DirectX的设计架构雏形就已基本完成。
DirectX 3.0
DirectX 3.0的推出是在1997年最后一个版本的Windows95发布后不久,此时3D游戏开始深入人心,DirectX也逐渐得到软硬件厂商的认可。97年时应用程序接口标准共有三个,分别是专业的OpenGL接口,微软的DirectX D接口和3DFX公司的Glide接口。而那时的3DFX公司是最为强大的显卡制造商,它的Glide接口自然也受到最广泛的应用,但随着3DFX公司的没落,Voodoo显卡的衰败,Glide接口才逐渐消失了。
DirectX 3.0是DirectX 2.0的简单升级版,它对DirectX 2.0的改动并不多。包括对DirectSound(针对3D声音功能)和DirectPlay(针对游戏/网络)的一些修改和升级。DirectX 3.0集成了较简单的3D效果,还不是很成熟。
DirectX 5.0
微软公司并没有推出DirectX 4.0,而是直接推出了DirectX 5.0。此版本对Direct3D做出了很大的改动,加入了雾化效果、Alpha混合等3D特效,使3D游戏中的空间感和真实感得以增强,还加入了S3的纹理压缩技术。
同时,DirectX 5.0在其它各组件方面也有加强,在声卡、游戏控制器方面均做了改进,支持了更多的设备。因此,DirectX发展到DirectX 5.0才真正走向了成熟。此时的DirectX性能完全不逊色于其它3D API,而且大有后来居上之势。
DirectX 6.0
DirectX 6.0推出时,其最大的竞争对手之一Glide,已逐步走向了没落,而DirectX则得到了大多数厂商的认可。DirectX 6.0中加入了双线性过滤、三线性过滤等优化3D图像质量的技术,游戏中的3D技术逐渐走入成熟阶段。
DirectX 7.0
DirectX 7.0最大的特色就是支持T&L,中文名称是“坐标转换和光源”。3D游戏中的任何一个物体都有一个坐标,当此物体运动时,它的坐标发生变化,这指的就是坐标转换;3D游戏中除了场景+物体还需要灯光,没有灯光就没有3D物体的表现,无论是实时3D游戏还是3D影像渲染,加上灯光的3D渲染是最消耗资源的。虽然OpenGL中已有相关技术,但此前从未在民用级硬件中出现。
在T&L问世之前,位置转换和灯光都需要CPU来计算,CPU速度越快,游戏表现越流畅。使用了T&L功能后,这两种效果的计算用显示卡的GPU来计算,这样就可以把CPU从繁忙的劳动中解脱出来。换句话说,拥有T&L显示卡,使用DirectX 7.0,即使没有高速的CPU,同样能流畅的跑3D游戏。
DirectX 8.0
DirectX 8.0的推出引发了一场显卡革命,它首次引入了“像素渲染”概念,同时具备像素渲染引擎(Pixel Shader)与顶点渲染引擎(Vertex Shader),反映在特效上就是动态光影效果。同硬件T&L仅仅实现的固定光影转换相比,VS和PS单元的灵活性更大,它使GPU真正成为了可编程的处理器。这意味着程序员可通过它们实现3D场景构建的难度大大降低。通过VS和PS的渲染,可以很容易的营造出真实的水面动态波纹光影效果。此时DirectX的权威地位终于建成。
directx box(xbox),研发代号“中途岛”
DirectX 9.0
2002年底,微软发布DirectX9.0。DirectX 9中PS单元的渲染精度已达到浮点精度,传统的硬件T&L单元也被取消。全新的VertexShader(顶点着色引擎)编程将比以前复杂得多,新的VertexShader标准增加了流程控制,更多的常量,每个程序的着色指令增加到了1024条。
PS 2.0具备完全可编程的架构,能对纹理效果即时演算、动态纹理贴图,还不占用显存,理论上对材质贴图的分辨率的精度提高无限多;另外PS1.4只能支持28个硬件指令,同时操作6个材质,而PS2.0却可以支持160个硬件指令,同时操作16个材质数量,新的高精度浮点数据规格可以使用多重纹理贴图,可操作的指令数可以任意长,电影级别的显示效果轻而易举的实现。
VS 2.0通过增加Vertex程序的灵活性,显著的提高了老版本(DirectX8)的VS性能,新的控制指令,可以用通用的程序代替以前专用的单独着色程序,效率提高许多倍;增加循环操作指令,减少工作时间,提高处理效率;扩展着色指令个数,从128个提升到256个。
增加对浮点数据的处理功能,以前只能对整数进行处理,这样提高渲染精度,使最终处理的色彩格式达到电影级别。突破了以前限制PC图形图象质量在数学上的精度障碍,它的每条渲染流水线都升级为128位浮点颜色,让游戏程序设计师们更容易更轻松的创造出更漂亮的效果,让程序员编程更容易。
DirectX 9.0c
与过去的DirectX 9.0b和Shader Model 2.0相比较,DirectX 9.0c最大的改进,便是引入了对Shader Model 3.0(包括Pixel Shader 3.0 和Vertex Shader 3.0两个着色语言规范)的全面支持。举例来说,DirectX 9.0b的Shader Model 2.0所支持的Vertex Shader最大指令数仅为256个,Pixel Shader最大指令数更是只有96个。而在最新的Shader Model 3.0中,Vertex Shader和Pixel Shader的最大指令数都大幅上升至65535个,全新的动态程序流控制、位移贴图、多渲染目标(MRT)、次表面散射 Subsurface scattering、柔和阴影Soft shadows、环境和地面阴影Environmental and ground shadows、全局照明(Global illumination)等新技术特性,使得GeForce 6、GeForce 7系列以及Radeon X1000系列立刻为新一代游戏以及具备无比真实感、幻想般的复杂的数字世界和逼真的角色在影视品质的环境中活动提供强大动力。
因此DirectX 9.0c和Shader Model 3.0标准的推出,可以说是DirectX发展历程中的重要转折点。在DirectX 9.0c中,Shader Model 3.0除了取消指令数限制和加入位移贴图等新特性之外,更多的特性都是在解决游戏的执行效率和品质上下功夫,Shader Model 3.0诞生之后,人们对待游戏的态度也开始从过去单纯地追求速度,转变到游戏画质和运行速度两者兼顾。因此Shader Model 3.0对游戏产业的影响可谓深远。
DirectX 10.0
包含在Windows Vista操作系统中,无法单独下载使用。
新的DirectX使你获得更好的图像显示质量,使多人游戏具可伸缩性,以及包括更棒的音频效果。它强化了针对DirectDraw和Direct3D的接口,简化了应用扩展,提升性能;改善了图形创作工具,更易于做出最佳的3-D角色和环境;点光源式光影和像素式光影使图象更逼真;强化了DirectSound和DirectMusic,简化了其应用扩展;DLS2音频合成功能提高了乐器音频的真实感;DirectInput的设备影射功能令对设备的支持更简单;DirectPlay使多人游戏的性能和可扩展性得到了提高; DirectPlay提供了IP声音通讯;DirectShow的应用编程接口提供了音频/视频的实时合成和即时编辑;DirectShow支持Windows媒体音频和视频(WMA和WMV)的读写; Microsoft TV技术可以支持数字电视节目。当然,最重要的是一些新游戏需要它。DirectX Redist通常每两个月更新一次,包含了DirectX Runtimes的所有更新,可以替代此前发布的旧版本,适合Windows XP、Server 2003、Vista等操作系统,不支持Windows 9x/2000。一般最新的3D游戏等应用程序都需要新的DirectX接口,因此强烈推荐更新。
Vista DX10用户也同样需要。
显卡所支持的DirectX版本已成为评价显卡性能的标准,从显卡支持什么版本的DirectX,用户就可以分辨出显卡的性能高低,从而选择出适合于自己的显卡产品。
DirectX 10.1
正如以前的DX版本一样,DX10.1也是DX10的超集,因此它将支持DirectX 10的所有功能,同时它将支持更多的功能,提供更高的性能。
DX10.1的一个主要提高是改善的shader资源存取功能,在多样本AA时,在读取样本时有更好的控制能力。除此之外,DX10.1还将可以创建定制的下行采样滤波器。
DX10.1还将有更新的浮点混合功能,对于渲染目标更有针对性,对于渲染目标混合将有新的格式,渲染目标可以实现独立的各自混合。阴影功能一直是游戏的重要特效,Direct3D 10.1 的阴影滤波功能也将有所提高,从而可望进一步提高画质。
在性能方面,DirectX 10.1将支持多核系统有更高的性能。而在渲染,反射和散射时,Direct3D 10.1将减少对API的调用次数,从而将获得不错的性能提升。
其他方面,DX10.1的提高也不少,包括32bit浮点滤波,可以提高渲染精确度,改善HDR渲染的画质。完全的抗锯齿应用程序控制也将是DX10.1的亮点,应用程序将可以控制多重采样和超级采样的使用,并选择在特定场景出现的采样模板。DX10.1将至少需要单像素四采样。
DX10.1还将引入更新的驱动模型,WDDM 2.1。与DX10的WDDM2.0相比,2.1有一些显著的提高。
首先是更多的内容转换功能,WDDM2.0支持处理一个命令或三角形后进行内容转换,而WDDM2.1则可以让内容转换即时进行。由于GPU同时要并行处理多个线程,因此内容转换的即时性不仅可以保证转换质量,还可以提升GPU效率,减少等待时间。另外,由于WDDM 2.1支持基于过程的虚拟内存分配,处理GPU和驱动页面错误的方式也更为成熟。
微软预计将在两周之内(2008年7月中旬)宣布新一代API:DirectX 11。消息来源指出,微软将在7月22日举办的Gamefest 2008上宣布新一代API,此前我们得到有关DirectX 11的最新消息是NVIDIA将在八月末的“NVISION 08”会议上讲解DirectX 11。
由微软举办的Gamefest 2008大会将于7月22-23日在西雅图召开,Gamefest 2008大会是微软每年一度的游戏技术探讨盛会,所以有关下一代游戏技术接口API的消息自然也是少不了的话题。
DirectX 11引入最大新技术特征无疑是Tessellation/Displacement,我们还听说了多线程渲染、Compute Shaders也将是DirectX 11中重要环节,另外据说DirectX 11还将引入Shader Model 5.0,具体细节信息尚不明确,Ray Tracing(光线跟踪)与Rasterization(光栅化)技术的支持也还没有提及。
DirectX 11
2009年1月9日星期五,微软将面向公众发布Windows 7客户端Beta 1测试版。而此前一天,即1月8日,微软将率先发布Windows 7服务器版本的Beta 1测试版。
在微软发布的Windows 7Beta版本中,一些已经安装使用的用户的发现了DirectX 11已经包含其中了。DirectX 11作为3D图形接口,不仅支持未来的DX11硬件,还向下兼容当前的DirectX 10和10.1硬件。DirectX 11增加了新的计算shader技术,可以允许GPU从事更多的通用计算工作,而不仅仅是3D运算,这可以鼓励开发人员更好地将GPU作为并行处理器使用。
在微软发布的Windows 7 Beta版本中,已包含DirectX 11
另外,DirectX 11还支持tessellation镶嵌化技术,这有助于开发人员创建更为细腻流畅的模型,实现高质量实时渲染和预渲染场景。多线程是DirectX 11的另外一大亮点,DX11可以更好地利用多线程资源,从而使游戏更有效地利用多核处理器。
DirectX 11.1
微软2011年10月15日公布了一份白皮书“Windows开发者预览版中的Windows驱动模型增强”,洋洋洒洒地深入介绍了Windows 8在图形技术方面的改进。根据白皮书,Windows 8将会支持新版显示驱动模型WDDM1.2,高于Windows 7 WDDM 1.1,但同时会放弃对服务器系统中XDDM的支持,全部转向WDDM。
DirectX方面最关键的是当然引入Direct3D 11.1,同时还会有平滑旋转、立体3D、D3D11 Video等功能技术。微软称,即使是低端硬件,只要能够利用好DirectX的优势,也能够在Windows 8上来更好的性能。
DirectX 11.2
2013年6月28日,微软发布Directx11.2(Alpha版),其中一个重要特性是允许游戏使用系统内存和显存储存纹理数据,微软的Antoine Leblond在BUILD大会上演示了主要利用内存而不是显存去储存9GB纹理数据。这项特性对于未来的高清游戏具有重要意义。然而一个问题是,DirectX 11.2不支持Windows 8及之前操作系统,只支持Windows 8.1和下一代主机Xbox One。
DirectX 12
2014年3月21日,微软正式发布了新一代的API DirectX 12 [1] 。虽然算不上全新设计,虽然细节公布得还不是特别多,但至少不是Mantle的直接翻版,还是有微软与合作伙伴设计的不少新东西的。DX12最重要的变化就是更底层API [4] ,这一点很像AMD Mantle,在硬件抽象层上走得比以往更深入,能够同时减轻CPU、GPU的过载(overload)。具体包括:应用可追踪GPU流水线、控制资源状态转换(比如从渲染目标到纹理)、控制资源重命名,更少的API和驱动跟踪,可预判属性,等等。
另外,DX12大大提高了多线程效率,可以充分发挥多线程硬件的潜力。DX11在这方面受CPU性能的严重制约,主要是因为不能有效利用多核心。微软宣称,微软对多核心CPU的利用几乎是完美线性增长的,也就是说四核心能接近单核心的四倍。
此外还有渲染流水线、渲染特性、资源管理、命令列表与绑定、描述符跳跃等等方面的改进,因为主要是关于开发的,也比较深晦,这里就先不说太多了。
NVIDIA确认说,开普勒、费米、麦克斯韦架构全部都支持DX12,也就是GeForce 200系列以来的型号都可以,DX11的都行。
AMD则确认,GCN架构的所有显卡均支持DX12,也就是Radeon HD 7000、Radeon R200系列 [5] 。
Intel确认称,第四代Haswell可以支持DX12,但其实仅限最高端的两个型号:GT3 Iris 5100、GT3e Iris Pro 5200。
网友评论