Cleanup: DRW: Move ModelMatrix declaration to common_view_lib
[blender.git] / source / blender / draw / modes / shaders / object_particle_prim_vert.glsl
1
2 uniform bool screen_space;
3 uniform float draw_size;
4 uniform vec3 color;
5 uniform sampler1D ramp;
6
7 /* ---- Instantiated Attrs ---- */
8 in vec3 inst_pos;
9 in int axis;
10
11 /* ---- Per instance Attrs ---- */
12 in vec3 pos;
13 in vec4 rot;
14 in float val;
15
16 flat out vec4 finalColor;
17
18 vec3 rotate(vec3 vec, vec4 quat)
19 {
20   /* The quaternion representation here stores the w component in the first index */
21   return vec + 2.0 * cross(quat.yzw, cross(quat.yzw, vec) + quat.x * vec);
22 }
23
24 void main()
25 {
26   if (screen_space) {
27     gl_Position = ViewMatrix * (ModelMatrix * vec4(pos, 1.0));
28     gl_Position.xyz += inst_pos * draw_size;
29     gl_Position = ProjectionMatrix * gl_Position;
30   }
31   else {
32     float size = draw_size;
33
34     if (axis > -1) {
35       size *= 2;
36     }
37
38     vec3 pos_rot = pos + rotate(inst_pos * size, rot);
39     gl_Position = point_object_to_ndc(pos_rot);
40   }
41
42 #ifdef USE_AXIS
43   if (axis == 0) {
44     finalColor = vec4(1.0, 0.0, 0.0, 1.0);
45   }
46   else if (axis == 1) {
47     finalColor = vec4(0.0, 1.0, 0.0, 1.0);
48   }
49   else {
50     finalColor = vec4(0.0, 0.0, 1.0, 1.0);
51   }
52 #else
53   if (val < 0.0) {
54     finalColor = vec4(color, 1.0);
55   }
56   else {
57     finalColor = vec4(texture(ramp, val).rgb, 1.0);
58   }
59 #endif
60 }