1. 固定功能的图形处理流水线( fixed function graphics pipeline )
能够实现 Vertex Shader 和 Pixel Shader 的显卡的图形处理流水线被称作为是可编程的,相对而言,在此之前的图形处理流水线被称作为是固定功能( fixed function ) , 下面是 OpenGL 图形处理的一个简图:
完整的 OpenGL 图形处理流水线为称作为 OpenGL 机器( OpenGL machine ,在 OpenGL 参考手册上可以找到这份框架图),就像一个电路图一样,上面有许许多多的开关,我们可以打开或者闭合这些开关,还可以设置图中各个处理单元的参数以控制处理的方法,但是无论如何整个系统的功能已经确定下来了,你只有使用或者不使用某些功能和控制某些功能的具体执行方法的权利而无法实现自己定制的功能,所以这样的图形处理流水线被称作为是固定功能的。(有实力的显卡厂商在自己的 OpenGL 实现中添加了许多 OpenGL 扩展实现了一些标准 OpenGL 规范所没有的功能,现在有了可编程的图形流水线,一般用户也有机会实现一些自己定制的功能。)
2. Vertex Shader & Pixel Shader
虽然实现 Vertex Shader 和 Pixel Shader 功能的图形流水线被称作为是可编程的,但是实际上可编程的只有流水线的一部分,正如 VertexShader 和 Pixel Shader 的字面意思一样,现在可编程的部分只有处理顶点的和处理象素的单元。
Vertex Shader 和 Pixel Shader 在不同的文档里面有不同的叫法, Nvidia 在自己的 OpenGL 扩展中把 Vertex Shader 叫做 VertexProgram 、把 Pixel Shader 叫做 Texture Shader , 3Dlabs 在自己提出一份 OpenGL 2.0 的提议里面把这两者分别叫做 VertexShader 和 Fragment (片元) Shader 。抛开叫法的差异,实际上的功能都是差不多的,下面的一段话对这种状况作了一个完美的解释:
Shader or Program? Shader has been used as the preferred name as this fits in with common usage in RenderMan and DX8. There is some argument that shading has connotations of being a color operation so doesn't fit with a vertex operation. RenderMan doesn't make this distinction, nor does DX8. It seems wise to go along with the common usage of shader as a general term for a program which operates on some part of a graphics pipeline.
( Shader 还是 Program ,在 RenderMan 和 DX8 中,通常情况下倾向于使用 Shader 这个名字。这个叫法有一些争议,因为 Shading 蕴涵地表示为进行了相关的颜色操作而不适合用来描述顶点操作。但是在 RenderMan 和 DX8 中并没有理会这种区别。所以跟随通常的叫法,把 Shader 作为在图形处理流水线某些部分起作用的 program 的一般术语似乎是一个明智的做法。)