GLSL

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

GLSL基本框架

背景

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

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

最初 OpenGL 1.5 是以扩充形式引入,后来 OpenGL ARBOpenGL 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 界面,可以跨平台。

参考文献

外部链接

参见

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.