#version 400 uniform bl { uniform mat4 m4; uniform mat3 m3; } bName; in vec3 v3; vec3 xf(mat3 m, vec3 v) { return v * m; } mat3 Mat3(mat4 m) { return mat3(m[0].xyz, m[1].xyz, m[2].xyz); } vec3 mxv(mat4 m4, vec3 v) { return v * Mat3(m4); } void main() { gl_Position = vec4(mxv(bName.m4, v3) + xf(bName.m3, v3), 1.0); }