1.CPU在运行程序时可以通过键盘鼠标来输入数据,程序运行的结果可以显示在屏幕上也可以转换成文字或二进制数据存储在硬盘上。 Vertex Shader和Pixel Shader也是一段可以运行的程序,Shader是交由显示芯片GPU来运行的,它的数据源是由CPU准备好后再传给Shader。Shader运行结果直接显示在画面上。
2.Shader属于被动程序,我们要先通过CPU把Shader加载到GPU中,再调用DrawPrimitive或DrawIndexedPrimitive之类的函数来画图,这时GPU才会运行Shader。DrawPrimitive画完模型后,Shader程序也会停止。所以大部分的Shader生命周期很短,其寿命完全取决与绘图所花费的时间。
3.Shader所能读写的内存范围是有限制的。通过CPU运行的程序可以自由的向系统申请内存。Shader不能主动去分配内存,它能操作的内存都是预先通过CPU分配好的,并且分为只读和只写两部分。存放顶点的顶点数据区Vertex Buffer和绘图时所使用的贴图Texture,属于Shader的只读存储器,Shader只能从中读取数据,不能写入数据。Framebuffer画面是Shader的只写内存,Shader可以把运行结果存储在Framebuffer中,但不能去读Framebuffer中的数据。
4.Shader无法随机存取内存。Vertex Shader 只能读取它所分配到该去处理的单一顶点数据,不能任意获得其他顶点的信息。Pixel Shader 在输出颜色时,不能随意选择把颜色填入Framebuffer的任意个像素上。GPU在填充某个像素A时,会对像素A运行目前所使用的Pixel Shader,这个时候Pixel Shader只能固定更新A点的值,不能更新其他的像素。
5.Shader唯一能比较自由的读取内存内容的是贴图。Shader可以通过不同的贴图坐标来读取图片上的不同像素。编写Shader时可以把2D贴图视为二维数组,把贴图坐标视为二维数组的索引。
6.GPU在运行Shader时没有暂存内存可以使用,编写C++程序时,函数中的局部变量或用到得临时内存存放在Stack堆栈内存中。GPU没有Stack,Shader所声明的变量及用到的临时变量都放在GPU芯片上的某个寄存器中。(使用寄存器的速度比Stack内存速度快好几倍,但使用的变量的数量有限制)
----摘自《3D绘图程序设计》
posted on 2010-02-26 16:41
郭小帅 阅读(710)
评论(0) 编辑 收藏 引用 所属分类:
Shader