GLSL语言里面的
attribute和uniform类型的变量,在程序中通过GLES20.glGetAttribLocation和GLES20.glGetUniformLocation获取,
这里获取类似取到了他的地址一样,
就像是指针,然后在程序里面可以通过指针改变这些变量的值,怎么改变呢?
1.通过GLES20.glEnableVertexAttribArray(xxxhandle);来启用这些变量句柄
2.通过GLES20.glVertexAttribPointer来传入顶点矩阵或者颜色矩阵等等,颜色矩阵和顶点坐标是我们定义的,
这样就和GLSL里面的变量关联起来了
private final String vertexShaderCode=
"attribute vec4 vPosition;"+
"void main() {"+
" gl_Position = vPosition;"+
"}";
static float triangleCoords[]={
0.5f,0.5f,0.0f, // top
-0.5f,-0.5f,0.0f, // bottom left
0.5f,-0.5f,0.0f // bottom right
};
private int mPositionHandle;
//获取顶点着色器的vPosition成员句柄
mPositionHandle=GLES20.glGetAttribLocation(mProgram,"vPosition");
//启用三角形顶点的句
GLES20.glEnableVertexAttribArray(mPositionHandle);
//准备三角形的坐标数据
GLES20.glVertexAttribPointer(mPositionHandle,COORDS_PER_VERTEX,
GLES20.GL_FLOAT,false,
vertexStride,vertexBuffer);