/ src / gl / data / shape.vert
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  }