GLSL

维基百科,自由的百科全书
跳转到导航 跳转到搜索
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.