日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GLSL预定义变量

發布時間:2025/7/25 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GLSL预定义变量 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

GLSL預定義變量

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

{

??vec4gl_Position;

??floatgl_PointSize;

??float?gl_ClipDistance[];

}

為輸出定義了一個block接口。

gl_Position是當前頂點的輸出坐標(如果沒有幾何著色器,是在clip-space)。指定這個值并不是必須的。但是不指定可能會導致意想不到的結果。如果你使用轉換反饋或者是關閉了光柵化,或者是使用采用用戶定義輸出產生坐標的幾何著色器,則可以忽略指定這個值。

gl_PointSize指定了點的寬度和高度。只有在繪制點的時候指定它的值才是必須的。

gl_ClipDistance允許著色器設置一個頂點到每個剪切平面的距離。正值表示頂點在剪切平面的里面(后面),而負值表示在剪切平面的外面(前面)。

3)幾何著色器輸入

in?gl_PerVertex

{

??vec4?gl_Position;

??float?gl_PointSize;

??float?gl_ClipDistance[];

}?gl_in[];

?

in?int?gl_PrimitiveIDIn;

gl_PerVertex包含了從前面的頂點著色器傳送過來的值。

注意:在幾何著色器中,他們有前綴gl_in,是一個block的數組。這個數組的大小依賴于用于這個幾何著色器的輸入的layout關鍵詞。用戶不用以一個特定的大小重新聲明這個block,系統會自動完成。可以用函數length()獲得其大小。

gl_PrimitiveIDIn是在這次渲染過程中的圖元數量,即先前被glDraw()調用所處理的圖元數量。

GLSL4.00及其以上版本還有以下定義:

in?int?gl_InvocationID;

幾何著色器可以被調用多次,這個值指定了當前調用。

4)幾何著色器輸出

out?gl_PerVertex

{

??vec4?gl_Position;

??float?gl_PointSize;

??float?gl_ClipDistance[];

};

?

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_PositionW分量)

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

{

????float?near;

????float?far;

????float?diff;

};

uniform?gl_DepthRangeParameters?gl_DepthRange;

這個struct提供了對glDepthRange近、遠值的訪問。diff等于farnear的差。

7)片斷著色器輸出

out?float?gl_FragDepth;

它是要被寫入到深度緩沖區的值。也將被用于深度測試。片斷著色器不一定要指定它的值。它可能被gl_FragCoord.z.自動填充。需要注意的是:如果在某處指定,在其他地方也必須要進行指定。

GLSL4.00增加了如下輸出:

out?int?gl_SampleMask[];

當采用多重采樣渲染時,它會被寫入。

總結

以上是生活随笔為你收集整理的GLSL预定义变量的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。