標籤:目的 指定 需要 建立 刪除 ram sha 驗證 create
1.編譯GLSL ES代碼,建立和初始化著色器供WebGL使用。這些過程一般分為7個步驟:
建立著色器對象(gl.createBuffer());
向著色器對象中填充著色器程式的原始碼(gl.shaderSource());
編譯著色器(gl.compileShander());
建立程式對象(gl.createProgram());
為程式對象分配著色器(gl.attachShader());
串連程式對象(gl.linkProgram());
使用程式對象(gl.useProgram());
2.著色器對象和程式對象
著色器對象:著色器對象管理一個頂點著色器或一個片元著色器。每個著色器都有一個著色器對象。
程式對象:程式對象是管理著色器對象的容器。WebGl中,一個程式對象必須包含一個頂點著色器和一個片元著色器。
3.gl.createShader(type)建立著色器
建立由type指定的著色器對象。參數:
type:指定建立著色器對象的類型,gl.VERTEX_SHADER表示頂點著色器,gl.FRAGEMENT_SHADER表示片元著色器
4.gl.deleteShader(shader)
刪除shader指定的著色器對象。參數:
shader:待刪除的著色器對象
5.gl.shaderSource(shader, source)指定著色器對象的代碼
將source指定的字串形式代碼傳入shader指定的著色器。如果之前已經向shader傳入過代碼了,舊的代碼會被替換掉。參數:
shader:指定需要傳入代碼的著色器對象
source:指定字串形式的代碼
6.gl.compileShader(shader)編譯著色器
編譯shader指定的著色器中的原始碼。參數:
shader:待編譯的著色器
7.gl.getShaderParameter(shader, pname)
擷取shader指定的著色器中,pname指定的參數資訊。參數:
shader:指定待擷取參數的著色器
pname:自定待擷取參數的類型,可以是gl.SHADER_TYPE、gl.DELETE_STATUS或者gl.COMPILE_STATUS
傳回值:根據pname的不同,返回不同的值。type為gl.SHADER_TYPE,返回時頂點著色器(gl.VERTEX_SHADER)還是片元著色器(gl.FRAGEMENT_SHADER);type為gl.DELETE_STATUS返回著色器是否被刪除成功;type為COMPILE_STATUS,返回是否編譯成功。
8.gl.getShaderInfoLog(shader)
擷取shader指定著色器的資訊日誌。參數:
shader:包含日誌資訊的字串
9.gl.createProgram()
建立程式對象。如前所述,程式對象包含了頂點著色器和片元著色器
10.gl.deleteProgram(program)
刪除program指定的程式對象,如果該程式對象正在被使用,則不立即刪除。而是等它不在被使用後再刪除。參數:
program:指定待刪除的程式對象
11.gl.attachShader(program, shader)
將shader指定的著色器對象分配給program指定的程式對象。參數:
program:指定程式對象
shader:指定著色器對象
著色器在附給程式對象前,並不定義要為其指定代碼或進行編譯(也就是說,把空的著色器附給程式對象也是可以的)。
12.gl.detachShader(program, shader)
取消shader指定的著色器對象對program指定的程式對象的分配。參數:
program:指定程式對象
shader:指定著色器對象
13.gl.linkProgram(program)
串連program指定的程式對象中的著色器。參數:
program:指定程式對象
程式對象進行著色器串連操作,目的是保證:(1)頂點著色器和片元著色器的varying變數同名同類型,且一一對應;(2)頂點著色器對每個varying變數賦了值;(3)頂點著色器和片元著色器中的同名uniform變數也是同類型的;(4)著色器中的attribute變數、uniform變數和varying變數的個數沒有超過著色器的上限,等等。
14.gl.getProgramParameter(program, pname)
擷取program指定的程式對象中pname指定的參數資訊。傳回值隨著pname的不同而不同。參數:
program:指定程式對象
pname:指定待擷取參數的類型,可以是gl.DELETE_STATUS、gl.LINKE_STATUS、gl.VALIDATE_STATUS、gl.ATTACHED_SHDERS、gl.ACTIVE_ATTRIBUTES或gl.ACTIVE_UNIFORMS
傳回值:根據pname的不同。返回不同的值。pname為gl.DELETE_STATUS,返回是否被刪除(true或false);pname為gl.LINKE_STATUS,程式是否串連成功(true或false);pname為gl.VALIDATE_STATUS,程式是否已經通過驗證(true或false);pname為ATTACHED_SHDERS,已被分配給程式的著色器數量;pname為gl.ACTIVE_ATTRIBUTES,頂點著色器中attribute變數的數量;pname為gl.ACTIVE_UNIFORMS,程式中uniform變數的數量。
15.gl.getProgramInfoLog(program)
擷取program指定的程式對象的資訊日誌。參數:
program:指定待擷取資訊日誌的程式對象
16.gl.useProgram(program)
告知WebGl系統繪製時使用prgoram指定的程式對象。參數:
program:指定待使用的程式對象
WebGL 建立和初始化著色器過程