OpenGLES入門(三)與著色器交互

1. 獲取著色器程序內(nèi)成員變量的id冻河,也可以理解為句柄原环、指針。

    glGetAttribLocation方法:獲取著色器程序中婚脱,指定為attribute類型變量的id。

    glGetUniformLocation方法:獲取著色器程序中勺像,指定為uniform類型變量的id障贸。

    如:

    // 獲取指向著色器中aPosition的index

    maPositionHandle = GLES20.glGetAttribLocation(mProgram, "aPosition");

    // 獲取指向著色器中uMVPMatrix的index

    muMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix");

2.傳遞數(shù)據(jù)

使用上一節(jié)獲取的指向著色器相應(yīng)數(shù)據(jù)成員的各個id,就能將我們自己定義的頂點數(shù)據(jù)吟宦、顏色數(shù)據(jù)等等各種數(shù)據(jù)傳遞到著色器當中了篮洁。

// 使用shader程序
GLES20.glUseProgram(mProgram);
// 將最終變換矩陣傳入shader程序
GLES20.glUniformMatrix4fv(muMVPMatrixHandle, 1, false, MatrixState.getFinalMatrix(), 0);
// 設(shè)置緩沖區(qū)起始位置
mRectBuffer.position(0);
// 頂點位置數(shù)據(jù)傳入著色器
GLES20.glVertexAttribPointer(maPositionHandle, 3, GLES20.GL_FLOAT, false, 20, mRectBuffer);
// 頂點顏色數(shù)據(jù)傳入著色器中
GLES20.glVertexAttribPointer(maColorHandle, 4, GLES20.GL_FLOAT, false, 4*4, mColorBuffer);
// 頂點坐標傳遞到頂點著色器
GLES20.glVertexAttribPointer(maTextureHandle, 2, GLES20.GL_FLOAT, false, 20, mRectBuffer);
// 允許使用頂點坐標數(shù)組
GLES20.glEnableVertexAttribArray(maPositionHandle);
// 允許使用頂點顏色數(shù)組
GLES20.glDisableVertexAttribArray(maColorHandle);
// 允許使用定點紋理數(shù)組
GLES20.glEnableVertexAttribArray(maTextureHandle); 
// 綁定紋理
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texture);
// 圖形繪制
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_FAN, 0, 4);

2.1 glVertexAttribPointer,定義頂點屬性數(shù)組殃姓。

函數(shù)原型:
void glVertexAttribPointer (int index, int size, int type, boolean normalized, int stride, Buffer ptr )
參數(shù)含義:
  index  指定要修改的頂點著色器中頂點變量id袁波;
  size   指定每個頂點屬性的組件數(shù)量。必須為1蜗侈、2篷牌、3或者4。如position是由3個(x,y,z)組成踏幻,而顏色是4個(r,g,b,a))枷颊;
  type   指定數(shù)組中每個組件的數(shù)據(jù)類型。可用的符號常量有GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT,GL_UNSIGNED_SHORT, GL_FIXED, 和 GL_FLOAT夭苗,初始值為GL_FLOAT信卡;
  normalized  指定當被訪問時,固定點數(shù)據(jù)值是否應(yīng)該被歸一化(GL_TRUE)或者直接轉(zhuǎn)換為固定點值(GL_FALSE)题造;
  stride      指定連續(xù)頂點屬性之間的偏移量傍菇。如果為0,那么頂點屬性會被理解為:它們是緊密排列在一起的界赔。初始值為0桥嗤。如果normalized被設(shè)置為GL_TRUE,意味著整數(shù)型的值會被映射至區(qū)間[-1,1](有符號整數(shù))仔蝌,或者區(qū)間[0,1](無符號整數(shù)),反之荒吏,這些值會被直接轉(zhuǎn)換為浮點值而不進行歸一化處理敛惊;
  ptr  頂點的緩沖數(shù)據(jù)。

2.2 啟用或者禁用頂點屬性數(shù)組绰更。 調(diào)用glEnableVertexAttribArray和glDisableVertexAttribArray傳入?yún)?shù)index瞧挤。如果啟用,那么當glDrawArrays或者glDrawElements被調(diào)用時儡湾,頂點屬性數(shù)組會被使用特恬。

2.3 glActiveTexture, 選擇活動紋理單元徐钠。

函數(shù)原型:
void glActiveTexture (int texture)
參數(shù)含義:
texture指定哪一個紋理單元被置為活動狀態(tài)癌刽。texture必須是GL_TEXTUREi之一,其中0 <= i < GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS尝丐,初始值為GL_TEXTURE0显拜。
glActiveTexture()確定了后續(xù)的紋理狀態(tài)改變影響哪個紋理,紋理單元的數(shù)量是依據(jù)該紋理單元所被支持的具體實現(xiàn)爹袁。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末远荠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子失息,更是在濱河造成了極大的恐慌譬淳,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盹兢,死亡現(xiàn)場離奇詭異邻梆,居然都是意外死亡,警方通過查閱死者的電腦和手機绎秒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門确虱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事校辩【轿剩” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵宜咒,是天一觀的道長惠赫。 經(jīng)常有香客問我,道長故黑,這世上最難降的妖魔是什么儿咱? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮场晶,結(jié)果婚禮上混埠,老公的妹妹穿的比我還像新娘。我一直安慰自己诗轻,他們只是感情好钳宪,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著扳炬,像睡著了一般吏颖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上恨樟,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天半醉,我揣著相機與錄音,去河邊找鬼劝术。 笑死缩多,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的养晋。 我是一名探鬼主播瞧壮,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼匙握!你這毒婦竟也來了咆槽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤圈纺,失蹤者是張志新(化名)和其女友劉穎秦忿,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛾娶,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡灯谣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蛔琅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胎许。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出辜窑,到底是詐尸還是另有隱情钩述,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布穆碎,位于F島的核電站牙勘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏所禀。R本人自食惡果不足惜方面,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望色徘。 院中可真熱鬧恭金,春花似錦、人聲如沸褂策。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辙培。三九已至,卻和暖如春邢锯,著一層夾襖步出監(jiān)牢的瞬間扬蕊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工丹擎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留尾抑,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓蒂培,卻偏偏與公主長得像再愈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子护戳,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

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