diff options
Diffstat (limited to 'source/blender/draw/engines/gpencil/gpencil_engine.h')
-rw-r--r-- | source/blender/draw/engines/gpencil/gpencil_engine.h | 42 |
1 files changed, 24 insertions, 18 deletions
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.h b/source/blender/draw/engines/gpencil/gpencil_engine.h index 21ac6045792..40522f10b48 100644 --- a/source/blender/draw/engines/gpencil/gpencil_engine.h +++ b/source/blender/draw/engines/gpencil/gpencil_engine.h @@ -38,9 +38,6 @@ struct MaterialGPencilStyle; struct RenderEngine; struct RenderLayer; - /* TODO: these could be system parameter in userprefs screen */ -#define GPENCIL_MAX_GP_OBJ 256 - #define GPENCIL_CACHE_BLOCK_SIZE 8 #define GPENCIL_MAX_SHGROUPS 65536 #define GPENCIL_MIN_BATCH_SLOTS_CHUNK 16 @@ -59,13 +56,17 @@ struct RenderLayer; /* *********** OBJECTS CACHE *********** */ - /* used to save gpencil objects */ + /* used to save gpencil object data for drawing */ typedef struct tGPencilObjectCache { - struct Object *ob; + struct bGPdata *gpd; + char ob_name[64]; int init_grp, end_grp; int idx; /*original index, can change after sort */ /* effects */ + bool has_fx; + ListBase shader_fx; + float pixfactor; DRWShadingGroup *fx_wave_sh; DRWShadingGroup *fx_blur_sh; DRWShadingGroup *fx_colorize_sh; @@ -75,8 +76,11 @@ typedef struct tGPencilObjectCache { DRWShadingGroup *fx_flip_sh; DRWShadingGroup *fx_light_sh; + float loc[3]; + float obmat[4][4]; float zdepth; /* z-depth value to sort gp object */ - bool temp_ob; /* flag to tag temporary objects that must be removed after drawing loop */ + bool is_dup_ob; /* flag to tag duplicate objects */ + bool is_dup_onion; /* other object display onion already */ } tGPencilObjectCache; /* *********** LISTS *********** */ @@ -108,6 +112,7 @@ typedef struct GPENCIL_Storage { bool is_playing; bool is_render; bool is_mat_preview; + bool reset_cache; bool buffer_stroke; bool buffer_fill; const float *pixsize; @@ -191,9 +196,6 @@ typedef struct g_data { struct DRWShadingGroup *shgrps_drawing_fill; struct DRWShadingGroup *shgrps_grid; - /* grid geometry */ - GPUBatch *batch_grid; - int gp_cache_used; /* total objects in cache */ int gp_cache_size; /* size of the cache */ struct tGPencilObjectCache *gp_object_cache; @@ -259,6 +261,9 @@ typedef struct GPENCIL_e_data { GPUBatch *batch_buffer_stroke; GPUBatch *batch_buffer_fill; + /* grid geometry */ + GPUBatch *batch_grid; + } GPENCIL_e_data; /* Engine data */ /* GPUBatch Cache */ @@ -286,35 +291,36 @@ typedef struct GpencilBatchCache { struct DRWShadingGroup *DRW_gpencil_shgroup_stroke_create( struct GPENCIL_e_data *e_data, struct GPENCIL_Data *vedata, struct DRWPass *pass, struct GPUShader *shader, struct Object *ob, struct bGPdata *gpd, struct MaterialGPencilStyle *gp_style, int id, bool onion); -void DRW_gpencil_populate_datablock(struct GPENCIL_e_data *e_data, void *vedata, struct Scene *scene, struct Object *ob, struct bGPdata *gpd); +void DRW_gpencil_populate_datablock(struct GPENCIL_e_data *e_data, void *vedata, + struct Scene *scene, + 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 Scene *scene, struct Object *ob, struct bGPdata *gpd); +void DRW_gpencil_populate_multiedit(struct GPENCIL_e_data *e_data, void *vedata, + struct Scene *scene, struct Object *ob, struct tGPencilObjectCache *cache_ob); void DRW_gpencil_triangulate_stroke_fill(struct bGPDstroke *gps); void DRW_gpencil_multisample_ensure(struct GPENCIL_Data *vedata, int rect_w, int rect_h); /* create geometry functions */ struct GPUBatch *DRW_gpencil_get_point_geom(struct bGPDstroke *gps, short thickness, const float ink[4]); -struct GPUBatch *DRW_gpencil_get_stroke_geom(struct bGPDframe *gpf, struct bGPDstroke *gps, short thickness, const float ink[4]); +struct GPUBatch *DRW_gpencil_get_stroke_geom(struct bGPDstroke *gps, short thickness, const float ink[4]); struct GPUBatch *DRW_gpencil_get_fill_geom(struct Object *ob, struct bGPDstroke *gps, const float color[4]); struct GPUBatch *DRW_gpencil_get_edit_geom(struct bGPDstroke *gps, float alpha, short dflag); struct GPUBatch *DRW_gpencil_get_edlin_geom(struct bGPDstroke *gps, float alpha, short dflag); -struct GPUBatch *DRW_gpencil_get_buffer_stroke_geom(struct bGPdata *gpd, float matrix[4][4], short thickness); +struct GPUBatch *DRW_gpencil_get_buffer_stroke_geom(struct bGPdata *gpd, short thickness); struct GPUBatch *DRW_gpencil_get_buffer_fill_geom(struct bGPdata *gpd); -struct GPUBatch *DRW_gpencil_get_buffer_point_geom(struct bGPdata *gpd, float matrix[4][4], short thickness); +struct GPUBatch *DRW_gpencil_get_buffer_point_geom(struct bGPdata *gpd, short thickness); struct GPUBatch *DRW_gpencil_get_grid(void); /* object cache functions */ struct tGPencilObjectCache *gpencil_object_cache_add( struct tGPencilObjectCache *cache_array, struct Object *ob, - bool is_temp, int *gp_cache_size, int *gp_cache_used); + int *gp_cache_size, int *gp_cache_used); /* geometry batch cache functions */ void gpencil_batch_cache_check_free_slots(struct Object *ob); struct GpencilBatchCache *gpencil_batch_cache_get(struct Object *ob, int cfra); - -/* modifier functions */ -void gpencil_instance_modifiers(struct GPENCIL_StorageList *stl, struct Object *ob); +struct GpencilBatchCache *gpencil_batch_get_element(struct Object *ob); /* effects */ void GPENCIL_create_fx_shaders(struct GPENCIL_e_data *e_data); |