diff options
author | Jeroen Bakker <j.bakker@atmind.nl> | 2019-07-04 16:38:47 +0300 |
---|---|---|
committer | Jeroen Bakker <j.bakker@atmind.nl> | 2019-07-05 16:21:11 +0300 |
commit | d1349bd0c7da2993b408bfd9a8eda0ab802272ed (patch) | |
tree | 3edc00dedf7ff2b7cc82c886a784cec9861411a0 /source/blender/draw/modes/shaders | |
parent | 15cc4c4cb3cd6e5d19678a2440e99d1e7fda6416 (diff) |
TexturePaint: Force Workbench Texture Color Mode
When in texture paint mode and in solid mode the object that is being
texture painted will be rendered by the workbench engine with textures.
All other objects would render the same. For other cases the texture paint
draw engine will still draw the texture.
The texture mode draw engine now only drawn the masks. The opacity
sliders influences the texture mask.
This change has been implemented conserably. In the future we need to
look into making this better, like adding support that every object
can be colored differently. Currently when rendering in the workbench
we can have up to 3 different color types active (what the user selected,
the fallback in case no materials have been configured and this one,
forcing textures)
Reviewed By: fclem, brecht
Differential Revision: https://developer.blender.org/D5190
Diffstat (limited to 'source/blender/draw/modes/shaders')
-rw-r--r-- | source/blender/draw/modes/shaders/paint_texture_frag.glsl | 23 | ||||
-rw-r--r-- | source/blender/draw/modes/shaders/paint_texture_vert.glsl | 12 |
2 files changed, 2 insertions, 33 deletions
diff --git a/source/blender/draw/modes/shaders/paint_texture_frag.glsl b/source/blender/draw/modes/shaders/paint_texture_frag.glsl index e8722590802..edd7c2af001 100644 --- a/source/blender/draw/modes/shaders/paint_texture_frag.glsl +++ b/source/blender/draw/modes/shaders/paint_texture_frag.glsl @@ -1,35 +1,17 @@ - -in vec2 uv_interp; -#ifdef TEXTURE_PAINT_MASK in vec2 masking_uv_interp; -#endif out vec4 fragColor; -uniform sampler2D image; -uniform bool imagePremultiplied; uniform float alpha = 1.0; -uniform bool nearestInterp; -#ifdef TEXTURE_PAINT_MASK uniform sampler2D maskingImage; uniform bool maskingImagePremultiplied; uniform vec3 maskingColor; uniform bool maskingInvertStencil; -#endif void main() { - vec2 uv = uv_interp; - if (nearestInterp) { - vec2 tex_size = vec2(textureSize(image, 0).xy); - uv = (floor(uv_interp * tex_size) + 0.5) / tex_size; - } - - vec4 color = texture_read_as_srgb(image, imagePremultiplied, uv); - color.a *= alpha; -#ifdef TEXTURE_PAINT_MASK vec4 mask = vec4( texture_read_as_srgb(maskingImage, maskingImagePremultiplied, masking_uv_interp).rgb, 1.0); if (maskingInvertStencil) { @@ -37,8 +19,7 @@ void main() } float mask_step = smoothstep(0, 3.0, mask.r + mask.g + mask.b); mask.rgb *= maskingColor; - color = mix(color, mask, mask_step); -#endif + mask.a = mask_step * alpha; - fragColor = color; + fragColor = mask; } diff --git a/source/blender/draw/modes/shaders/paint_texture_vert.glsl b/source/blender/draw/modes/shaders/paint_texture_vert.glsl index 564f988348e..ddfc2b51437 100644 --- a/source/blender/draw/modes/shaders/paint_texture_vert.glsl +++ b/source/blender/draw/modes/shaders/paint_texture_vert.glsl @@ -1,27 +1,15 @@ -in vec2 u; /* active uv map */ in vec3 pos; - -#ifdef TEXTURE_PAINT_MASK in vec2 mu; /* masking uv map */ -#endif - -out vec2 uv_interp; -#ifdef TEXTURE_PAINT_MASK out vec2 masking_uv_interp; -#endif void main() { vec3 world_pos = point_object_to_world(pos); gl_Position = point_world_to_ndc(world_pos); - uv_interp = u; - -#ifdef TEXTURE_PAINT_MASK masking_uv_interp = mu; -#endif #ifdef USE_WORLD_CLIP_PLANES world_clip_planes_calc_clip_distance(world_pos); |