glsl為不同的渲染階段定義了一些特定的變數。這些預定義(也叫做
內建變數)有特定的屬性。所有的預定義變數都以gl_
開頭。使用者定義的變數不能以此開頭。
下面分類進行介紹。
(1)頂點著色器輸入
in int gl_vertexid;
in int gl_instanceid;
gl_vertexid是當前被處理的頂點的索引。對於
array rendering
,它是當前頂點在陣列中的索引;對於
indexed rendering
,它是從
element buffer
中獲取的索引值。
gl_instanceid指出了當前被渲染的
instance
,當使用
instancedrendering
的時候。
(2)頂點著色器輸出
out gl_pervertex
為輸出定義了乙個block
介面。
gl_position是當前頂點的輸出座標(如果沒有幾何著色器,是在clip-space
)。指定這個值並不是必須的。但是不指定可能會導致意想不到的結果。如果你使用轉換反饋或者是關閉了光柵化,或者是使用採用使用者定義輸出產生座標的幾何著色器,則可以忽略指定這個值。
gl_pointsize指定了點的寬度和高度。只有在繪製點的時候指定它的值才是必須的。
gl_clipdistance允許著色器設定乙個頂點到每個剪下平面的距離。正值表示頂點在剪下平面的裡面(後面),而負值表示在剪下平面的外面(前面)。
(3)幾何著色器輸入
in gl_pervertex
gl_in;
in int gl_primitiveidin;
gl_pervertex包含了從前面的頂點著色器傳送過來的值。
,系統會自動完成。可以用函式length()獲得其大小。
gl_primitiveidin是在這次渲染過程中的圖元數量,即先前被gldraw()呼叫所處理的圖元數量。
glsl4.00及其以上版本還有以下定義:
in int gl_invocationid;
幾何著色器可以被呼叫多次,這個值指定了當前呼叫。
(4)幾何著色器輸出
out gl_pervertex
;out int gl_primitiveid;
out int gl_layer;
gl_pervertex和頂點著色器階段有相同的意義。
gl_primitiveid是圖元的使用者定義識別符號。它直接被傳送到片斷著色器。如果片斷著色器使用了它的相關輸入但是幾何著色器又沒有指定它的值,那麼它的值就是預定義的(如果沒有幾何著色器opengl
會自動生成)。
gl_layer用於渲染到layeredframebuffer objects,指定了特定圖元要被渲染到的layer。
glsl4.10還定義了如下輸出:
out int gl_viewportindex;
它代表了當前圖元要被採用得視口變換了裁剪測試。使用和gl_layer類似。
(5)片斷著色器輸入
in vec4 gl_fragcoord;
in bool gl_frontfacing;
in float gl_clipdistance;
in vec2 gl_pointcoord;
in int gl_primitiveid;
gl_fragcoord包含了當前片斷的window-space
座標。如果入戶沒過載它,其
z分量是要寫入到深度緩衝區的。其
w分量是
1/wclip(wclip
是頂點或幾何著色器的輸出
gl_position的w
分量)gl_frontfacing:如果圖元從其前面**,則為真,否則為假。
gl_clipdistance包含了頂點著色器的輸出,不過是依據圖元進行線性插值後的。
gl_pointcoord:點內部的位置,指定了片斷的位置。它是被歸一化了的值,位於
[0,1]
。(0,0)
原點位置依賴於
opengl
的點座標設定,預設是在左下角。
gl_primitiveid是幾何著色器的輸出,如果沒有使用幾何著色器,由
opengl
產生。代表了被光柵化的圖元索引。
glsl4.00增加了一下輸入:
in int gl_sampleid;
in vec2 gl_sampleposition;
in int gl_samplemaskin;
指定了畫素區域sample
的一些屬性。
(6)片斷著色器全域性變數
struct gl_depthrangeparameters
;uniform gl_depthrangeparameters gl_depthrange;
這個struct
提供了對
gldepthrange
近、遠值的訪問。
diff
等於far
和near
的差。
(7)片斷著色器輸出
out float gl_fragdepth;
它是要被寫入到深度緩衝區的值。也將被用於深度測試。片斷著色器不一定要指定它的值。它可能被gl_fragcoord.z.自動填充。需要注意的是:如果在某處指定,在其他地方也必須要進行指定。
glsl4.00增加了如下輸出:
out int gl_samplemask;
當採用多重取樣渲染時,它會被寫入。
OpenGL4 0 GLSL預定義變數
glsl為不同的渲染階段定義了一些特定的變數。這些預定義 也叫做內建變數 有特定的屬性。所有的預定義變數都以gl 開頭。使用者定義的變數不能以此開頭。下面分類進行介紹。1 頂點著色器輸入 in intgl vertexid in intgl instanceid gl vertexid是當前被處理的...
預定義變數
不包含副檔名的目標檔名稱。所有的依賴檔案,以空格分開,並以出現的先後為序,可能包含重複的依賴檔案。第乙個依賴檔案的名稱。所有的依賴檔案,以空格分開,這些依賴檔案的修改日期比目標的建立日期晚。目標的完整名稱。所有的依賴檔案,以空格分開,不包含重複的依賴檔案。如果目標是歸檔成員,則該 變數表示目標的歸檔...
PHP SEVER預定義變數
server php self 當前正在執行指令碼的檔名,與 document root相關。server argv 傳遞給該指令碼的引數。server argc 包含傳遞給程式的命令列引數的個數 如果執行在命令列模式 server gateway inte ce 伺服器使用的 cgi 規範的版本。...