diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2018-09-29 20:42:09 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2018-10-01 16:14:46 +0300 |
commit | 781995a09c0b52ad2fd073510c2f7dc52383d461 (patch) | |
tree | f821cce3fa5f69435a20e450d709fec37cb95b4a /source/blender/gpu/shaders/gpu_shader_point_varying_color_varying_outline_aa_frag.glsl | |
parent | a5101de6a95647d19821bde9f8d68776ce8881fa (diff) |
Edit UVs: Refactor drawing Edit UV in Image Editor
NOTE: This commit only concern edit UVs and not the "shadow" mesh displayed
when texture painting. This will be address in a future commit.
We now cache the uv mesh in the mesh batch cache and only reupload data on
changes.
Update could be more granular (and a bit faster) but it's not our main
concern ATM.
This should fix problem caused by the IMM api used to draw large meshes.
This makes performance skyrocket compared to previous implementation.
There is still a big CPU bottleneck when not in sync selection mode but it
is not related to the drawing function directly.
Diffstat (limited to 'source/blender/gpu/shaders/gpu_shader_point_varying_color_varying_outline_aa_frag.glsl')
-rw-r--r-- | source/blender/gpu/shaders/gpu_shader_point_varying_color_varying_outline_aa_frag.glsl | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/source/blender/gpu/shaders/gpu_shader_point_varying_color_varying_outline_aa_frag.glsl b/source/blender/gpu/shaders/gpu_shader_point_varying_color_varying_outline_aa_frag.glsl new file mode 100644 index 00000000000..e1f8203cb26 --- /dev/null +++ b/source/blender/gpu/shaders/gpu_shader_point_varying_color_varying_outline_aa_frag.glsl @@ -0,0 +1,30 @@ + +in vec4 radii; +in vec4 fillColor; +in vec4 outlineColor; +out vec4 fragColor; + +void main() { + float dist = length(gl_PointCoord - vec2(0.5)); + +// transparent outside of point +// --- 0 --- +// smooth transition +// --- 1 --- +// pure outline color +// --- 2 --- +// smooth transition +// --- 3 --- +// pure fill color +// ... +// dist = 0 at center of point + + float midStroke = 0.5 * (radii[1] + radii[2]); + + if (dist > midStroke) { + fragColor.rgb = outlineColor.rgb; + fragColor.a = mix(outlineColor.a, 0.0, smoothstep(radii[1], radii[0], dist)); + } + else + fragColor = mix(fillColor, outlineColor, smoothstep(radii[3], radii[2], dist)); +} |