各种低高级着色语言
着色程序(shader)分为两种:
1.vertex shader顶点着色程序
2.fragment shader片段着色程序
着色程序可以用低级着色语言(类似汇编),或高级着色语言
一.低级着色语言
虚拟机
为统一各个GPU厂商的接口,DirectX 和 OpenGL 分别定义可执行shader的虚拟机,GPU厂商在显卡驱动中来实现虚拟机
DirectX
1.Vertex shader虚拟机版本
vs_1_1,vs_2_0,vs_2_x,vs_3_0
2.Fragment shader(DirectX上称为pixel shader)虚拟机版本
ps_1_1,ps_1_2,ps_1_4,ps_2_0,ps_2_x,ps_3_0
OpenGL
通过了两个官方扩展:ARB_VERTEX_PROGRAM 与 ARB_FRAGMENT_PROGRAM 来统一对低级着色语言的支持
1.Vertex shader虚拟机版本
arbvp10,arbvp20
2.Fragment shader虚拟机版本
arbfp10,arbfp20
二.高级着色语言
目前有3种主流高级语言:基于OpenGL的GLSL(OpenGL Shading Language,也称为GLslang),基于
Direct3D的HLSL(High Level Shading Language),还有NVIDIA公司的Cg (C for Graphic)语言。
Cg可以在OpenGL和DirectX中使用
GLSL
GLSL只支持OpenGL,OpenGL1.5以扩充形式加入GLSL,后来OpenGL2.0核心中正式加入GLSL。
HLSL
HLSL只支持DirectX,语法与Cg非常相似,是从DirectX9开始加入的。
Cg
CG语言是全新的类C高级编程语言,在微软的帮助下我们看到了它的雏形,有意思的是CG语言不但支持普
通的DirectX图形接口,对OpenGL图形接口也提供了完备的支持。CG语言主要包括两个部分,CG语言特征、CG
编译器,而且这种编译器可以使用高级语言数据类型。
CG具备很高的效率,因为CG其实就是提供了应用程序同硬件加速规范的中间层,应用程序通过CG来调用DX
和OpenGL,这样开发者再也不用去直接接触图形核心的细节了。
虽然CG是NVIDIA公司的,但ATI显卡依然可以用。因为CG是基于OpenGL和DirectX之上的。
参考:
http://www.quanwen.com.cn/doc/1578176/
http://blog.163.com/lee_shutong/blog/static/1294353562009101772153736/
http://media.ccidnet.com/media/cce/474/00201.htm