[Bf-blender-cvs] [6120e6ef067] soc-2019-npr: GPU preview and render mode now follows background alpha correctly.
YimingWu
noreply at git.blender.org
Mon Jul 8 07:56:12 CEST 2019
Commit: 6120e6ef06707a36ef3e1f3df799cd10e130bb19
Author: YimingWu
Date: Mon Jul 8 13:56:06 2019 +0800
Branches: soc-2019-npr
https://developer.blender.org/rB6120e6ef06707a36ef3e1f3df799cd10e130bb19
GPU preview and render mode now follows background alpha correctly.
===================================================================
M source/blender/draw/engines/lanpr/lanpr_dpix.c
M source/blender/draw/engines/lanpr/shaders/lanpr_dpix_preview_geom.glsl
===================================================================
diff --git a/source/blender/draw/engines/lanpr/lanpr_dpix.c b/source/blender/draw/engines/lanpr/lanpr_dpix.c
index b707990546b..65a5bccf881 100644
--- a/source/blender/draw/engines/lanpr/lanpr_dpix.c
+++ b/source/blender/draw/engines/lanpr/lanpr_dpix.c
@@ -523,12 +523,18 @@ void lanpr_dpix_draw_scene(LANPR_TextureList *txl,
GPU_framebuffer_bind(fbl->dpix_preview);
eGPUFrameBufferBits clear_bits = GPU_COLOR_BIT;
- GPU_framebuffer_clear(
- fbl->dpix_preview, clear_bits, lanpr->background_color, clear_depth, clear_stencil);
+ GPU_framebuffer_clear(fbl->dpix_preview, clear_bits, clear_col, clear_depth, clear_stencil);
DRW_draw_pass(psl->dpix_preview_pass);
+ if (is_render) {
+ mul_v3_v3fl(clear_col, lanpr->background_color, lanpr->background_color[3]);
+ clear_col[3] = lanpr->background_color[3];
+ }
+ else {
+ copy_v4_v4(clear_col, lanpr->background_color);
+ }
+
GPU_framebuffer_bind(DefaultFB);
- GPU_framebuffer_clear(
- DefaultFB, clear_bits, lanpr->background_color, clear_depth, clear_stencil);
- DRW_multisamples_resolve(txl->depth, txl->color, 1);
+ GPU_framebuffer_clear(DefaultFB, clear_bits, clear_col, clear_depth, clear_stencil);
+ DRW_multisamples_resolve(txl->depth, txl->color, 0);
}
diff --git a/source/blender/draw/engines/lanpr/shaders/lanpr_dpix_preview_geom.glsl b/source/blender/draw/engines/lanpr/shaders/lanpr_dpix_preview_geom.glsl
index e9f5ebdb161..243324bf3aa 100644
--- a/source/blender/draw/engines/lanpr/shaders/lanpr_dpix_preview_geom.glsl
+++ b/source/blender/draw/engines/lanpr/shaders/lanpr_dpix_preview_geom.glsl
@@ -68,14 +68,14 @@ vec4 apply_scale(vec4 center, vec4 a)
return mix(a, center, depth_factor);
}
-void emit_alpha_pre_mul(vec4 a, int is_crease, float crease_fading)
+void emit_color_and_alpha(vec4 a, int is_crease, float crease_fading)
{
float lz = get_linear_depth(a.z);
float alpha_factor = mix(0, curve_01(lz, depth_alpha_curve), depth_alpha_influence);
float alpha_crease_fading = alpha_factor;
if (is_crease > 0)
alpha_crease_fading = mix(alpha_factor, 1, crease_fading * 2); // fading=0.5 -> fade all
- out_color = mix(use_color, background_color, alpha_crease_fading);
+ out_color = vec4(use_color.rgb, mix(1, 0, alpha_crease_fading));
}
void draw_line(vec4 p1, vec4 p2, int is_crease)
@@ -102,23 +102,23 @@ void draw_line(vec4 p1, vec4 p2, int is_crease)
d = apply_scale(p2, d);
gl_Position = vec4(a.xy, a.z - depth_offset, 1);
- emit_alpha_pre_mul(a, is_crease, p2.w);
+ emit_color_and_alpha(a, is_crease, p2.w);
EmitVertex();
gl_Position = vec4(b.xy, b.z - depth_offset, 1);
- emit_alpha_pre_mul(b, is_crease, p2.w);
+ emit_color_and_alpha(b, is_crease, p2.w);
EmitVertex();
gl_Position = vec4(c.xy, c.z - depth_offset, 1);
- emit_alpha_pre_mul(c, is_crease, p2.w);
+ emit_color_and_alpha(c, is_crease, p2.w);
EmitVertex();
gl_Position = vec4(b.xy, b.z - depth_offset, 1);
- emit_alpha_pre_mul(b, is_crease, p2.w);
+ emit_color_and_alpha(b, is_crease, p2.w);
EmitVertex();
gl_Position = vec4(c.xy, c.z - depth_offset, 1);
- emit_alpha_pre_mul(c, is_crease, p2.w);
+ emit_color_and_alpha(c, is_crease, p2.w);
EmitVertex();
gl_Position = vec4(d.xy, d.z - depth_offset, 1);
- emit_alpha_pre_mul(d, is_crease, p2.w);
+ emit_color_and_alpha(d, is_crease, p2.w);
EmitVertex();
EndPrimitive();
More information about the Bf-blender-cvs
mailing list