1.attibute变量的获取与传值
attribute为存储限定符,表示接下来的变量是一个attribute变量,数据将从着色器外部传递给变量,必须是全局的,只有顶点着色器可以使用,传输与顶点相关的数据。attribute的类型只能为float,vec2,vec3,vec4,mat2,mat3,mat4
var vshader=
'attribute vec4 a_Position;\n'+
'void main(){\n'+
'gl_position=a_Position;\n'+
'gl_Pointsize=10.0;\n'+
'}\n';
//第一个参数为程序对象
var a_position=gl.getAttribLocation(gl.program,'a_Position');
//本来是vec4,第四个自动补齐
gl.vertexAttrib3f(a_position,0.0,0.0,0.0);
其他函数
gl.vertex1f(location,v0);
gl.vertex2f(location,v0,.v1);
gl.vertex3f(location,v0,v1,v2);
gl.vertex4f(location,v0,v1,v2,v3);
等等
2.uniform变量的获取与传值
uniform变量可以在顶点着色器与片元着色器中,且必须是全局的。与顶点无关,对所有顶点相同如变换矩阵。如果在顶点与片源着色器中使用了同名的uniform变量,那么就会被两种着色器共享。
var FRAGMENT_SHADER=
'precision mediump float;\n'+
'uniform vec4 u_FragColor;\n'+
'void main(){\n'+
'gl_FragColor=u_FragColor;\n'+
'}'
var u_FragColor=gl.getUniformLocation(gl.program,'u_FragColor');
gl.uniform4f(u_FragColor,0.0,1.0,1.0,1.0);
3.varying变量
任务为从顶点着色器向片源着色器传输数据,必须在两种着色器中声明同名的,同类型的varying变量。顶点着色器中赋值给varying变量的值经过内插传给了片元着色器的varying变量。
**这三中全局变量有最大个数与设备有关,一般最小如下:
attribute变量 8
uniform变量(顶点着色器中) 128
uniform变量(片元着色器中) 16
varyring变量 8
**