shape.vert
1 uniform mat4 ortho; 2 uniform mat4 transform; 3 4 in vec3 position; 5 in float angle; 6 in vec2 center; 7 in vec4 color; 8 9 out vec4 f_color; 10 11 mat2 rotation2d(float angle) { 12 float s = sin(angle); 13 float c = cos(angle); 14 return mat2(c, -s, s, c); 15 } 16 17 vec2 rotate(vec2 position, vec2 around, float angle) { 18 mat2 m = rotation2d(angle); 19 vec2 rotated = m * (position - around); 20 return rotated + around; 21 } 22 23 // Convert an sRGB color to linear space. 24 vec3 linearize(vec3 srgb) { 25 bvec3 cutoff = lessThan(srgb, vec3(0.04045)); 26 vec3 higher = pow((srgb + vec3(0.055)) / vec3(1.055), vec3(2.4)); 27 vec3 lower = srgb / vec3(12.92); 28 29 return mix(higher, lower, cutoff); 30 } 31 32 void main() { 33 vec2 r = rotate(position.xy, center, angle); 34 35 f_color = vec4(linearize(color.rgb), color.a); 36 gl_Position = ortho * transform * vec4(r, position.z, 1.0); 37 }