GLSL,OpenGL Shading Language,GLSL中没有指针,而且没有任何类型的字符串或字符。函数
(1)GLSL的修饰符与基本数据类型spa
const:用于声明非可写的编译时常量变量;指针
attribute:用于常常更改的信息,只能在顶点着色器中使用;code
uniform:用于外部程序传递给shader的变量,shader只能用,不能改;orm
varying:用于从顶点着色器向片元着色器传递数据的变量。blog
而后是基本数据类型,int、float、bool。注意float能够指定精度:字符串
highp:32bit,通常用于顶点坐标(vertex coordinate);it
medium:16bit,通常用于纹理坐标(texture coordinate);io
lowp:8bit,通常用于颜色表示。编译
接下来是向量类型。
vec4:4份量浮点向量;
ivec4:4份量整数向量;
uvec4:4份量无符号整数向量;
bvec4:4份量布尔向量;
四维向量:
attribute vec4 position;
矩阵类型,全部的矩阵类型都只支持浮点数,不支持整数或者布尔矩阵:
uniform lowp mat4 colorMatrix;
纹理类型,通常仅在Fragment Shader中使用这个类型,二维纹理的声明方式以下:
uniform sampler2D texSampler;
最后是varing,用于在Vertex Shader和Fragment Shader中传递参数。首先在VS中声明这个类型的变量表明纹理的坐标点,而且对这个变量进行赋值,代码以下:
attribute vec2 texcoord; varying vec2 v_texcoord; void main(void) { v_texcoord = texcoord; }
紧接着在FS中也声明同名的变量,而后使用texture2D方法取出二维纹理中该纹理坐标点上的像素值,代码以下:
varying vec2 v_texcoord;
vec4 texel = texture2D(texSampler, v_texcoord);
取出了该坐标点上的像素值以后,就能够进行像素变化操做了,好比说提升对比度,最终将改变的像素值赋给gl_FragColor。
(2)GLSL的内置函数与内置变量
最多见的内置变量是两个Shader的输出变量,首先是VS的:
vec4 gl_position;
上述代码用来设置顶点转换到屏幕坐标的位置,VS必定要去更新这个数值。
float gl_pointSize;
在粒子效果的场景下,须要为粒子设置大小,改变该内置变量的值就是为了设置每个粒子矩形的大小。
其次是FS的内置变量:
vec4 gl_FragColor;
上述代码用于指定当前纹理坐标所表明的像素点的最终颜色值。
(3)其余
sampler2D类型,其实就是纹理数据。另外还有一个方法texture2D,第一个参数是纹理数据,第二个参数是纹理坐标,这个方法就是在纹理数据中取出当前片断对应在纹理数据中位置上的数据颜色。