diff options
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/draw/engines/gpencil/gpencil_draw_utils.c | 26 | ||||
-rw-r--r-- | source/blender/draw/engines/gpencil/gpencil_engine.c | 16 | ||||
-rw-r--r-- | source/blender/draw/engines/gpencil/gpencil_engine.h | 9 |
3 files changed, 30 insertions, 21 deletions
diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_utils.c b/source/blender/draw/engines/gpencil/gpencil_draw_utils.c index 19a28031ce0..4ff613b2714 100644 --- a/source/blender/draw/engines/gpencil/gpencil_draw_utils.c +++ b/source/blender/draw/engines/gpencil/gpencil_draw_utils.c @@ -414,7 +414,8 @@ static void set_wireframe_color(Object *ob, } /* create shading group for filling */ -static DRWShadingGroup *gpencil_shgroup_fill_create(GPENCIL_Data *vedata, +static DRWShadingGroup *gpencil_shgroup_fill_create(GPENCIL_e_data *e_data, + GPENCIL_Data *vedata, DRWPass *pass, GPUShader *shader, Object *ob, @@ -543,7 +544,7 @@ static DRWShadingGroup *gpencil_shgroup_fill_create(GPENCIL_Data *vedata, } else { /* if no texture defined, need a blank texture to avoid errors in draw manager */ - DRW_shgroup_uniform_texture(grp, "myTexture", stl->g_data->gpencil_blank_texture); + DRW_shgroup_uniform_texture(grp, "myTexture", e_data->gpencil_blank_texture); stl->shgroups[id].texture_clamp = 0; DRW_shgroup_uniform_int(grp, "texture_clamp", &stl->shgroups[id].texture_clamp, 1); } @@ -563,7 +564,8 @@ bool gpencil_onion_active(bGPdata *gpd) } /* create shading group for strokes */ -DRWShadingGroup *gpencil_shgroup_stroke_create(GPENCIL_Data *vedata, +DRWShadingGroup *gpencil_shgroup_stroke_create(GPENCIL_e_data *e_data, + GPENCIL_Data *vedata, DRWPass *pass, GPUShader *shader, Object *ob, @@ -722,14 +724,15 @@ DRWShadingGroup *gpencil_shgroup_stroke_create(GPENCIL_Data *vedata, } else { /* if no texture defined, need a blank texture to avoid errors in draw manager */ - DRW_shgroup_uniform_texture(grp, "myTexture", stl->g_data->gpencil_blank_texture); + DRW_shgroup_uniform_texture(grp, "myTexture", e_data->gpencil_blank_texture); } return grp; } /* create shading group for points */ -static DRWShadingGroup *gpencil_shgroup_point_create(GPENCIL_Data *vedata, +static DRWShadingGroup *gpencil_shgroup_point_create(GPENCIL_e_data *e_data, + GPENCIL_Data *vedata, DRWPass *pass, GPUShader *shader, Object *ob, @@ -894,7 +897,7 @@ static DRWShadingGroup *gpencil_shgroup_point_create(GPENCIL_Data *vedata, } else { /* if no texture defined, need a blank texture to avoid errors in draw manager */ - DRW_shgroup_uniform_texture(grp, "myTexture", stl->g_data->gpencil_blank_texture); + DRW_shgroup_uniform_texture(grp, "myTexture", e_data->gpencil_blank_texture); } return grp; @@ -1588,6 +1591,7 @@ void gpencil_populate_buffer_strokes(GPENCIL_e_data *e_data, if (gpd->runtime.sbuffer_used > 1) { if ((gp_style) && (gp_style->mode == GP_STYLE_MODE_LINE)) { stl->g_data->shgrps_drawing_stroke = gpencil_shgroup_stroke_create( + e_data, vedata, psl->drawing_pass, e_data->gpencil_stroke_sh, @@ -1613,6 +1617,7 @@ void gpencil_populate_buffer_strokes(GPENCIL_e_data *e_data, } else { stl->g_data->shgrps_drawing_stroke = gpencil_shgroup_point_create( + e_data, vedata, psl->drawing_pass, e_data->gpencil_point_sh, @@ -1800,7 +1805,8 @@ static void gpencil_shgroups_create(GPENCIL_e_data *e_data, case eGpencilBatchGroupType_Stroke: { const int len = elm->vertex_idx - start_stroke; - shgrp = gpencil_shgroup_stroke_create(vedata, + shgrp = gpencil_shgroup_stroke_create(e_data, + vedata, stroke_pass, e_data->gpencil_stroke_sh, ob, @@ -1838,7 +1844,8 @@ static void gpencil_shgroups_create(GPENCIL_e_data *e_data, case eGpencilBatchGroupType_Point: { const int len = elm->vertex_idx - start_point; - shgrp = gpencil_shgroup_point_create(vedata, + shgrp = gpencil_shgroup_point_create(e_data, + vedata, stroke_pass, e_data->gpencil_point_sh, ob, @@ -1865,7 +1872,8 @@ static void gpencil_shgroups_create(GPENCIL_e_data *e_data, case eGpencilBatchGroupType_Fill: { const int len = elm->vertex_idx - start_fill; - shgrp = gpencil_shgroup_fill_create(vedata, + shgrp = gpencil_shgroup_fill_create(e_data, + vedata, stroke_pass, e_data->gpencil_fill_sh, ob, diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.c b/source/blender/draw/engines/gpencil/gpencil_engine.c index b2e8cef1db2..2c89b8fcdee 100644 --- a/source/blender/draw/engines/gpencil/gpencil_engine.c +++ b/source/blender/draw/engines/gpencil/gpencil_engine.c @@ -178,6 +178,12 @@ static void GPENCIL_create_framebuffers(void *vedata) static void GPENCIL_create_shaders(void) { + /* blank texture used if no texture defined for fill shader */ + if (!e_data.gpencil_blank_texture) { + float rect[1][1][4] = {{{0.0f}}}; + e_data.gpencil_blank_texture = DRW_texture_create_2d( + 1, 1, GPU_RGBA8, DRW_TEX_FILTER, (float *)rect); + } /* normal fill shader */ if (!e_data.gpencil_fill_sh) { e_data.gpencil_fill_sh = GPU_shader_create_from_arrays({ @@ -293,6 +299,8 @@ static void GPENCIL_engine_free(void) DRW_SHADER_FREE_SAFE(e_data.gpencil_background_sh); DRW_SHADER_FREE_SAFE(e_data.gpencil_paper_sh); + DRW_TEXTURE_FREE_SAFE(e_data.gpencil_blank_texture); + /* effects */ GPENCIL_delete_fx_shaders(&e_data); } @@ -338,17 +346,11 @@ void GPENCIL_cache_init(void *vedata) stl->g_data->shgrps_edit_point = NULL; /* reset textures */ - stl->g_data->gpencil_blank_texture = NULL; stl->g_data->batch_buffer_stroke = NULL; stl->g_data->batch_buffer_fill = NULL; stl->g_data->batch_buffer_ctrlpoint = NULL; stl->g_data->batch_grid = NULL; - /* blank texture used if no texture defined for fill shader */ - float rect[1][1][4] = {{{0.0f}}}; - stl->g_data->gpencil_blank_texture = DRW_texture_create_2d( - 1, 1, GPU_RGBA8, DRW_TEX_FILTER, (float *)rect); - if (!stl->shgroups) { /* Alloc maximum size because count strokes is very slow and can be very complex due onion * skinning. @@ -789,8 +791,6 @@ void DRW_gpencil_free_runtime_data(void *ved) GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl; /* free gpu data */ - DRW_TEXTURE_FREE_SAFE(stl->g_data->gpencil_blank_texture); - GPU_BATCH_DISCARD_SAFE(stl->g_data->batch_buffer_stroke); MEM_SAFE_FREE(stl->g_data->batch_buffer_stroke); diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.h b/source/blender/draw/engines/gpencil/gpencil_engine.h index 27d537c9a20..b014717e6f5 100644 --- a/source/blender/draw/engines/gpencil/gpencil_engine.h +++ b/source/blender/draw/engines/gpencil/gpencil_engine.h @@ -265,9 +265,6 @@ typedef struct g_data { /* grid geometry */ GPUBatch *batch_grid; - /* textures */ - struct GPUTexture *gpencil_blank_texture; - /* runtime pointers texture */ struct GPUTexture *input_depth_tx; struct GPUTexture *input_color_tx; @@ -297,6 +294,9 @@ typedef enum eGPsession_Flag { } eGPsession_Flag; typedef struct GPENCIL_e_data { + /* textures */ + struct GPUTexture *gpencil_blank_texture; + /* general drawing shaders */ struct GPUShader *gpencil_fill_sh; struct GPUShader *gpencil_stroke_sh; @@ -386,7 +386,8 @@ typedef struct GpencilBatchCache { } GpencilBatchCache; /* general drawing functions */ -struct DRWShadingGroup *gpencil_shgroup_stroke_create(struct GPENCIL_Data *vedata, +struct DRWShadingGroup *gpencil_shgroup_stroke_create(struct GPENCIL_e_data *e_data, + struct GPENCIL_Data *vedata, struct DRWPass *pass, struct GPUShader *shader, struct Object *ob, |