關於GLSL中語法和呼叫規則

2021-07-26 04:51:17 字數 1248 閱讀 9863

glsl是什麼就不多說了。這裡只介紹一下glsl中一些限定符。

glsl中包含兩類具有定義性質的符號,一類是和c++中定義變數的一樣的符號,用來說明存放資料的型別,如float,int,bool。還有一類是的功能類似於c++中的private,protect,public,是用來說明變數被訪問的方式,glsl中常用的限定符包含三個,uniform,attribute 以及 varying,稱為限定符(還有乙個const,就不多說了)。

uniform限定了該變數是隨著圖元變化而變化的,也就是說在乙個圖元被光柵化過程中是不會變的。

attribute限定了該變數是隨著頂點變化而變化的,如,乙個三角形圖元,三個頂點的都可以繫結不同的attribute屬性,但是三個頂點只能使用乙個uniform屬性。

其中,attribute只能在 vertex shader中使用,而不能在 fragment shader中使用。uniform能在兩種型別的shader中使用。但是,著兩種限定符修飾的變數都是唯讀,不可寫的。

varying變數比較特殊了,這個限定符號修飾的變數作用主要是在vertex shader 和 fragment shader 之間進行傳輸資料的,在vertex shader中是讀寫都沒有問題,但是在fragment  shader中唯讀不可寫。並且,在從vertex shader到 fragment shader之間,要被固定流水線進行插值(個人感覺是在光柵化階段進行插值的),並且插值方式採用的是透視校正方式完成的(和透視紋理對映一樣),而不是線性插值。所以,varying變數不但被vertex shader改變,而且被固定流水線改變。

可以看出來,三種限定符從圖元角度來看是越來越精細的,uniform是對整個圖元(麵片)而言,attribute是對圖元(麵片)上的幾個關鍵點而言,varying則精細到了圖元(麵片)中的任何乙個點。同時,在glsl中也使用上述三種限定符定義了一些內建的變數,免去了很多麻煩。

這裡提一下,在glsl中定義了兩個gl_color變數,乙個是attribute修飾,只在vertex shader中使用,唯讀。還有乙個是varying修飾的,但是只在fragment shader中使用,所以不衝突,並且varying修飾的gl_color是由gl_frontcolor 和gl_backcolor自動轉變的,而gl_frontcolor 和gl_backcolor又是由attribut gl_color自動轉化的。(

對於opengl和glsl的互動中,要設定uniform的值,要在呼叫gluseprogram以後才可以設定,但是在編譯鏈結glsl程式以後就可以開始獲得uniform型別變數的位址了。

CSS語法和規則

important css1 提公升指定樣式條目的應用優先權。comment css1 css中的注釋 這裡是注釋內容 import css1 3 指定匯入的外部樣式表及目標 該規則必須在樣式表頭部最先宣告 charset css2 在外部樣式表檔案內使用。指定該樣式表使用的字元編碼。media c...

5 基本的語法說明,呼叫規則

using system namespace public double getarea public void display length 呼叫了乙個成員變數 console.writeline width width 呼叫了乙個成員變數 console.writeline area getar...

if測試和語法規則

if語句是選取要執行的操作,這是python中主要的選擇工具,代表python程式所擁有的大多數邏輯。if語句的一般形式如下 if elif else if語句基本構成 if 條件 if語句塊 else else語句if語句用於比較運算中結合邏輯運算子 a 50 if a 100 and a 10 ...