[Bf-blender-cvs] [c6cf0b9999a] greasepencil-object: GPencil: Move Runtime Cache data definition to BKE
Antonioya
noreply at git.blender.org
Sat May 4 10:59:47 CEST 2019
Commit: c6cf0b9999ab67af1f45b3865f6dbe6240c92de8
Author: Antonioya
Date: Sat May 4 10:52:37 2019 +0200
Branches: greasepencil-object
https://developer.blender.org/rBc6cf0b9999ab67af1f45b3865f6dbe6240c92de8
GPencil: Move Runtime Cache data definition to BKE
This is the first step to prepare the code for using the modifiers data in Edit mode.
===================================================================
M source/blender/blenkernel/BKE_gpencil.h
M source/blender/draw/engines/gpencil/gpencil_cache_utils.c
M source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
M source/blender/draw/engines/gpencil/gpencil_engine.h
===================================================================
diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index 2e5d5911239..9429ce36830 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -49,6 +49,50 @@ struct bGPdata;
struct MDeformVert;
struct MDeformWeight;
+struct GPUBatch;
+struct GPUVertBuf;
+struct GPUVertFormat;
+struct GpencilBatchGroup;
+
+/* GPUBatch Cache Element */
+typedef struct GpencilBatchCacheElem {
+ struct GPUBatch *batch;
+ struct GPUVertBuf *vbo;
+ int vbo_len;
+ /* attr ids */
+ struct GPUVertFormat *format;
+ uint pos_id;
+ uint color_id;
+ uint thickness_id;
+ uint uvdata_id;
+ uint prev_pos_id;
+
+ /* size for VBO alloc */
+ int tot_vertex;
+} GpencilBatchCacheElem;
+
+/* Runtime data for GPU and derived frames after applying modifiers */
+typedef struct GpencilBatchCache {
+ struct GpencilBatchCacheElem b_stroke;
+ struct GpencilBatchCacheElem b_point;
+ struct GpencilBatchCacheElem b_fill;
+ struct GpencilBatchCacheElem b_edit;
+ struct GpencilBatchCacheElem b_edlin;
+
+ /* settings to determine if cache is invalid */
+ bool is_dirty;
+ bool is_editmode;
+ int cache_frame;
+
+ /* data with the shading groups */
+ int grp_used; /* total groups in arrays */
+ int grp_size; /* max size of the array */
+ struct GpencilBatchGroup *grp_cache; /* array of elements */
+
+ int tot_layers;
+ struct bGPDframe *derived_array; /* runtime data created by modifiers */
+} GpencilBatchCache;
+
/* ------------ Grease-Pencil API ------------------ */
void BKE_gpencil_free_point_weights(struct MDeformVert *dvert);
diff --git a/source/blender/draw/engines/gpencil/gpencil_cache_utils.c b/source/blender/draw/engines/gpencil/gpencil_cache_utils.c
index 67ffe62f3c6..9b833a99d30 100644
--- a/source/blender/draw/engines/gpencil/gpencil_cache_utils.c
+++ b/source/blender/draw/engines/gpencil/gpencil_cache_utils.c
@@ -301,6 +301,13 @@ static void gpencil_batch_cache_clear(GpencilBatchCache *cache)
MEM_SAFE_FREE(cache->b_edit.batch);
MEM_SAFE_FREE(cache->b_edlin.batch);
+ /* internal format data */
+ MEM_SAFE_FREE(cache->b_stroke.format);
+ MEM_SAFE_FREE(cache->b_point.format);
+ MEM_SAFE_FREE(cache->b_fill.format);
+ MEM_SAFE_FREE(cache->b_edit.format);
+ MEM_SAFE_FREE(cache->b_edlin.format);
+
MEM_SAFE_FREE(cache->grp_cache);
cache->grp_size = 0;
cache->grp_used = 0;
diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
index 7dabbcf4c41..9849c23c947 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
@@ -129,6 +129,13 @@ static void gpencil_vbo_ensure_size(GpencilBatchCacheElem *be, int totvertex)
}
}
+static void gpencil_elem_format_ensure(GpencilBatchCacheElem *be)
+{
+ if (be->format == NULL) {
+ be->format = MEM_callocN(sizeof(GPUVertFormat), __func__);
+ }
+}
+
/* create batch geometry data for points stroke shader */
void DRW_gpencil_get_point_geom(GpencilBatchCacheElem *be,
bGPDstroke *gps,
@@ -137,16 +144,17 @@ void DRW_gpencil_get_point_geom(GpencilBatchCacheElem *be,
{
int totvertex = gps->totpoints;
if (be->vbo == NULL) {
- be->pos_id = GPU_vertformat_attr_add(&be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
- be->color_id = GPU_vertformat_attr_add(&be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
+ gpencil_elem_format_ensure(be);
+ be->pos_id = GPU_vertformat_attr_add(be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
+ be->color_id = GPU_vertformat_attr_add(be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
be->thickness_id = GPU_vertformat_attr_add(
- &be->format, "thickness", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
+ be->format, "thickness", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
be->uvdata_id = GPU_vertformat_attr_add(
- &be->format, "uvdata", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
+ be->format, "uvdata", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
be->prev_pos_id = GPU_vertformat_attr_add(
- &be->format, "prev_pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
+ be->format, "prev_pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
- be->vbo = GPU_vertbuf_create_with_format(&be->format);
+ be->vbo = GPU_vertbuf_create_with_format(be->format);
GPU_vertbuf_data_alloc(be->vbo, be->tot_vertex);
be->vbo_len = 0;
}
@@ -214,14 +222,15 @@ void DRW_gpencil_get_stroke_geom(struct GpencilBatchCacheElem *be,
int totvertex = totpoints + cyclic_add + 2;
if (be->vbo == NULL) {
- be->pos_id = GPU_vertformat_attr_add(&be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
- be->color_id = GPU_vertformat_attr_add(&be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
+ gpencil_elem_format_ensure(be);
+ be->pos_id = GPU_vertformat_attr_add(be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
+ be->color_id = GPU_vertformat_attr_add(be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
be->thickness_id = GPU_vertformat_attr_add(
- &be->format, "thickness", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
+ be->format, "thickness", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
be->uvdata_id = GPU_vertformat_attr_add(
- &be->format, "uvdata", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
+ be->format, "uvdata", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
- be->vbo = GPU_vertbuf_create_with_format(&be->format);
+ be->vbo = GPU_vertbuf_create_with_format(be->format);
GPU_vertbuf_data_alloc(be->vbo, be->tot_vertex);
be->vbo_len = 0;
}
@@ -327,12 +336,13 @@ void DRW_gpencil_get_fill_geom(struct GpencilBatchCacheElem *be,
int totvertex = gps->tot_triangles * 3;
if (be->vbo == NULL) {
- be->pos_id = GPU_vertformat_attr_add(&be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
- be->color_id = GPU_vertformat_attr_add(&be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
+ gpencil_elem_format_ensure(be);
+ be->pos_id = GPU_vertformat_attr_add(be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
+ be->color_id = GPU_vertformat_attr_add(be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
be->uvdata_id = GPU_vertformat_attr_add(
- &be->format, "texCoord", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
+ be->format, "texCoord", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
- be->vbo = GPU_vertbuf_create_with_format(&be->format);
+ be->vbo = GPU_vertbuf_create_with_format(be->format);
GPU_vertbuf_data_alloc(be->vbo, be->tot_vertex);
be->vbo_len = 0;
}
@@ -725,12 +735,13 @@ void DRW_gpencil_get_edit_geom(struct GpencilBatchCacheElem *be,
unselectColor[3] = alpha;
if (be->vbo == NULL) {
- be->pos_id = GPU_vertformat_attr_add(&be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
- be->color_id = GPU_vertformat_attr_add(&be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
+ gpencil_elem_format_ensure(be);
+ be->pos_id = GPU_vertformat_attr_add(be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
+ be->color_id = GPU_vertformat_attr_add(be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
be->thickness_id = GPU_vertformat_attr_add(
- &be->format, "size", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
+ be->format, "size", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
- be->vbo = GPU_vertbuf_create_with_format(&be->format);
+ be->vbo = GPU_vertbuf_create_with_format(be->format);
GPU_vertbuf_data_alloc(be->vbo, be->tot_vertex);
be->vbo_len = 0;
}
@@ -810,10 +821,11 @@ void DRW_gpencil_get_edlin_geom(struct GpencilBatchCacheElem *be,
copy_v4_v4(linecolor, gpd->line_color);
if (be->vbo == NULL) {
- be->pos_id = GPU_vertformat_attr_add(&be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
- be->color_id = GPU_vertformat_attr_add(&be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
+ gpencil_elem_format_ensure(be);
+ be->pos_id = GPU_vertformat_attr_add(be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
+ be->color_id = GPU_vertformat_attr_add(be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
- be->vbo = GPU_vertbuf_create_with_format(&be->format);
+ be->vbo = GPU_vertbuf_create_with_format(be->format);
GPU_vertbuf_data_alloc(be->vbo, be->tot_vertex);
be->vbo_len = 0;
}
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.h b/source/blender/draw/engines/gpencil/gpencil_engine.h
index 2ac1dc3211c..ba5ee72fd95 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.h
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.h
@@ -34,6 +34,8 @@ struct RenderEngine;
struct RenderLayer;
struct bGPDstroke;
struct tGPspoint;
+struct GpencilBatchCache;
+struct GpencilBatchCacheElem;
#define GPENCIL_CACHE_BLOCK_SIZE 8
#define GPENCIL_MAX_SHGROUPS 65536
@@ -345,23 +347,6 @@ typedef struct GPENCIL_e_data {
} GPENCIL_e_data; /* Engine data */
-/* GPUBatch Cache */
-typedef struct GpencilBatchCacheElem {
- GPUBatch *batch;
- GPUVertBuf *vbo;
- int vbo_len;
- /* attr ids */
- GPUVertFormat format;
- uint pos_id;
- uint color_id;
- uint thickness_id;
- uint uvdata_id;
- uint prev_pos_id;
-
- /* size for VBO alloc */
- int tot_vertex;
-} GpencilBatchCacheElem;
-
typedef struct GpencilBatchGroup {
bGPDlayer *gpl; /* reference to original layer */
bGPDframe *gpf; /* reference to original frame */
@@ -379,27 +364,6 @@ typedef enum GpencilBatchGroup_Type {
eGpencilBatchGroupType_Edlin = 5,
} GpencilBatchGroup_Type;
-typedef struct GpencilBatchCache {
- GpencilBatchCacheElem b_stroke;
- GpencilBatchCacheElem b_point;
- GpencilBatchCacheElem b_fill;
- GpencilBatchCacheElem b_edit;
- GpencilBatchCacheElem b_edlin;
-
- /* settings to determine if cache is invalid */
- bool is_dirty;
- bool is_editmode;
- int cache_frame;
-
- /* data with the shading groups */
- int grp_used; /* total groups in arrays */
- int grp_size; /* max size of the array */
- struct GpencilBatchGroup *grp_cache; /* array of elements */
-
- int tot_layers;
- struct bGPDframe *der
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list