WebGL入门课程05-着色器语言
[TOC]
十四、OpenGL ES着色器语言
-
基础、执行顺序、注释
- 基础:与其他语言一样,有大小写之分,每个语句都需要用分号结束
- 执行次序:从
main()
开始 - 注释:单行注释用
//
,多行注释用/**/
-
数据变量和变量类型
- GLSL ES支持两种数据类型:数值类型(整型和浮点数)、布尔值类型
- 变量:
- a-z,A-Z,0-9,下划线(_)
- 不能以数字开头
- 不能使关键字
- 不能用gl_、webgl_、_webgl_开头
- 变量基本类型:
- float
- int
- Bool
- 赋值:int i=8;float i=0.8; float i=8(错误);
- 运算符
-
矢量、矩阵、结构体、数组、采样器(纹理)
- 矢量与矩阵的类型:
- vec2、vec3、vec4(float矢量)
- ivec2、ivec3、ivec4(int矢量)
- bvec2、bvec3、bvec4(Bool矢量)
- mat2、mat3、mat4(矩阵)
gl_FragColor=vec4(1.0,0.0,1.0,1.0);
- 矩阵以列为主序
- 数组:只支持一位数组,不支持
pop(),push()
等操作,创建不用new:float floatArray[4]
- 取样器:
sampler2D
samplerCube
- 矢量与矩阵的类型:
-
程序流、函数
-
程序流程:
- break:跳出循环
- continue:跳出本次循环,执行下一次循环
- discard:只能在片元着色器中使用,放弃处理当前片元
-
- 存储限定字
- GLSL ES包含全局变量和局部变量
- 存储限定字:
- const:用于声明非可写的编译时常量变量。
- attribute:用于经常更改的信息,只能在顶点着色器中使用。
- uniform:用于不经常更改的信息,可用于顶点着色器和片元着色器。
- varying:用于修饰从顶点着色器向片元着色器传递的变量。
-
精度限定字
基本数据类型 int、float、bool 这些与 C 语言都是一致的,这里面的 float 是有一个修饰符的,常在 fragment shader 中使用,fragment shader 被调用的次数远大于 vertex shader,对于性能影响比较关键,所以需要指定精度:
- highp:32bit,一般用于顶点坐标(vertex coordinate)。
- medium:16bit,一般用于纹理坐标(texture coordinate)。
- lowp:8bit,一般用于颜色表示(color)。