GLSL存儲限定符和布局限定符

      網友投稿 1159 2022-05-29

      1 存儲限定符

      在OpenGL的渲染管線上,頂點數據不是批量處理的,而是一個頂點一個頂點逐一處理的。也就是說,頂點著色器程序每次只處理一個頂點。同樣的,后續的著色器也是逐面片、逐圖元、逐片元處理的。

      假如一個模型有1萬個頂點,則頂點著色器程序需要運行1萬次,每次輸入的頂點數據(包括法向量、紋理坐標等)是各不相同的。但是也有在這1萬運行中保持不變的數據,比如在該模型的此次渲染期間,投影矩陣、視點矩陣不會改變,大多數情況下,燈光參數也不會改變。

      對于一個模型的一次渲染,在GLSL140版本之前,將頂點著色器程序每次運行時都會改變的數據稱之為attribute,將每次運行保持不變的數據稱之為uniform,將著色器之間順序傳遞的數據稱之為varying——這就是所謂的存儲限定符。

      我們可以向著色器程序傳入attribute類型的數據和uniform類型的數據,但不能傳入varying類型的數據。下圖描述了attribute、uniform和varying的作用和用法。

      也許是為了強化渲染管線數據的數據輸入輸出概念,自GLSL140版本開始,存儲限定符attribute和varying不再被推薦使用,取而代之的是in和out。顯然,in和out與attribute和varying并不是一一對應的關系。

      除了一直不變的uniform,以及后來增補的in和out之外,還有一個存儲限定符const,用來向著色器傳遞只讀變量。

      2 布局限定符

      從GLSL330版本開始,GLSL增加了一個新的概念:布局管理。布局管理使用一個新的限定符layout,用來設置著色器輸入/輸出變量接口布局。下面的例子使用layout為in變量設置了接口位置,可以在渲染時直接使用這些接口而無需通過訪問著色器程序獲取它們。

      #version 330 core layout(location=0) in vec4 a_Position; layout(location=1) in vec4 a_Normal; layout(location=3) in vec4 a_TexCoord;

      如果變量是一個數組,則數組的每一個元素都會占據一個location的編號位置。下面的代碼中,u_Matrix是一個長度為3的數組,所以它將占據5、6、7三個位置。

      layout(location=5) uniform mat4 u_Matrix[3];

      對于out變量,layout同樣有效,且location的編號獨立于in變量。

      layout(location=0) out v_color; layout(location=1) out v_TexCoord;

      限定符layout的另一個用途是控制UBO(Uniform Buffer Object)數據塊的布局,這需要另外幾個布局限定符,見下表。

      下面的代碼,共享了一個uniform數據塊,以行主序方式存儲數據,多個限定符之間以逗號分隔。

      layout(shared, row_major) uniform ublock_name {...};

      GLSL的存儲限定符和布局限定符

      需要特別說明的是,盡管在聲明uniform數據塊時已經提供了數據塊的名字,但不能將數據塊名視為uniform變量的父名稱。這意味著不同的uniform數據塊中如果存在相同的uniform變量名,就會造成編譯錯誤。

      OpenGL 渲染

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Lucene倒排索引原理探秘(2)
      下一篇:【OBS對象存儲服務】桶內對象數量減少或是突然無法找到處理流程
      相關文章
      国产亚洲精品AA片在线观看不加载| 日韩精品亚洲专区在线影视| 国产精品亚洲w码日韩中文| 蜜桃传媒一区二区亚洲AV| 中文字幕乱码亚洲精品一区| 亚洲mv国产精品mv日本mv| 亚洲最大黄色网址| 亚洲国产美女精品久久| 亚洲春色另类小说| 亚洲六月丁香六月婷婷蜜芽 | 精品国产亚洲男女在线线电影 | 亚洲成a人片在线观| 亚洲网站在线免费观看| 亚洲成人高清在线观看| 亚洲专区中文字幕| 亚洲AV无码一区二区三区牛牛| 456亚洲人成影院在线观| 日本亚洲免费无线码 | 亚洲高清毛片一区二区| mm1313亚洲国产精品无码试看| 国产精品成人亚洲| 亚洲精品视频在线看| 亚洲最大AV网站在线观看| 国产成人精品日本亚洲网站| 亚洲av永久无码制服河南实里| 亚洲高清在线视频| 亚洲白色白色在线播放| 久久精品国产亚洲AV蜜臀色欲| 亚洲天然素人无码专区| 亚洲1区2区3区精华液| 亚洲欧洲日本在线| 亚洲国产日韩在线视频| 久久亚洲日韩精品一区二区三区 | 亚洲国产精品13p| 亚洲日韩乱码中文无码蜜桃臀网站| 亚洲精品无码专区久久久| 久久久久亚洲Av片无码v| 亚洲欧洲国产综合| 亚洲日韩AV一区二区三区四区| 色噜噜噜噜亚洲第一| 国产亚洲精品无码拍拍拍色欲|