非官方logo | |
| 原作者 | OpenGL ARB(英语:OpenGL Architecture Review Board) |
|---|---|
| 開發者 | Khronos Group |
| 首次发布 | 2002年7月24日,23年前(2002-07-24) (作为一个扩展) |
| 当前版本 | 4.60.8(2023年8月14日,2年前(2023-08-14)[1]) |
| 平台 | 跨平台 |
| 类型 | 编程语言 |
| 网站 | www |

GLSL -OpenGL Shading Language 也稱作GLslang,是一個以C語言為基礎的高階著色語言。它是由OpenGL ARB(英语:OpenGL Architecture Review Board) 所建立,提供開發者對繪圖管線更多的直接控制,而無需使用汇编语言或硬體規格語言。
隨著近年來繪圖卡的進步,底层頂點(vertex)和片段(英语:Fragment (computer graphics))(fragment)的渲染管線中加入更多更具彈性的新功能。這個層次的可編程性由頂點著色器和像素着色器實現。
最初這個功能是以匯編語言撰寫著色器來達到,不直觀而複雜。OpenGL ARB 建立了 OpenGL 著色語言,為 GPU 的程式設計提供更加直觀的方法,同時維護了 OpenGL 一向的開放標準。
最初作為 OpenGL 1.4 的插件,後來由OpenGL ARB(英语:OpenGL Architecture Review Board) 在2004OpenGL 2.0 核心中正式納入,是自 1992 年OpenGL 1.0 發布起第一個OpenGL 的大改版。
使用 GLSL 有如下好處:
OpenGL 著色語言規格定義了 22 個基本資料類型,有些用法與C 相同,其它的是繪圖處理器特有的。
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 可在以下擴展中找到:
voidmain(void){gl_Position=ftransform();}
voidmain(void){gl_FragColor=vec4(1.0,0.0,0.0,1.0);}
GLSL 著色器可以事先建立和測試,現有以下 GLSL 開發工具: