第四章 著色器和程序

第二章說了如何創(chuàng)建一個(gè)三角形另假,也使用了android進(jìn)行了繪制莺奔,我們在案例中使用了一個(gè)頂點(diǎn)著色器(這個(gè)好像有的地方叫片元)和一個(gè)片段著色器以及一個(gè)程序?qū)ο箜锬粒@里就對如何創(chuàng)建著色器通危、編譯他們以及連接到一個(gè)程序上熄守。

著色器和程序

創(chuàng)建著色器蜈垮,加載著色器耗跛,編譯著色器裕照,創(chuàng)建程序,附著在程序上调塌,連接之后使用晋南,從程序中得到句柄,通過句柄進(jìn)行傳值羔砾。
一個(gè)程序需要兩個(gè)著色器负间,一個(gè)片元一個(gè)片段,然后編譯成為可執(zhí)行文件進(jìn)行渲染姜凄,也就是一個(gè)程序可以附著多個(gè)著色器對象政溃。

創(chuàng)建著色器和編譯著色器

創(chuàng)建著色器

GLint glCreateShader(GLenum type);

根據(jù)傳入的類型,返回一個(gè)頂點(diǎn)和一個(gè)片段著色器的句柄态秧,完成之后董虱,可以使用glDeleteshader刪除。

void glDeleteshader(GLint shader)

如果執(zhí)行了刪除申鱼,但是它正好附著在程序上愤诱,就不會(huì)立即的刪除,只會(huì)標(biāo)記為刪除捐友,一旦不在附著就會(huì)立即刪除

創(chuàng)建著色器就需要附著著色器代碼淫半。

void glshaderSource(shader,size,string,length)

一旦加載了程序,就可以進(jìn)行編譯操作匣砖,但是并不是所有的都提供了編譯著色器的能力科吭。

void glCompileShader(shader)

編譯之后,查詢是否成功猴鲫,可以使用

glGetShaderiv(shader,name,param)

查詢一些其他信息

  • GL_COMPILE_STATUS 編譯狀態(tài)
  • GL_DELETE_STATUS 查詢刪除狀態(tài)
  • GL_INFO_LOG_LENGTH :日志長度
  • GL_SHADER_SOURCE_LENGTH
  • GL_SHADER_TYPE

創(chuàng)建和連接程序

創(chuàng)建程序砌溺,程序作為一個(gè)容器對象,可以將著色器附著在該對象上最終連接到可執(zhí)行文件上变隔。

//創(chuàng)建程序
GLunit glCreateProgame()

它返回一個(gè)句柄规伐,可以使用glDeleteProgram(progame)刪除程序。
下來就是將著色器附加到它的上面匣缘,使用

void glAttachShader(progame,shader);

需要注意的是它是將一個(gè)著色器對象添加在它的上面猖闪,所以有沒有數(shù)據(jù)鲜棠,有沒有編譯成功與否都是無所謂的。
分離glDetachShader(program,shader)
下一步就是進(jìn)行連接程序培慌。

glLinkProgram(program)

uniform和屬性

一旦鏈接結(jié)束之后豁陆,需要進(jìn)行一些查詢,得到句柄吵护,uniform可以在一個(gè)程序之間共享盒音。

獲取和設(shè)置uniform

  • 查詢活動(dòng)的:可以得到程序中活動(dòng)的數(shù)量,一般的馅而,使用之后的是活躍的祥诽,沒有使用不能稱之為活躍的
  • 查詢unoiform的相關(guān)信息:
glGetActiveUniform(program,index,bufSize,length,size,typr,name)

使用glGetActiveUniform,您可以確定制服的幾乎所有屬性瓮恭。

  • 統(tǒng)一變量的名稱及其類型雄坪。
  • 您可以找出變量是否是數(shù)組,如果是屯蹦,數(shù)組中使用的最大元素是什么维哈。
  • 找到制服的位置需要制服的名稱,類型和大小也需要弄清楚如何加載數(shù)據(jù)。一旦我們有了制服的名字登澜,我們就可以使用glGetUniformLocation找到它的位置阔挠。
    制服位置是一個(gè)整數(shù)值,用于標(biāo)識制服在程序中的位置脑蠕。該位置值被隨后的調(diào)用用于加載帶有值的制服(例如购撼,glUniform1f)。

查詢uniform的位置

glGetUniformLocation

查詢uniform空郊,如果不是活動(dòng)份招,就返回-1,上面提到了可以查詢數(shù)組的大小狞甚,類型锁摔,這個(gè)函數(shù)有查詢到了位置,那么就可以根據(jù)不同的類型給uniform設(shè)置值了哼审。

一般的自己寫的shader就不需要查詢谐腰,自己寫,也可以知道類型和名稱涩盾,直接調(diào)用getUniformLocation就可以得到位置了

查詢屬性和設(shè)置屬性

同樣的可以查詢活躍的屬性十气,,您可以使用glGetActiveAttrib找到屬性的屬性春霍。然后有一組設(shè)置頂點(diǎn)數(shù)組的例程來加載頂點(diǎn)屬性值砸西。
得到屬性的位置,然后設(shè)置屬性值,后面會(huì)有專門的一章芹枷。

二進(jìn)制文件

之前說不是每個(gè)設(shè)備都存在一個(gè)編譯器的衅疙,目前使用并沒有見到過,等之后回來補(bǔ)充鸳慈。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末饱溢,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子走芋,更是在濱河造成了極大的恐慌绩郎,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件翁逞,死亡現(xiàn)場離奇詭異肋杖,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)熄攘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門兽愤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來彼念,“玉大人挪圾,你說我怎么就攤上這事≈鹕常” “怎么了哲思?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長吩案。 經(jīng)常有香客問我棚赔,道長,這世上最難降的妖魔是什么徘郭? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任靠益,我火速辦了婚禮,結(jié)果婚禮上残揉,老公的妹妹穿的比我還像新娘胧后。我一直安慰自己,他們只是感情好抱环,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布壳快。 她就那樣靜靜地躺著,像睡著了一般镇草。 火紅的嫁衣襯著肌膚如雪眶痰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天梯啤,我揣著相機(jī)與錄音竖伯,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛七婴,可吹牛的內(nèi)容都是我干的宏胯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼本姥,長吁一口氣:“原來是場噩夢啊……” “哼肩袍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起婚惫,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤氛赐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后先舷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體艰管,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年蒋川,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了牲芋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,561評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡捺球,死狀恐怖缸浦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情氮兵,我是刑警寧澤裂逐,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站泣栈,受9級特大地震影響卜高,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜南片,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一掺涛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧疼进,春花似錦薪缆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至赔癌,卻和暖如春诞外,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背灾票。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工峡谊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓既们,卻偏偏與公主長得像濒析,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子啥纸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容