[Bf-blender-cvs] [8ea92115f3d] greasepencil-refactor: GPencil: Refactor: Speedup: Only blend pixels rendered in the layer

Clément Foucault noreply at git.blender.org
Sat Dec 14 03:31:28 CET 2019


Commit: 8ea92115f3dc33d8e67f3f467f7525911e418e7d
Author: Clément Foucault
Date:   Sat Dec 14 03:31:10 2019 +0100
Branches: greasepencil-refactor
https://developer.blender.org/rB8ea92115f3dc33d8e67f3f467f7525911e418e7d

GPencil: Refactor: Speedup: Only blend pixels rendered in the layer

===================================================================

M	source/blender/draw/engines/gpencil/gpencil_cache_utils.c

===================================================================

diff --git a/source/blender/draw/engines/gpencil/gpencil_cache_utils.c b/source/blender/draw/engines/gpencil/gpencil_cache_utils.c
index 293fd306721..81ed4f1cab0 100644
--- a/source/blender/draw/engines/gpencil/gpencil_cache_utils.c
+++ b/source/blender/draw/engines/gpencil/gpencil_cache_utils.c
@@ -86,7 +86,7 @@ GPENCIL_tLayer *gpencil_layer_cache_add_new(GPENCIL_PrivateData *pd, Object *ob,
   }
 
   if ((gpl->blend_mode != eGplBlendMode_Regular) || (gpl->opacity < 1.0f)) {
-    DRWState state = DRW_STATE_WRITE_COLOR;
+    DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_STENCIL_EQUAL;
     switch (gpl->blend_mode) {
       case eGplBlendMode_Regular:
         state |= DRW_STATE_BLEND_ALPHA_PREMUL;
@@ -119,6 +119,7 @@ GPENCIL_tLayer *gpencil_layer_cache_add_new(GPENCIL_PrivateData *pd, Object *ob,
     DRW_shgroup_uniform_float_copy(grp, "blendOpacity", gpl->opacity);
     DRW_shgroup_uniform_texture_ref(grp, "colorBuf", &pd->color_layer_tx);
     DRW_shgroup_uniform_texture_ref(grp, "revealBuf", &pd->reveal_layer_tx);
+    DRW_shgroup_stencil_mask(grp, 0xFF);
     /* TODO only blend pixels that have been rendered. */
     DRW_shgroup_call_procedural_triangles(grp, NULL, 1);
 
@@ -130,7 +131,6 @@ GPENCIL_tLayer *gpencil_layer_cache_add_new(GPENCIL_PrivateData *pd, Object *ob,
       DRW_shgroup_state_enable(grp, DRW_STATE_BLEND_ADD);
       DRW_shgroup_uniform_int_copy(grp, "blendMode", 999);
       DRW_shgroup_uniform_texture_ref(grp, "colorBuf", &pd->color_layer_tx);
-      DRW_shgroup_uniform_texture_ref(grp, "revealBuf", &pd->reveal_layer_tx);
       /* TODO only blend pixels that have been rendered. */
       DRW_shgroup_call_procedural_triangles(grp, NULL, 1);
     }



More information about the Bf-blender-cvs mailing list