# Optimising the modelview transformation in GLSL for 2D

So, the standard way to transform vertices and then pass to the fragment shader in GLSL is something like this:

uniform mat4 u_modelview;
attribute vec4 a_position;

void main() {
gl_Position = u_modelview * a_position;
}


However, I am working in 2D so there is redundancy in the 4x4 matrix. Would it be more efficient for me to do this?

uniform mat3 u_modelview;
attribute vec3 a_position;

void main() {
gl_Position = vec4(u_modelview * a_position, 1.0);
}


gl_Position requires a 4 component vector so an extra operation is required at output. However the matrix multiplication is for 9 elements instead of 16. Can I do any better?

• I think that this question was really valid because it prevents people (like me) from making the exact same performance mistake. – Robert Massaioli Feb 6 '12 at 2:29