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
的一般术语似乎是一个明智的做法。)