Cleanup: DRW: Move ModelMatrix declaration to common_view_lib
[blender.git] / source / blender / draw / modes / shaders / object_particle_prim_vert.glsl
index 3df5115db761a94431aec6e8e2720ae2bbef224e..46aceb245f483f5554158e3c1c1ade0f74c664b8 100644 (file)
@@ -1,59 +1,60 @@
 
-uniform mat4 ModelViewProjectionMatrix;
-uniform mat4 ViewProjectionMatrix;
-uniform mat4 ModelViewMatrix;
-uniform mat4 ProjectionMatrix;
-uniform int screen_space;
+uniform bool screen_space;
 uniform float draw_size;
 uniform vec3 color;
 uniform sampler1D ramp;
 
+/* ---- Instantiated Attrs ---- */
+in vec3 inst_pos;
+in int axis;
+
+/* ---- Per instance Attrs ---- */
 in vec3 pos;
 in vec4 rot;
 in float val;
-in vec3 inst_pos;
-in int axis;
 
 flat out vec4 finalColor;
 
 vec3 rotate(vec3 vec, vec4 quat)
 {
-       /* The quaternion representation here stores the w component in the first index */
-       return vec + 2.0 * cross(quat.yzw, cross(quat.yzw, vec) + quat.x * vec);
+  /* The quaternion representation here stores the w component in the first index */
+  return vec + 2.0 * cross(quat.yzw, cross(quat.yzw, vec) + quat.x * vec);
 }
 
 void main()
 {
-       if (screen_space == 1) {
-               gl_Position = ModelViewMatrix * vec4(pos, 1.0) + vec4(inst_pos * draw_size, 0.0);
-               gl_Position = ProjectionMatrix * gl_Position;
-       }
-       else {
-               float size = draw_size;
-
-               if (axis > -1) {
-                       size *= 2;
-               }
-
-               gl_Position = ModelViewProjectionMatrix * vec4(pos + rotate(inst_pos * size, rot), 1.0);
-       }
+  if (screen_space) {
+    gl_Position = ViewMatrix * (ModelMatrix * vec4(pos, 1.0));
+    gl_Position.xyz += inst_pos * draw_size;
+    gl_Position = ProjectionMatrix * gl_Position;
+  }
+  else {
+    float size = draw_size;
+
+    if (axis > -1) {
+      size *= 2;
+    }
+
+    vec3 pos_rot = pos + rotate(inst_pos * size, rot);
+    gl_Position = point_object_to_ndc(pos_rot);
+  }
 
 #ifdef USE_AXIS
-       if (axis == 0) {
-               finalColor = vec4(1.0, 0.0, 0.0, 1.0);
-       }
-       else if (axis == 1) {
-               finalColor = vec4(0.0, 1.0, 0.0, 1.0);
-       }
-       else {
-               finalColor = vec4(0.0, 0.0, 1.0, 1.0);
-       }
+  if (axis == 0) {
+    finalColor = vec4(1.0, 0.0, 0.0, 1.0);
+  }
+  else if (axis == 1) {
+    finalColor = vec4(0.0, 1.0, 0.0, 1.0);
+  }
+  else {
+    finalColor = vec4(0.0, 0.0, 1.0, 1.0);
+  }
 #else
-       if (val < 0.0) {
-               finalColor = vec4(color, 1.0);
-       }
-       else {
-               finalColor = vec4(texture(ramp, val).rgb, 1.0);
-       }
+  if (val < 0.0) {
+    finalColor = vec4(color, 1.0);
+  }
+  else {
+    finalColor = vec4(texture(ramp, val).rgb, 1.0);
+  }
 #endif
 }