Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFalk David <falkdavid@gmx.de>2022-02-10 13:34:12 +0300
committerFalk David <falkdavid@gmx.de>2022-02-10 13:35:56 +0300
commite2befa425a84c9e4ec715442e85624a5d3669a4f (patch)
tree0965c6eb7d30eceeab8300288197f4e77b10a097 /source/blender/makesdna/DNA_gpencil_types.h
parent84f30ac3a2e8b3017ef7dda34643e573a1f476b7 (diff)
GPencil: Update-on-write using update cache
This implements the update cache described in T95401. The cache is currently only used for drawing strokes and sculpting (using the push brush). **Note: Making use of the cache throughout grease pencil will have to be done incrementally in other patches. ** The update cache stores what elements have changed in the original data-block since the last time the eval object was updated. Additionally, the update cache can store multiple updates to the data and minimizes the number of elements that need to be copied. Elements can be tagged using `BKE_gpencil_tag_full_update` and `BKE_gpencil_tag_light_update`. A full update means that the element itself will be copied but also all of the content inside. E.g. when a layer is tagged for a full update, the layer, all the frames inside the layer and all the strokes inside the frames will be copied. A light update means that only the properties of the element are copied without any of the content. E.g. if a layer is tagged with a light update, it will copy the layer name, opacity, transform, etc. When the update cache is in use (e.g. elements have been tagged) then the depsgraph will not trigger a copy-on-write, but an update-on-write. This means that the update cache will be used to determine what elements have changed and then only those elements will be copied over to the eval object. If the update cache is empty or the data block was tagged with a full update, we always fall back to a copy-on-write. Currently, the update cache is only used by the active depsgraph. This is because we need to free the update cache after an update-on-write so it's reset and we need to make sure it is not freed or read by other depsgraphs. Co-authored-by: @yann-lty This patch was contributed by The SPA Studios. Reviewed By: sergey, antoniov, #dependency_graph, pepeland, mendio Maniphest Tasks: T95401 Differential Revision: https://developer.blender.org/D13984
Diffstat (limited to 'source/blender/makesdna/DNA_gpencil_types.h')
-rw-r--r--source/blender/makesdna/DNA_gpencil_types.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/source/blender/makesdna/DNA_gpencil_types.h b/source/blender/makesdna/DNA_gpencil_types.h
index 0f570f8603d..3340782d64a 100644
--- a/source/blender/makesdna/DNA_gpencil_types.h
+++ b/source/blender/makesdna/DNA_gpencil_types.h
@@ -35,6 +35,7 @@ struct AnimData;
struct Curve;
struct Curve;
struct MDeformVert;
+struct GPencilUpdateCache;
#define GP_DEFAULT_PIX_FACTOR 1.0f
#define GP_DEFAULT_GRID_LINES 4
@@ -325,6 +326,8 @@ typedef struct bGPDstroke {
/** Curve used to edit the stroke using Bezier handlers. */
struct bGPDcurve *editcurve;
+ /* NOTE: When adding new members, make sure to add them to BKE_gpencil_stroke_copy_settings as well! */
+
bGPDstroke_Runtime runtime;
void *_pad5;
} bGPDstroke;
@@ -409,6 +412,8 @@ typedef struct bGPDframe {
/** Keyframe type (eBezTriple_KeyframeType). */
short key_type;
+ /* NOTE: When adding new members, make sure to add them to BKE_gpencil_frame_copy_settings as well! */
+
bGPDframe_Runtime runtime;
} bGPDframe;
@@ -532,6 +537,8 @@ typedef struct bGPDlayer {
float layer_mat[4][4], layer_invmat[4][4];
char _pad3[4];
+ /* NOTE: When adding new members, make sure to add them to BKE_gpencil_layer_copy_settings as well! */
+
bGPDlayer_Runtime runtime;
} bGPDlayer;
@@ -633,6 +640,8 @@ typedef struct bGPdata_Runtime {
Brush *sbuffer_brush;
struct GpencilBatchCache *gpencil_cache;
struct LineartCache *lineart_cache;
+
+ struct GPencilUpdateCache *update_cache;
} bGPdata_Runtime;
/* grid configuration */
@@ -726,6 +735,8 @@ typedef struct bGPdata {
bGPgrid grid;
+ /* NOTE: When adding new members, make sure to add them to BKE_gpencil_data_copy_settings as well! */
+
bGPdata_Runtime runtime;
} bGPdata;