GLSL

出自Local Chinese Wikipedia
跳至導覽 跳至搜尋
GLSL
File:GLSL Logo (Unofficial).svg
非官方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]
源代碼庫
  • {{URL|example.com|可选的显示文本}}
Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
引擎
    Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
    平台跨平台
    類型編程語言
    許可協議
      Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
      File:Linux kernel and OpenGL video games.svg
      GLSL基本框架

      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 在2004 OpenGL 2.0 核心中正式納入,是自 1992 年 OpenGL 1.0 發布起第一個 OpenGL 的大改版。

      使用 GLSL 有如下好處:

      • 具有跨平台的相容性,包括 MacintoshWindowsLinux 等作業系統。
      • 編寫的著色器可以在所有支援 OpenGL 著色語言的繪圖卡上使用。
      • 允許廠商為特定的繪圖卡架構設計最佳化的代碼。

      詳細資料[編輯]

      資料類型[編輯]

      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 可在以下擴展中找到:

      GLSL 頂點著色器的簡單範例[編輯]

      void main(void)
      {
          gl_Position = ftransform();
      }
      

      GLSL 片斷著色器的簡單範例[編輯]

      void main(void)
      {
          gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
      }
      

      工具[編輯]

      GLSL 著色器可以事先建立和測試,現有以下 GLSL 開發工具:

      • RenderMonkey頁面存檔備份,存於網際網路檔案館) - 這個軟體是由 ATI 製作的,提供界面用以建立、編譯和除錯 GLSL 著色器,和 DirectX 著色器一樣。僅能在 Windows 平台上執行。
      • GLSLEditorSample - 在 Mac OS X 上,它是目前唯一可用的程式,其提供著色器的建立和編譯,但不能除錯。它是 cocoa 應用程式,僅能在 Mac OS X 上執行。
      • Lumina頁面存檔備份,存於網際網路檔案館) - Lumina 是新的 GLSL 開發工具。其使用 QT 界面,可以跨平台。

      參見[編輯]

      參考文獻[編輯]

      外部連結[編輯]

      Module:Authority_control第183行Lua錯誤:attempt to index field 'wikibase' (a nil value)

      1. The OpenGL® Shading Language, Version 4.60.8.