Shader 入门:GLSL ES(简介和基本语法)
本文最后更新于:2020年6月8日 凌晨
前言
欢迎来到我的 Shader 入门系列文章,在本系列文章中我将和大家一起学习 Shader 相关知识,以便于我们阅读和编写 Shader。
我们将从 GLSL ES 开启我们的学习之路,本篇文章作为该系列的开篇,将给大家简单介绍 GLSL ES 并学习它的基本语法。
话不多说,我们开始吧!
在本系列文章中主要针对 GLSL ES 3.0 进行讲解
正文
简介
在正式学习 GLSL ES 之前,我们先大概了解下以下内容:
OpenGL
OpenGL 全称为 Open Graphics Library(开放图形库)。
是用于渲染 2D 或 3D 图像的跨语言跨平台的应用程序编程接口。
OpenGL ES
OpenGL ES 全称为 OpenGL for Embedded Systems(嵌入式系统开放图形库)。
OpenGL ES 是 OpenGL 的子集,主要针对嵌入式系统设计,去除了 Open GL 中非必要的特性。
GLSL
GLSL 全称为 OpenGL Shading Language(OpenGL 着色语言),是一款在 OpenGL 着色器(Shader)中使用的编程语言。
GLSL ES
GLSL ES 全称为 OpenGL ES Shading Language(OpenGL ES 着色语言),就是用于 OpenGL ES 着色器的编程语言。
基本语法
GLSL(ES)作为一款类 C 语言,其同样也是强类型语言,基本语法和 C 语言相似。
基础
大小写敏感
表达式后面必须以
;
结束
注释
单行注释:使用 //
开头的一行文字
1 |
|
多行注释:使用 /*
和 */
包裹多行文字
1 |
|
变量
变量的命名可以使用英文 a-z
或 A-Z
、数字 0-9
和下划线 _
,另外需注意以下几点:
- 不能以数字开头
- 不能以
gl_
开头 - 不能直接使用 GLSL 保留的名称
声明变量时必须指定类型,允许先声明后赋值:
1 |
|
一条表达式可以声明多个变量,需用 ,
分隔:
1 |
|
常量
在类型前面添加 const
关键字来声明常量,常量一但创建就不能更改:
1 |
|
函数
定义函数时,如果函数有返回值,就需要指定返回值的类型,如果没有返回值,必须指定为空 void
;
如果函数有参数,那么也需要指定参数的类型,如果没有参数则可以不填或者填入 void
(一般都不填)。
1 |
|
可以先声明后定义,可以声明多次但是只允许定义一次:
1 |
|
重载
重载函数允许你传入不同数量或不同类型的参数:
1 |
|
作用域
使用一对花括号 {}
包裹的区域即为一个作用域:
1 |
|
子域可以访问父域的成员,但是反过来不行:
1 |
|
同一作用域内不允许成员名称重复:
1 |
|
在同一作用域内不允许重复声明:
1 |
|
相关资料
OpenGL ES Registry(OpenGL ES 资料页)
https://www.khronos.org/registry/OpenGL/index_es.php
OpenGL ES 3 Quick Reference Card(OpenGL ES 3 快速参考卡片)
https://www.khronos.org/files/opengles3-quick-reference-card.pdf
GLSL ES Specification 3.00(GLSL ES 规范 3.0)
https://www.khronos.org/registry/OpenGL/specs/es/3.0/GLSL_ES_Specification_3.00.pdf
OpenGL ES 3.0 Online Reference Pages(OpenGL ES 3.0 在线参考页)
https://www.khronos.org/registry/OpenGL-Refpages/es3.0/
传送门
更多分享
公众号
菜鸟小栈
我是陈皮皮,这是我的个人公众号,专注但不仅限于游戏开发、前端和后端技术记录与分享。
每一篇原创都非常用心,你的关注就是我原创的动力!
Input and output.