shader language被定位为高级语言,如,GLSL的全称是“High Level ShadingLanguage”,Cg语言的全称为“C for Graphic”, 不过高级语言的一个重要特性是“独立于硬件”,在这一方面shader language暂时还做不到,shader language完全依赖于GPU构架 。Shader language目前主要有3种语言:基于OpenGL的GLSL(OpenGL Shading Language),基于Direct3D的HLSL,还有NVIDIA公司的Cg语言。
使用shader language编写的程序称之为shader program(着色程序)。着色程序分为两类:vertex shader program(顶点着色程序)和fragment shader program(片断着色程序)。
GPU上的两个组件:Programmable Vertex Processor(可编程顶点处理器,又称为顶点着色器)和Programmable Fragment Processor(可编程片断处理器,又称为片断着色器) 。顶点和片段处理器被分离成可编程单元,可编程顶点处理器是一个硬件单元,可以运行顶点程序,而可编程片段处理器则是一个可以运行片段程序的单元。
顶点着色器控制顶点坐标转换过程;片段着色器控制像素颜色计算过程。这样就区分出顶点着色程序和片段着色程序的各自分工:Vertex program 负责顶点坐标变换;Fragment program负责像素颜色计算;前者的输出是后者的输入。
顶点着色程序从GPU前端模块(寄存器)中提取图元信息(顶点位置、法向量、纹理坐标等),并完成顶点坐标空间转换、法向量空间转换、光照计算等操作,最后将计算好的数据传送到指定寄存器中;然后片断着色程序从中获取需要的数据,通常为“纹理坐标、光照信息等”,并根据这些信息以及从应用程序传递的纹理信息(如果有的话)进行每个片断的颜色计算,最后将处理后的数据送光栅操作模块。
片断着色程序对每个片断进行独立的颜色计算,最后输出颜色值的就是该片段最终显示的颜色。可以这样说,顶点着色程序主要进行几何方面的运算,而片段着色程序主要针对最终的颜色值进行计算。
可编程图形渲染管线 示意图:
shader语言简介
1、基于 OpenGL的 GLSL(OpenGLShading Language ),基于 OpenGL的接口 ;
2、基于Direct3D 的 HLSL(High Level ShadingLanguage), 基于Direct3D 的接口。以上两者不能混用 。
3、NVIDIA公司的 Cg(C for Graphic)语言 。
Cg 是一个可以被 OpenGL和 Direct3D广泛支持的图形处理器编程语言。Cg语言和 OpenGL、DirectX并不是同一层次的语言,而是
OpenGL和 DirectX的上层,即:Cg程序是运行在 OpenGL和 DirectX标准顶点和像素着色的基础上的。cg基于知识联盟(Microsoft和 NVIDIA),且拥有跨平台性 。
Cg 同时被 OpenGL 与 Direct3D 两种编程 API 所支持。一个正确编写的 Cg应用程序可以不做任何修改的同时工作在 OpenGL 和
Direct3D 之上。