GLSL

维基百科,自由的百科全书
GLSL基本框架

GLSL - OpenGL Shading Language 也称作 GLslang,是一个以C语言为基础的高阶着色语言。它是由 OpenGL ARB 所建立,提供开发者对绘图管线更多的直接控制,而无需使用汇编语言或硬件规格语言。

背景[编辑]

随着近年来绘图卡的进步, 已在渲染管线中的顶点(vertex)和片段(fragment)层次中,加入更具弹性的新功能。 达到在这个层次中,使用片段和顶点着色器的可编程性。

最初这个功能是以组合语言撰写着色器来达到的。组合语言对开发者的使用是不直观而复杂的。OpenGL ARB 建立了 OpenGL 着色语言,为 GPU 的程式设计提供更加直观的方法,当维护开放标准的时候,就有助于带动 OpenGL 的历史。

最初 OpenGL 1.5 是以扩充形式引入,后来 OpenGL ARB英语OpenGL Architecture Review BoardOpenGL 2.0 核心中正式纳入 GLSL。自 1992 年建立的OpenGL 1.0 起,OpenGL 2.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 界面,可以跨平台。

参考文献[编辑]

外部链接[编辑]

参见[编辑]