[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