From 10f2e39f4803ca4f1110f3866e7aae1ac29acc95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Fri, 7 Feb 2020 23:43:36 +0100 Subject: GPencil: Refactor: New linked mask system The new system is more flexible and a bit simpler from the code side. Each layer has a mask layer slot. If filled with a correct layer name, the mask layer will be rendered again in a separate buffer. This buffer will then be used in the blend pass to modulate the opacity of the layer. This approach is not 100% equivalent to the standard layering in most 2D applications if using varying alpha on a mask applied to multiple layers. However this technique does support any ordering arrangement of the masks. The layers used as mask can now still render normaly. --- source/blender/blenkernel/BKE_gpencil.h | 1 + source/blender/blenkernel/intern/gpencil.c | 8 ++++++++ 2 files changed, 9 insertions(+) (limited to 'source/blender/blenkernel') diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h index 495fe4eb7f6..f19af3cb1b7 100644 --- a/source/blender/blenkernel/BKE_gpencil.h +++ b/source/blender/blenkernel/BKE_gpencil.h @@ -179,6 +179,7 @@ struct bGPDframe *BKE_gpencil_layer_frame_get(struct bGPDlayer *gpl, struct bGPDframe *BKE_gpencil_layer_frame_find(struct bGPDlayer *gpl, int cframe); bool BKE_gpencil_layer_frame_delete(struct bGPDlayer *gpl, struct bGPDframe *gpf); +struct bGPDlayer *BKE_gpencil_layer_named_get(struct bGPdata *gpd, const char *name); struct bGPDlayer *BKE_gpencil_layer_active_get(struct bGPdata *gpd); void BKE_gpencil_layer_active_set(struct bGPdata *gpd, struct bGPDlayer *active); void BKE_gpencil_layer_delete(struct bGPdata *gpd, struct bGPDlayer *gpl); diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c index 2b58525396b..02cbbcc4060 100644 --- a/source/blender/blenkernel/intern/gpencil.c +++ b/source/blender/blenkernel/intern/gpencil.c @@ -1002,6 +1002,14 @@ bool BKE_gpencil_layer_frame_delete(bGPDlayer *gpl, bGPDframe *gpf) return changed; } +bGPDlayer *BKE_gpencil_layer_named_get(bGPdata *gpd, const char *name) +{ + if (name[0] == '\0') { + return NULL; + } + return BLI_findstring(&gpd->layers, name, offsetof(bGPDlayer, info)); +} + /* get the active gp-layer for editing */ bGPDlayer *BKE_gpencil_layer_active_get(bGPdata *gpd) { -- cgit v1.2.3