Merge branch 'blender2.7'
[blender.git] / source / blender / draw / modes / shaders / object_particle_prim_vert.glsl
1
2 uniform mat4 ModelViewProjectionMatrix;
3 uniform mat4 ViewProjectionMatrix;
4 uniform mat4 ModelViewMatrix;
5 uniform mat4 ProjectionMatrix;
6 uniform int screen_space;
7 uniform float draw_size;
8 uniform vec3 color;
9 uniform sampler1D ramp;
10
11 in vec3 pos;
12 in vec4 rot;
13 in float val;
14 in vec3 inst_pos;
15 in int axis;
16
17 flat out vec4 finalColor;
18
19 vec3 rotate(vec3 vec, vec4 quat)
20 {
21         /* The quaternion representation here stores the w component in the first index */
22         return vec + 2.0 * cross(quat.yzw, cross(quat.yzw, vec) + quat.x * vec);
23 }
24
25 void main()
26 {
27         if (screen_space == 1) {
28                 gl_Position = ModelViewMatrix * vec4(pos, 1.0) + vec4(inst_pos * draw_size, 0.0);
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                 gl_Position = ModelViewProjectionMatrix * vec4(pos + rotate(inst_pos * size, rot), 1.0);
39         }
40
41 #ifdef USE_AXIS
42         if (axis == 0)
43                 finalColor = vec4(1.0, 0.0, 0.0, 1.0);
44         else if (axis == 1)
45                 finalColor = vec4(0.0, 1.0, 0.0, 1.0);
46         else
47                 finalColor = vec4(0.0, 0.0, 1.0, 1.0);
48 #else
49         if (val < 0.0) {
50                 finalColor = vec4(color, 1.0);
51         }
52         else {
53                 finalColor = vec4(texture(ramp, val).rgb, 1.0);
54         }
55 #endif
56 }