①OpenGL/DirectX:由于开发者直接访问GPU是一件非常麻烦的事,所以就出现了OpenGL和DirectX这些图像应用编程接口。它们架起了上层应用程序和底层GPU的沟通桥梁。一个应用程序向这些接口发送渲染命令,而这些接口会依次向显卡驱动发送渲染命令,这些显卡驱动是真正知道如何和GPU通信的角色,正是它们把OpenGL或者DirectX的函数调用翻译成了GPU能够听懂的语言。同时它们也负责把纹理等数据转换成GPU所支持的格式。一个比喻是,显卡驱动是显卡的操作系统。
Ps:
显卡驱动由显卡制造商提供
OpenGL是由多个公司创建的,DirectX由微软创建。
Direct3D是DirectX中的一个增强功能,主要负责3D效果的显示。
②常见的着色器语言:DirectX的HLSL、OpenGL的GLSL,NVIDIA的Cg。它们会被编译成与机器无关的汇编语言,交给显卡驱动来翻译成真正的机器语言,即GPU可以理解的语言。
三种语言的优越性:
GLSL的优点在于它的跨平台性,它可以在Windows、Linux、Mac甚至移动平台等多种平台上工作,但这种跨平台是由于OpenGL没有提供着色器编译器,而是由显卡驱动来完成着色器的编译工作。也就是说,只要显卡驱动支持对GLSL的编译它就可以运行。这种做法的好处在于,由于供应商完全了解自己的硬件构造,他们知道怎样做可以发挥出最大的作用。换句话说,GLSL是依赖硬件,而非操作系统层级的。但这也意味着GLSL的编译结果将取决于硬件供应商。要知道,世界上有很多硬件供应商——NVIDIA、ATI等,他们对GLSL的编译实现不尽相同,这可能会造成编译结果不一致的情况,因为这完全取决于供应商的做法。
对于HLSL,就算使用了不同的硬件,同一个着色器的编译结果也是一样的(前提是版本相同)。但也因此支持HLSL的平台相对比较有限,几乎完全是微软自己的产品,如Windows、Xbox 360等。这是因为在其他平台上没有可以编译HLSL的编译器。
Cg则是真正意义上的跨平台。它会根据平台的不同,编译成相应的中间语言。Cg语言的跨平台性很大原因取决于与微软的合作,这也导致Cg语言的语法和HLSL非常相像,Cg语言可以无缝移植成HLSL代码。但缺点是可能无法完全发挥出OpenGL的最新特性。
③Shader Model:Shader Model是由微软提出的一套规范,通俗地理解就是它们决定了Shader中各个特性的能力。这些特性和能力体现在Shader能使用的运算指令数目、寄存器个数等方面。Shader Model等级越高,Shader的能力就越大。注意Shader Model是针对HLSL的,与GLSL没有关系,Shader Model的版本也是HLSL的版本。