shader的使用流程:
1. 編寫vertex Shader和fragment shader源碼。
2. 創建兩個shader 實例:GLuint glCreateShader(GLenum type); [gl.createShader]
3. 給Shader實例指定源碼。 glShaderSource [gl.shaderSource]
4. 編譯shaer源碼 void glCompileShader(GLuint shader) [gl.compileShader]
5. 創建shader program -- GLuint glCreateProgram(void) [gl.createProgram]
6. 綁定shader到program 。 void glAttachShader(GLuint program, GLuint shader)。每個program必須綁定一個vertex shader 和一個fragment shader。 [gl.attachShader]
7. 鏈接program 。 void glLinkProgram(GLuint program) [gl.linkProgram]
8. 使用porgram 。 void glUseProgram(GLuint program) [gl.useProgram]
attribute變量
attribute是頂點屬性,每個頂點都會有,但只存在于vertex Shader中,由應用程序傳入其值。
因為在鏈接program之前,attribute變量是還沒有分配內存的,為了給shader中的attribute變量傳值,首先需要將其綁定到program上,并指定他的位置attr_pos,鏈接program之后,可以通過這個位置attr_pos來給這個變量傳值。加入shader中有一個
這樣就將attr_name(字符串)綁定到了attr_pos(無符號值)位置。
這樣就把vert_data傳遞給了attribute變量attr_name。
因為每個頂點屬性的數據都依托在一個VBO中了,因此要想給一個attrbute變量傳遞數據,需要先把把數據交給一個VBO對象。
如果我們再鏈接program之前并沒有指定他的位置,我們還可以去查找這個變量。
uniform變量
uniform變量在shader中時只讀,隨不同圖元變化的全局變量,其值也由應用程序傳入。
這樣就可以給unif_pos設置1個浮點數的值,除glUniform1f之外,還可以使用如下方法:
可以看到,根據參數個數和類型不同,需要使用不同的方法設置。
varying變量
shader之間傳遞值用的變量類型了。在編寫vertex shader 中寫入,在fragment shader中只讀出
-
數據
+關注
關注
8文章
7057瀏覽量
89097 -
變量
+關注
關注
0文章
613瀏覽量
28389
原文標題:shader中的數據是怎么傳遞的?
文章出處:【微信號:Imgtec,微信公眾號:Imagination Tech】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論