在看shader程式的時候,會發現在變數型別的前面總是會有些不同的單詞符號,包括了uniform,attribute,varing,in,out一系列;接下來對這些東西進行乙個總結;
屬性限定符attribute用來定義一些特殊的變數,這些變數的值可以由應用程式提供,通過opengl es傳遞給頂點著色器程式。屬性限定符只能被用於頂點著色器中,在其他任何型別的著色器程式中使用屬性限定符都會編譯錯誤。
使用屬性限定符修飾的變數在頂點著色器中是唯讀的,它的值來自應用程式通過opengl es api或者頂點陣列的一部分傳遞給頂點著色器,其型別只能是float、vec2、vec3、vec4、mat2、mat3或者mat4。
可以通過glgetintegerv()方法查詢gl_max_vertex_attribute,其表示當前圖形硬體支援的最大屬性儲存空間數量。
易變數限定符提供了一種介面和功能,它在頂點著色器和片段著色器中建立起了某種聯絡。易變變數在每個頂點被設定乙個值,然後在乙個圖元範圍內被線性差值。如果採用單重取樣,每個插值表示的是對應片段中心的值;如果採用多重取樣,每個插值可能來自取樣區域內任意乙個畫素點。
片段著色器可以讀取易變變數的值,這個值是根據當前片段在圖元中的位置被插值計算的。片段著色器不能對易變變數進行賦值。
記得,其在頂點和片段著色中必須使用相同的型別和名稱,否則編譯失敗。
同樣的,可以通過glgetintegerv()方法查詢gl_max_varying_vectoes,其表示當前圖形硬體支援的最大易變變數的數量。
在新的glsl語言中,變化了相關的屬性-頂點輸入變數用於指定頂點著色器中每個頂點的輸入,用in關鍵字指定。同樣輸出使用out。
同時,在變數之前使用了layout限定符,這種情況下的布局限定符用於指定頂點屬性的索引,如果沒有指定,鏈結程式將自動為頂點輸入變數分配位置。
在gl es中,才會使用精度限定符。。。
著色器語言
metal shading language metal 的著色器用的是一門專門的語言,叫metal shading language 大概可以叫msl?既然是一門專門的語言,它是一門單獨的語言,但它不是全新的。它是 c 14 的乙個子集,然後做了不多的擴充套件。和glsl比,尤其是熟悉 c 的同學...
C語言之變數屬性
1.c語言的變數屬性 c語言中的變數可以有自己的屬性 在定義變數的時候可以加上 屬性 關鍵字 屬性 關鍵字指明變數的特有意義 語法 property type var name 示例 2.auto關鍵字 auto即c語言中區域性變數的預設屬性 auto表明將被修飾的變數儲存於棧上 編譯器預設所有的區...
C語言之變數型別和儲存方式
變數可以分為全域性變數 靜態全域性變數 區域性變數和靜態區域性變數 變數的宣告有兩種情況 1 一種是需要建立儲存空間的 定義性宣告 例如int a 在生命的時候就已經建立了儲存空間。2 另一種是不需要建立儲存空間的 引用性宣告 例如extern int a 其中變數a是在別的檔案中定義的。記憶體區域...