diff options
author | Jeroen Bakker <j.bakker@atmind.nl> | 2019-09-03 14:42:11 +0300 |
---|---|---|
committer | Jeroen Bakker <j.bakker@atmind.nl> | 2019-09-04 09:08:27 +0300 |
commit | 64f8f7db7cce0c8923afcabb523f7400f744387e (patch) | |
tree | c60fe2a51846a9b19860fbe016d1d64cea098880 /source/blender/gpu/shaders | |
parent | 0cb730146b09b4a38abcc04e9d4660d6c2f43945 (diff) |
Fix T63755: Area Stretching Overlay
Support for UV Stretching overlay during multi object editing. The
VBO now holds the ratios per fase. In the shader these ratios will
be compared against the global ratios. The global rations are created
from all selected objects.
The current implementation does not fit well with the draw module. The
plan is to move the drawing of other spaces towards the draw manager what
leads to a better fit. Currently the details on this solution is unclear
but this requirement will become an attentionpoint in the future design.
Reviewed By: fclem
Differential Revision: https://developer.blender.org/D5665
Diffstat (limited to 'source/blender/gpu/shaders')
-rw-r--r-- | source/blender/gpu/shaders/gpu_shader_2D_edituvs_stretch_vert.glsl | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/source/blender/gpu/shaders/gpu_shader_2D_edituvs_stretch_vert.glsl b/source/blender/gpu/shaders/gpu_shader_2D_edituvs_stretch_vert.glsl index 0ce5504dfa8..b0fa9eaed21 100644 --- a/source/blender/gpu/shaders/gpu_shader_2D_edituvs_stretch_vert.glsl +++ b/source/blender/gpu/shaders/gpu_shader_2D_edituvs_stretch_vert.glsl @@ -4,12 +4,15 @@ uniform vec2 aspect; in vec2 pos; -#ifndef STRETCH_ANGLE -in float stretch; -#else - +#ifdef STRETCH_ANGLE in vec2 uv_angles; in float angle; + +#else +in float ratio; +uniform float totalAreaRatio; +uniform float totalAreaRatioInv; + #endif noperspective out vec4 finalColor; @@ -69,6 +72,12 @@ float angle_normalized_v2v2(vec2 v1, vec2 v2) return (q) ? a : M_PI - a; } +float area_ratio_to_stretch(float ratio, float tot_ratio, float inv_tot_ratio) +{ + ratio *= (ratio > 0.0f) ? tot_ratio : -inv_tot_ratio; + return (ratio > 1.0f) ? (1.0f / ratio) : ratio; +} + void main() { gl_Position = ModelViewProjectionMatrix * vec4(pos, 0.0, 1.0); @@ -80,6 +89,9 @@ void main() float stretch = 1.0 - abs(uv_angle - angle); stretch = stretch; stretch = 1.0 - stretch * stretch; +#else + float stretch = 1.0 - area_ratio_to_stretch(ratio, totalAreaRatio, -totalAreaRatioInv); + #endif finalColor = vec4(weight_to_rgb(stretch), 1.0); |