[Bf-blender-cvs] [56bc8e929a7] greasepencil-object: Merge branch 'master' into greasepencil-object
Antonioya
noreply at git.blender.org
Thu Jun 27 16:44:42 CEST 2019
Commit: 56bc8e929a7d5fccf8caec49d2e0889187b9d9f3
Author: Antonioya
Date: Thu Jun 27 16:44:09 2019 +0200
Branches: greasepencil-object
https://developer.blender.org/rB56bc8e929a7d5fccf8caec49d2e0889187b9d9f3
Merge branch 'master' into greasepencil-object
Conflicts:
source/blender/draw/engines/gpencil/gpencil_draw_utils.c
===================================================================
===================================================================
diff --cc source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
index c270480e4dd,18950f00823..65c1ba89dda
--- a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
@@@ -129,19 -129,12 +129,19 @@@ static void gpencil_vbo_ensure_size(Gpe
}
}
+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,
- short thickness,
- const float ink[4],
- const int alignment_mode)
+ void gpencil_get_point_geom(GpencilBatchCacheElem *be,
+ bGPDstroke *gps,
+ short thickness,
+ const float ink[4],
+ const int alignment_mode)
{
int totvertex = gps->totpoints;
if (be->vbo == NULL) {
diff --cc source/blender/draw/engines/gpencil/gpencil_draw_utils.c
index 0af3fcd19fe,fa706812715..de2b799a683
--- a/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
@@@ -82,8 -86,9 +82,8 @@@ static void gpencil_calc_vertex(GPENCIL
(bool)((draw_ctx->v3d->flag2 & V3D_HIDE_OVERLAYS) == 0) :
true;
const bool do_onion = (bool)((gpd->flag & GP_DATA_STROKE_WEIGHTMODE) == 0) && overlay &&
- main_onion && DRW_gpencil_onion_active(gpd) && !playing;
+ main_onion && gpencil_onion_active(gpd) && !playing;
- const bool time_remap = BKE_gpencil_has_time_modifiers(ob);
const bool is_multiedit = (bool)GPENCIL_MULTIEDIT_SESSIONS_ON(gpd);
cache_ob->tot_vertex = 0;
@@@ -1041,8 -1069,9 +1041,8 @@@ static void gpencil_draw_strokes(Gpenci
/* be sure recalc all cache in source stroke to avoid recalculation when frame change
* and improve fps */
- DRW_gpencil_recalc_geometry_caches(
- if (src_gps) {
- gpencil_recalc_geometry_caches(ob, gpl, gp_style, src_gps);
- }
++ gpencil_recalc_geometry_caches(
+ ob, gpl, gp_style, (gps->runtime.gps_orig) ? gps->runtime.gps_orig : gps);
/* if the fill has any value, it's considered a fill and is not drawn if simplify fill is
* enabled */
@@@ -1315,9 -1356,28 +1315,9 @@@ static void gpencil_draw_onionskins(Gpe
}
}
-static void gpencil_copy_frame(bGPDframe *gpf, bGPDframe *derived_gpf)
-{
- derived_gpf->prev = gpf->prev;
- derived_gpf->next = gpf->next;
- derived_gpf->framenum = gpf->framenum;
- derived_gpf->flag = gpf->flag;
- derived_gpf->key_type = gpf->key_type;
- derived_gpf->runtime = gpf->runtime;
- copy_m4_m4(derived_gpf->runtime.parent_obmat, gpf->runtime.parent_obmat);
-
- /* copy strokes */
- BLI_listbase_clear(&derived_gpf->strokes);
- for (bGPDstroke *gps_src = gpf->strokes.first; gps_src; gps_src = gps_src->next) {
- /* make copy of source stroke */
- bGPDstroke *gps_dst = BKE_gpencil_stroke_duplicate(gps_src);
- BLI_addtail(&derived_gpf->strokes, gps_dst);
- }
-}
-
/* Triangulate stroke for high quality fill (this is done only if cache is null or stroke was
* modified) */
- void DRW_gpencil_triangulate_stroke_fill(Object *ob, bGPDstroke *gps)
+ void gpencil_triangulate_stroke_fill(Object *ob, bGPDstroke *gps)
{
BLI_assert(gps->totpoints >= 3);
@@@ -1851,11 -1914,33 +1852,11 @@@ void gpencil_populate_multiedit(GPENCIL
cache->is_dirty = false;
}
-/* ensure there is a derived frame */
-static void gpencil_ensure_derived_frame(bGPdata *gpd,
- bGPDlayer *gpl,
- bGPDframe *gpf,
- GpencilBatchCache *cache,
- bGPDframe **derived_gpf)
-{
- /* create derived frames array data or expand */
- int derived_idx = BLI_findindex(&gpd->layers, gpl);
- *derived_gpf = &cache->derived_array[derived_idx];
-
- /* if no derived frame or dirty cache, create a new one */
- if ((*derived_gpf == NULL) || (cache->is_dirty)) {
- if (*derived_gpf != NULL) {
- /* first clear temp data */
- BKE_gpencil_free_frame_runtime_data(*derived_gpf);
- }
- /* create new data (do not assign new memory)*/
- gpencil_copy_frame(gpf, *derived_gpf);
- }
-}
-
/* helper for populate a complete grease pencil datablock */
- void DRW_gpencil_populate_datablock(GPENCIL_e_data *e_data,
- void *vedata,
- Object *ob,
- tGPencilObjectCache *cache_ob)
+ void gpencil_populate_datablock(GPENCIL_e_data *e_data,
+ void *vedata,
+ Object *ob,
+ tGPencilObjectCache *cache_ob)
{
GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
const DRWContextState *draw_ctx = DRW_context_state_get();
@@@ -1967,9 -2056,14 +1968,9 @@@
cache_ob);
}
- /* clear any lattice data */
- if ((cache->is_dirty) && (ob->greasepencil_modifiers.first)) {
- BKE_gpencil_lattice_clear(ob);
- }
-
/* create batchs and shading groups */
- DRW_gpencil_create_batches(cache);
- DRW_gpencil_shgroups_create(e_data, vedata, ob, cache, cache_ob);
+ gpencil_create_batches(cache);
+ gpencil_shgroups_create(e_data, vedata, ob, cache, cache_ob);
cache->is_dirty = false;
}
diff --cc source/blender/draw/engines/gpencil/gpencil_engine.h
index 3287d355305,416331e7aeb..5467e3720c7
--- a/source/blender/draw/engines/gpencil/gpencil_engine.h
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.h
@@@ -328,66 -341,121 +327,66 @@@ 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 */
- bGPDstroke *gps; /* reference to original stroke */
- short type; /* type of element */
- bool onion; /* the group is part of onion skin */
- int vertex_idx; /* index of vertex data */
-} GpencilBatchGroup;
-
-typedef enum GpencilBatchGroup_Type {
- eGpencilBatchGroupType_Stroke = 1,
- eGpencilBatchGroupType_Point = 2,
- eGpencilBatchGroupType_Fill = 3,
- eGpencilBatchGroupType_Edit = 4,
- 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 *derived_array; /* runtime data created by modifiers */
-} GpencilBatchCache;
-
/* general drawing functions */
- struct DRWShadingGroup *DRW_gpencil_shgroup_stroke_create(struct GPENCIL_Data *vedata,
- struct DRWPass *pass,
- struct GPUShader *shader,
- struct Object *ob,
- struct bGPdata *gpd,
- struct bGPDlayer *gpl,
- struct bGPDstroke *gps,
- struct MaterialGPencilStyle *gp_style,
- int id,
- bool onion,
- const float scale,
- const int shading_type[2]);
- void DRW_gpencil_populate_datablock(struct GPENCIL_e_data *e_data,
- void *vedata,
- struct Object *ob,
- struct tGPencilObjectCache *cache_ob);
- void DRW_gpencil_populate_buffer_strokes(struct GPENCIL_e_data *e_data,
- void *vedata,
- struct ToolSettings *ts,
- struct Object *ob);
- void DRW_gpencil_populate_multiedit(struct GPENCIL_e_data *e_data,
- void *vedata,
- struct Object *ob,
- struct tGPencilObjectCache *cache_ob);
- void DRW_gpencil_triangulate_stroke_fill(struct Object *ob, struct bGPDstroke *gps);
- void DRW_gpencil_populate_particles(struct GPENCIL_e_data *e_data,
- struct GHash *gh_objects,
- void *vedata);
-
- void DRW_gpencil_multisample_ensure(struct GPENCIL_Data *vedata, int rect_w, int rect_h);
+ struct DRWShadingGroup *gpencil_shgroup_stroke_create(struct GPENCIL_Data *vedata,
+ struct DRWPass *pass,
+
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list