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
郭小帥 閱讀(719)
評論(0) 編輯 收藏 引用 所屬分類:
Shader