GLSL - OpenGL Shading Language 也稱作 GLslang,是一個以C語言為基礎的高階着色語言。它是由 OpenGL ARB 所建立,提供開發者對繪圖管線更多的直接控制,而無需使用匯編語言或硬件規格語言。
背景
隨着近年來繪圖卡的進步, 底層頂點(vertex)和片段(fragment)的渲染管線中加入更多更具彈性的新功能。 這個層次的可編程性由片段和頂點着色器實現。
最初這個功能是以匯編語言撰寫着色器來達到,不直觀而複雜。OpenGL ARB 建立了 OpenGL 着色語言,為 GPU 的程式設計提供更加直觀的方法,同時維護了 OpenGL 一向的開放標準。
最初作為 OpenGL 1.4 的插件,後來由 OpenGL ARB 在2004 OpenGL 2.0 核心中正式納入,是自 1992 年 OpenGL 1.0 發佈起第一個 OpenGL 的大改版。
使用 GLSL 有如下好處:
詳細資料
OpenGL 着色語言規格定義了 22 個基本資料類型,有些用法與 C 相同,其它的是繪圖處理器特有的。
- void – 用於沒有返回值的函式
- bool – 條件類型,其值可以是真或假
- int – 帶負號整數
- float – 浮點數
- vec2 – 2 個浮點數組成的向量
- vec3 – 3 個浮點數組成的向量
- vec4 – 4 個浮點數組成的向量
- bvec2 – 2 個布林組成的向量
- bvec3 – 3 個布林組成的向量
- bvec4 – 4 個布林組成的向量
- ivec2 – 2 個整數組成的向量
- ivec3 – 3 個整數組成的向量
- ivec4 – 4 個整數組成的向量
- mat2 – 浮點數的 2X2 矩陣
- mat3 – 浮點數的 3X3 矩陣
- mat4 – 浮點數的 4X4 矩陣
- sampler1D – 用來存取一維紋理的句柄(handle)(或:操作,作名詞解。)
- sampler2D – 用來存取二維紋理的句柄
- sampler3D – 用來存取三維紋理的句柄
- samplerCube – 用來存取立方映射紋理的句柄
- sampler1Dshadow – 用來存取一維深度紋理的句柄
- sampler2Dshadow – 用來存取二維深度紋理的句柄
OpenGL 着色語言提供類似於 C語言的運算子。給開發者編寫着色器的靈活性。GLSL 包含了 C和C++運算子,除了位元運算子和指標以外。
類似於 C語言,GLSL 支援迴圈和分支,包括 if、else、if/else、for、do-while、break、continue 等。
支援使用者定義函式,且各種常用的函式也已內建。這也就讓繪圖卡製造商,能夠在硬件層次上最佳化這些內建的函式。許多函式與 C 語言相同,如 exp() 以及 abs(),其它繪圖編程特有的,如 smoothstep() 以及 texture2D()。
GLSL 着色器不是獨立的應用程式;其需要使用 OpenGL API 的應用程式。C、C++、C#、Delphi 和 Java 皆支援 OpenGL API,且支援 OpenGL 着色語言。
GLSL 着色器本身只是簡單的字串集,這些字串集會傳送到硬件廠商的驅動程式,並從程式內部的 OpenGL API 進入點編譯。着色器可從程式內部或讀入純文字檔來即時建立,但必須以字串形式傳送到驅動程式。
用以編譯、連結並傳送參數到 GLSL 程式的 API 集,已在三個 OpenGL 擴展中規定,且即將成為 OpenGL 2.0(頁面存檔備份,存於互聯網檔案館) 核心的一部分。這些 API 可在以下擴展中找到:
void main(void)
{
gl_Position = ftransform();
}
void main(void)
{
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
GLSL 着色器可以事先建立和測試,現有以下 GLSL 開發工具:
參考文獻
- Rost, Randi J. OpenGL Shading Language. 1st ed. Pearson Education, Inc, 2004. ISBN 0-321-19789-5
- Kessenich, John, & Baldwin, David, & Rost, Randi. The OpenGL Shading Language. Version 1.10.59. 3Dlabs, Inc. Ltd. https://web.archive.org/web/20070404171317/http://developer.3dlabs.com/documents/index.htm
外部連結
參見
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.