diff options
Diffstat (limited to 'source/blender/draw/engines/overlay/shaders/overlay_armature_dof_vert.glsl')
-rw-r--r-- | source/blender/draw/engines/overlay/shaders/overlay_armature_dof_vert.glsl | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/source/blender/draw/engines/overlay/shaders/overlay_armature_dof_vert.glsl b/source/blender/draw/engines/overlay/shaders/overlay_armature_dof_vert.glsl new file mode 100644 index 00000000000..b3c9ce5dfd2 --- /dev/null +++ b/source/blender/draw/engines/overlay/shaders/overlay_armature_dof_vert.glsl @@ -0,0 +1,32 @@ + +#pragma BLENDER_REQUIRE(common_view_clipping_lib.glsl) +#pragma BLENDER_REQUIRE(common_view_lib.glsl) + +vec3 sphere_project(float ax, float az) +{ + float sine = 1.0 - ax * ax - az * az; + float q3 = sqrt(max(0.0, sine)); + + return vec3(-az * q3, 0.5 - sine, ax * q3) * 2.0; +} + +void main() +{ + mat4 model_mat = inst_obmat; + model_mat[0][3] = model_mat[1][3] = model_mat[2][3] = 0.0; + model_mat[3][3] = 1.0; + + vec2 amin = vec2(inst_obmat[0][3], inst_obmat[1][3]); + vec2 amax = vec2(inst_obmat[2][3], inst_obmat[3][3]); + + vec3 final_pos = sphere_project(pos.x * abs((pos.x > 0.0) ? amax.x : amin.x), + pos.y * abs((pos.y > 0.0) ? amax.y : amin.y)); + + vec3 world_pos = (model_mat * vec4(final_pos, 1.0)).xyz; + gl_Position = point_world_to_ndc(world_pos); + finalColor = color; + + edgeStart = edgePos = ((gl_Position.xy / gl_Position.w) * 0.5 + 0.5) * sizeViewport; + + view_clipping_distances(world_pos); +} |