WebGL 建立和初始化著色器過程

來源:互聯網
上載者:User

標籤:目的   指定   需要   建立   刪除   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 建立和初始化著色器過程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.