赞
踩
一、基本变量
GLSL 的语法与 C 语言很类似,可以用变量、结构体、数组(GLSL 中没有指针类型)
变量类别 | 变量类型 | 描述 |
空 | void | 用于无返回值的函数或空的参数列表 |
标量 | float, int, bool | 浮点型,整型,布尔型的标量数据类型 |
浮点型向量 | float, vec2, vec3, vec4 | 包含1,2,3,4个元素的浮点型向量 |
整数型向量 | int, ivec2, ivec3, ivec4 | 包含1,2,3,4个元素的整型向量 |
布尔型向量 | bool, bvec2, bvec3, bvec4 | 包含1,2,3,4个元素的布尔型向量 |
矩阵 | mat2, mat3, mat4 | 尺寸为2x2,3x3,4x4的浮点型矩阵 |
纹理句柄 | sampler2D, samplerCube | 表示2D,立方体纹理的句柄 |
二、限定符(只列出比较常用的存储限定符和精度限定符)
1、存储限定符
限定符 | 描述 |
< none: default > | 局部可读写变量,或者函数的参数 |
const | 编译时常量,或只读的函数参数 |
attribute | 用于顶点着色器中,存储顶点着色器中每个顶点的输入(位置坐标、法向量、纹理坐标和颜色等) |
uniform | 在图元处理过程中其值保持不变,由应用程序传输给着色器 |
varying | 由顶点着色器传输给片段着色器中的插值数据 |
2、精度限定符
OpenGL ES 与 OpenGL 之间的一个区别就是在 GLSL 中引入了精度限定符。
限定符 | 描述 |
highp | 满足顶点着色语言的最低要求。对片段着色语言是可选项 |
mediump | 满足片段着色语言的最低要求,其对于范围和精度的要求必须不低于lowp并且不高于highp |
lowp | 范围和精度可低于mediump,但仍可以表示所有颜色通道的所有颜色值 |
三、绘制三角形
Opengl ES2.0开始使用glsl语言来描述顶点着色器和片段着色器。
OpenGL渲染图形需要着色器对象(顶点着色器和片段着色器)和程序对象,着色器对象和程序对象就相当于c语言的编译器和连接程序,OpenGL先将源程序编译为目标程序(.obj或.o),然后再将其链接为最后的可执行程序。大体步骤如下:
1、创建顶点着色器对象和片段着色器对象
int shaderObjectId = GLES20.glCreateShader(type);
type类型可以是GLES20.GL_VERTEX_SHADER或GLES20.GL_FRAGMENT_SHADER
2、将源代码链接到每个着色器
GLES20.glShaderSource(shaderObjectId, shaderCode);
shaderCode就是glsl编写的源代码
3、编译着色器对象
GLES20.glCompileShader(shaderObjectId);
4、创建一个程序对象
mProgramObjectId = GLES20.glCreateProgram();
5、将编译后的着色器对象连接到程序对象
- GLES20.glAttachShader(mProgramObjectId, vertexShaderObjectId);
-
- GLES20.glAttachShader(mProgramObjectId, fragmentShaderObjectId);
6、链接程序对象
- GLES20.glLinkProgram(mProgramObjectId);
-
- GLES20.glUseProgram(mProgramObjectId);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。