博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GLSL 简介
阅读量:5123 次
发布时间:2019-06-13

本文共 2238 字,大约阅读时间需要 7 分钟。

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

目录

 
 [] 

[]背景

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

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

最初 OpenGL 1.5 是以扩充形式引入,后来  在  2.0 核心中正式纳入 GLSL。自 1992 年建立的 1.0 起, 2.0 是第一个  的大修改版。

使用 GLSL 有如下好处:

  • 具有的相容性,包括 、 和  等操作系统。
  • 所有支援 OpenGL 着色语言的绘图卡,都可以用来编写着色器。
  • 允许厂商为特定的绘图卡产生最佳化的代码。

[]详细资料

[]资料类型

OpenGL 着色语言规格定义了 22 个基本资料类型,有些用法与  相同,其它的是绘图处理器特有的。

  • 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 着色语言提供类似于 的运算子。给开发者编写着色器的灵活性。GLSL 包含了 ,除了位元运算子和以外。

[]函式和控制结构

类似于 ,GLSL 支援循环和分支,包括 if、else、if/else、for、do-while、break、continue 等。

支援使用者定义函式,且各种常用的函式也已内建。这也就让绘图卡制造商,能够在硬件层次上最佳化这些内建的函式。许多函式与 C 语言相同,如 exp() 以及 abs(),其它绘图编程特有的,如 smoothstep() 以及 texture2D()。

[]编译和执行

GLSL 着色器不是独立的应用程式;其需要使用  API 的应用程式。C、C++、C#、Delphi 和 Java 皆支援  API,且支援 OpenGL 着色语言。

GLSL 着色器本身只是简单的字串集,这些字串集会传送到硬件厂商的驱动程式,并从程式内部的 OpenGL API 进入点编译。着色器可从程式内部或读入纯文字档来即时建立,但必须以字串形式传送到驱动程式。

用以编译、连结并传送参数到 GLSL 程式的 API 集,已在三个 OpenGL 扩展中规定,且即将成为  核心的一部分。这些 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 开发工具:

  •  - 这个软件是由 ATI 制作的,提供界面用以建立、编译和除错 GLSL 着色器,和 DirectX 着色器一样。仅能在 Windows 平台上执行。
  • GLSLEditorSample - 在 Mac OS X 上,它是目前唯一可用的程式,其提供着色器的建立和编译,但不能除错。它是 cocoa 应用程式,仅能在 Mac OS X 上执行。
  •  - Lumina 是新的 GLSL 开发工具。其使用 QT 界面,可以跨平台。

[]参考文献

  •  OpenGL Shading Language. 1st ed. Pearson Education, Inc, 2004. 
  • Kessenich, John, & Baldwin, David, & Rost, Randi. The OpenGL Shading Language. Version 1.10.59. 3Dlabs, Inc. Ltd. 

[]参阅

  • ,高阶着色语言
  • ,nVIDIA 的着色语言

[]外部链接

转载于:https://www.cnblogs.com/zsw-1993/archive/2012/11/01/4880694.html

你可能感兴趣的文章
第一个Spring冲刺周期团队进展报告
查看>>
红黑树 c++ 实现
查看>>
Android 获取网络链接类型
查看>>
linux中启动与终止lnmp的脚本
查看>>
gdb中信号的处理[转]
查看>>
LeetCode【709. 转换成小写字母】
查看>>
如何在Access2007中使用日期类型查询数据
查看>>
CF992E Nastya and King-Shamans(线段树二分+思维)
查看>>
第一个Java Web程序
查看>>
树状数组_一维
查看>>
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>
linux install ftp server
查看>>
嵌入式软件设计第8次实验报告
查看>>
算法和数据结构(三)
查看>>
Ubuntu下的eclipse安装subclipse遇到没有javahl的问题...(2天解决了)
查看>>
alter database databasename set single_user with rollback IMMEDIATE 不成功问题
查看>>
WCF揭秘——使用AJAX+WCF服务进行页面开发
查看>>
【题解】青蛙的约会
查看>>
IO流
查看>>
mybatis调用存储过程,获取返回的游标
查看>>