[Bf-blender-cvs] [03bf290eae9] master: GPencil: Reduce VBO memory footprint when using modifiers

Antonio Vazquez noreply at git.blender.org
Fri Oct 4 10:21:27 CEST 2019


Commit: 03bf290eae99a0026b39b6e8351bd0d0eed3bc7e
Author: Antonio Vazquez
Date:   Fri Oct 4 10:14:49 2019 +0200
Branches: master
https://developer.blender.org/rB03bf290eae99a0026b39b6e8351bd0d0eed3bc7e

GPencil: Reduce VBO memory footprint when using modifiers

Before, the modifiers were evaluated in Draw Engine and this required to calculate a factor to increase the VBO size.

Now, the modifiers are evaluated in Depsgraph and the Draw Engine receives the evaluated stroke with the final number of vertices. As the number of vertices is the final value already, if Draw Manager increases the number with the modifiers only increases the memory with empty space because never would be used. This commit removes this double calculation, reducing the memory usage and removes a loop to calculate the size by modifier too.

Also, the function getDuplicationFactor() has been removed because is not required anymore.

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

M	source/blender/blenkernel/BKE_gpencil_modifier.h
M	source/blender/draw/engines/gpencil/gpencil_draw_utils.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilbuild.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c
M	source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c
M	source/blender/gpencil_modifiers/intern/MOD_gpenciltime.c
M	source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c

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

diff --git a/source/blender/blenkernel/BKE_gpencil_modifier.h b/source/blender/blenkernel/BKE_gpencil_modifier.h
index 918f85d146c..9cbc7d05ac2 100644
--- a/source/blender/blenkernel/BKE_gpencil_modifier.h
+++ b/source/blender/blenkernel/BKE_gpencil_modifier.h
@@ -261,12 +261,6 @@ typedef struct GpencilModifierTypeInfo {
                          struct Object *ob,
                          GreasePencilTexWalkFunc walk,
                          void *userData);
-
-  /**
-   * Get the number of times the strokes are duplicated in this modifier.
-   * This is used to calculate the size of the GPU VBOs
-   */
-  int (*getDuplicationFactor)(struct GpencilModifierData *md);
 } GpencilModifierTypeInfo;
 
 /* Initialize modifier's global data (type info and some common global storages). */
diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_utils.c b/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
index ce5d8cbf732..a13896a2b08 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
@@ -37,7 +37,6 @@
 #include "DNA_gpencil_types.h"
 #include "DNA_material_types.h"
 #include "DNA_view3d_types.h"
-#include "DNA_gpencil_modifier_types.h"
 
 /* If builtin shaders are needed */
 #include "GPU_shader.h"
@@ -225,23 +224,6 @@ static void gpencil_calc_vertex(GPENCIL_StorageList *stl,
   cache->b_point.tot_vertex = cache_ob->tot_vertex;
   cache->b_edit.tot_vertex = cache_ob->tot_vertex;
   cache->b_edlin.tot_vertex = cache_ob->tot_vertex;
-
-  /* some modifiers can change the number of points */
-  int factor = 0;
-  GpencilModifierData *md;
-  for (md = ob->greasepencil_modifiers.first; md; md = md->next) {
-    const GpencilModifierTypeInfo *mti = BKE_gpencil_modifierType_getInfo(md->type);
-    /* only modifiers that change size */
-    if (mti && mti->getDuplicationFactor) {
-      factor = mti->getDuplicationFactor(md);
-
-      cache->b_fill.tot_vertex *= factor;
-      cache->b_stroke.tot_vertex *= factor;
-      cache->b_point.tot_vertex *= factor;
-      cache->b_edit.tot_vertex *= factor;
-      cache->b_edlin.tot_vertex *= factor;
-    }
-  }
 }
 
 /* Helper for doing all the checks on whether a stroke can be drawn */
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c
index 1f2f0554dd5..27c8175af3f 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c
@@ -203,5 +203,4 @@ GpencilModifierTypeInfo modifierType_Gpencil_Armature = {
     /* foreachObjectLink */ foreachObjectLink,
     /* foreachIDLink */ NULL,
     /* foreachTexLink */ NULL,
-    /* getDuplicationFactor */ NULL,
 };
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
index c311497ffbb..bb70b548675 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
@@ -317,14 +317,6 @@ static void foreachObjectLink(GpencilModifierData *md,
   walk(userData, ob, &mmd->object, IDWALK_CB_NOP);
 }
 
-static int getDuplicationFactor(GpencilModifierData *md)
-{
-  ArrayGpencilModifierData *mmd = (ArrayGpencilModifierData *)md;
-  int t = mmd->count;
-  CLAMP_MIN(t, 1);
-  return t;
-}
-
 GpencilModifierTypeInfo modifierType_Gpencil_Array = {
     /* name */ "Array",
     /* structName */ "ArrayGpencilModifierData",
@@ -347,5 +339,4 @@ GpencilModifierTypeInfo modifierType_Gpencil_Array = {
     /* foreachObjectLink */ foreachObjectLink,
     /* foreachIDLink */ NULL,
     /* foreachTexLink */ NULL,
-    /* getDuplicationFactor */ getDuplicationFactor,
 };
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilbuild.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilbuild.c
index d72ace7a191..e3e7168330d 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilbuild.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilbuild.c
@@ -550,5 +550,4 @@ GpencilModifierTypeInfo modifierType_Gpencil_Build = {
     /* foreachObjectLink */ NULL,
     /* foreachIDLink */ NULL,
     /* foreachTexLink */ NULL,
-    /* getDuplicationFactor */ NULL,
 };
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c
index cb429b874a2..cbe2d9a4c4f 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c
@@ -168,5 +168,4 @@ GpencilModifierTypeInfo modifierType_Gpencil_Color = {
     /* foreachObjectLink */ NULL,
     /* foreachIDLink */ NULL,
     /* foreachTexLink */ NULL,
-    /* getDuplicationFactor */ NULL,
 };
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c
index 234b4deeceb..bc62d0d69bb 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c
@@ -357,5 +357,4 @@ GpencilModifierTypeInfo modifierType_Gpencil_Hook = {
     /* foreachObjectLink */ foreachObjectLink,
     /* foreachIDLink */ NULL,
     /* foreachTexLink */ NULL,
-    /* getDuplicationFactor */ NULL,
 };
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c b/source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c
index 6b74f96ce31..9dbf7b35bc5 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c
@@ -219,5 +219,4 @@ GpencilModifierTypeInfo modifierType_Gpencil_Lattice = {
     /* foreachObjectLink */ foreachObjectLink,
     /* foreachIDLink */ NULL,
     /* foreachTexLink */ NULL,
-    /* getDuplicationFactor */ NULL,
 };
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c
index e391adde829..ef06e14b3d7 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c
@@ -203,21 +203,6 @@ static void foreachObjectLink(GpencilModifierData *md,
   walk(userData, ob, &mmd->object, IDWALK_CB_NOP);
 }
 
-static int getDuplicationFactor(GpencilModifierData *md)
-{
-  MirrorGpencilModifierData *mmd = (MirrorGpencilModifierData *)md;
-  int factor = 1;
-  /* create a duplication for each axis */
-  for (int xi = 0; xi < 3; xi++) {
-    if (mmd->flag & (GP_MIRROR_AXIS_X << xi)) {
-      factor++;
-    }
-  }
-  CLAMP_MIN(factor, 1);
-
-  return factor;
-}
-
 GpencilModifierTypeInfo modifierType_Gpencil_Mirror = {
     /* name */ "Mirror",
     /* structName */ "MirrorGpencilModifierData",
@@ -240,5 +225,4 @@ GpencilModifierTypeInfo modifierType_Gpencil_Mirror = {
     /* foreachObjectLink */ foreachObjectLink,
     /* foreachIDLink */ NULL,
     /* foreachTexLink */ NULL,
-    /* getDuplicationFactor */ getDuplicationFactor,
 };
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c
index b286b55829e..f34477aaab2 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c
@@ -274,5 +274,4 @@ GpencilModifierTypeInfo modifierType_Gpencil_Noise = {
     /* foreachObjectLink */ NULL,
     /* foreachIDLink */ NULL,
     /* foreachTexLink */ NULL,
-    /* getDuplicationFactor */ NULL,
 };
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c b/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c
index 08f67eedc86..70d463fff76 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c
@@ -148,5 +148,4 @@ GpencilModifierTypeInfo modifierType_Gpencil_Offset = {
     /* foreachObjectLink */ NULL,
     /* foreachIDLink */ NULL,
     /* foreachTexLink */ NULL,
-    /* getDuplicationFactor */ NULL,
 };
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c
index 22610771045..c0892a1d91a 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c
@@ -206,5 +206,4 @@ GpencilModifierTypeInfo modifierType_Gpencil_Opacity = {
     /* foreachObjectLink */ NULL,
     /* foreachIDLink */ NULL,
     /* foreachTexLink */ NULL,
-    /* getDuplicationFactor */ NULL,
 };
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c
index 25a56c4385c..9594fc8581e 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c
@@ -144,5 +144,4 @@ GpencilModifierTypeInfo modifierType_Gpencil_Simplify = {
     /* foreachObjectLink */ NULL,
     /* foreachIDLink */ NULL,
     /* foreachTexLink */ NULL,
-    /* getDuplicationFactor */ NULL,
 };
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c
index 5ec7fe4ff18..68060711681 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c
@@ -155,5 +155,4 @@ GpencilModifierTypeInfo modifierType_Gpencil_Smooth = {
     /* foreachObjectLink */ NULL,
     /* foreachIDLink */ NULL,
     /* foreachTexLink */ NULL,
-    /* getDuplicationFactor */ NULL,
 };
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c
index 107e1922d25..89d6565d0dd 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c
@@ -103,14 +103,6 @@ static void bakeModifier(struct Main *UNUSED(bmain),
   }
 }
 
-static int getDuplicationFactor(GpencilModifierData *md)
-{
-  SubdivGpencilModifierData *mmd = (SubdivGpencilModifierData *)md;
-  int t = (mmd->level + 1) * (mmd->level + 1);

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list