#version 310 es uniform Buffer { layout(row_major) mat4 MVPRowMajor; layout(column_major) mat4 MVPColMajor; mat4 M; }; layout(location = 0) in vec4 Position; void main() { vec4 c0 = M * (MVPRowMajor * Position); vec4 c1 = M * (MVPColMajor * Position); vec4 c2 = M * (Position * MVPRowMajor); vec4 c3 = M * (Position * MVPColMajor); gl_Position = c0 + c1 + c2 + c3; }