Graphics Programs Reference
In-Depth Information
basis, we can pass data to uniform variables at run time using the ES 2.0 function
GLES20.glUniformMatrix4fv .
Listing 3-27. GL CUBE/src/com/apress/android/glcube/GLES20Renderer.java
private final String _cubeVertexShaderCode =
"attribute vec3 aPosition;"
+ "attribute vec4 aColor;"
+ "varying vec4 vColor;"
+ "uniform mat4 uMVP;"
+ "void main() {"
+ " vColor = aColor;"
+ " vec4 vertex =
vec4(aPosition[0],aPosition[1],aPosition[2],1.0);"
+ " gl_Position = uMVP * vertex;"
+ "}";
Variable gl_Position is finally assigned the value uMVP * vertex . In this
multiplication, the matrix comes before per-vertex position data, because matrices in
OpenGL ES ( mat2 , mat3 , and mat4 ) are stored in column major order (the meth-
ods of Matrix class also operate on column-vector matrices because of this). Please
note that, if vertex variable inside main was of type vec3 , the result of multiplic-
ation would have been invalid, as the uniform variable uMVP is of type mat4 (recall,
that mat4 is a square matrix).
Like glGetAttribLocation , glGetUniformLocation is used to obtain
the location of uniform variable. Renderer class has field _cubeUMVPLocation
to store this location, and location of uniform is stored using _cubeUMVPLoca-
tion
=
GLES20.glGetUniformLocation(_cubeProgram,
"uMVP"); .
Finally, this value is loaded to the uniform variable by calling
GLES20.glUniformMatrix4fv(_cubeUMVPLocation, 1, false,
_MVPMatrix, 0) . As shown in Figure 3-22 , the rendered cube is incomplete. It
is an exercise for you to complete this cube.
 
 
Search WWH ::




Custom Search