GLSL
背景
随着近年来绘图卡的进步, 已在渲染管线中的顶点(vertex)和片断(fragment)层次中,加入更具弹性的新功能。 达到在这个层次中,使用片断和顶点着色器的可编程性。
最初这个功能是以组合语言撰写着色器来达到的。组合语言对开发者的使用是不直观而复杂的。OpenGL ARB 建立了 OpenGL 着色语言,为 GPU 的程式设计提供更加直观的方法,当维护开放标准的时候,就有助于带动 OpenGL 的历史。
最初 OpenGL 1.5 是以扩充形式引入,后来 OpenGL ARB 在OpenGL2.0 核心中正式纳入 GLSL。自 1992 年建立的OpenGL1.0 起,OpenGL2.0 是第一个OpenGL的大修改版。
使用 GLSL 有如下好处:
具有跨平台的相容性,包括Macintosh、Windows和Linux等操作系统。
所有支援 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 着色器不是独立的应用程序;其需要使用OpenGLAPI 的应用程序。C、C++、C#、Delphi 和 Java 皆支援OpenGLAPI,且支援 OpenGL 着色语言。
GLSL 着色器本身只是简单的字串集,这些字串集会传送到硬件厂商的驱动程式,并从程式内部的 OpenGL API 进入点编译。着色器可从程式内部或读入纯文字档来即时建立,但必须以字串形式传送到驱动程式。
用以编译、连结并传送参数到 GLSL 程式的 API 集,已在三个 OpenGL 扩展中规定,且即将成为OpenGL 2.0核心的一部分。这些 API 可在以下扩展中找到:
ARB 顶点着色器
ARB 片断着色器
ARB 着色器物件
GLSL 顶点着色器的简单范例
voidmain(void){gl_Position=ftransform();}
GLSL 片断着色器的简单范例
voidmain(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 界面,可以跨平台。
参考文献
Rost, Randi J. OpenGL Shading Language . t ed. Pearson Education, Inc, 2004. ISBN 0-321-19789-5
Kessenich, John, & Baldwin, David, & Rost, Randi. The OpenGL Shading Language . Version 1.10.59. 3Dlabs, Inc. Ltd.
参阅
着色语言
HLSL,高阶着色语言
Cg,nVIDIA 的着色语言
程式设计
电脑图形学
OpenGL
着色器
来自 Lighthouse3D 的教学和范例
来自 NeHe Productions 的教学和范例
GLSL 开发环境
RenderMonkey 着色器开发环境
Geist3D 绘图引擎,内含 GLSL 编辑器
Lumina 跨平台 GLSL IDE
免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。
- 有价值
- 一般般
- 没价值