DRW: support clipping for object & lamp centers
[blender.git] / source / blender / gpu / shaders / gpu_shader_instance_screen_aligned_vert.glsl
1
2 uniform mat4 ViewProjectionMatrix;
3 #ifdef USE_WORLD_CLIP_PLANES
4 uniform mat4 ModelMatrix;
5 #endif
6 uniform vec3 screen_vecs[2];
7
8 /* ---- Instantiated Attribs ---- */
9 in vec3 pos; /* using Z as axis id */
10
11 /* ---- Per instance Attribs ---- */
12 in mat4 InstanceModelMatrix;
13 in vec3 color;
14 in float size;
15
16 flat out vec4 finalColor;
17
18 void main()
19 {
20         vec3 offset = vec3(0.0);
21
22 #ifdef AXIS_NAME
23         if (pos.z == 0.0)
24                 offset = vec3(1.125, 0.0, 0.0);
25         else if (pos.z == 1.0)
26                 offset = vec3(0.0, 1.125, 0.0);
27         else
28                 offset = vec3(0.0, 0.0, 1.125);
29         offset *= size;
30 #endif
31
32         vec3 screen_pos = screen_vecs[0].xyz * pos.x + screen_vecs[1].xyz * pos.y;
33         vec4 pos_4d = InstanceModelMatrix * vec4(offset, 1.0) + vec4(screen_pos * size, 0.0);
34         gl_Position = ViewProjectionMatrix * pos_4d;
35         finalColor = vec4(color, 1.0);
36
37 #ifdef USE_WORLD_CLIP_PLANES
38         world_clip_planes_calc_clip_distance((ModelMatrix * pos_4d).xyz);
39 #endif
40 }