diff options
author | Philipp Oeser <info@graphics-engineer.com> | 2020-04-22 15:23:00 +0300 |
---|---|---|
committer | Philipp Oeser <info@graphics-engineer.com> | 2020-04-22 15:23:00 +0300 |
commit | c69a047b908cd2898d5904dc64cb43a4ebd4f22b (patch) | |
tree | c177f1d9569b2a00e5e6d10d3661bd65d51406d2 /source/blender/draw | |
parent | aa09a46fd736061668746e027877b512cc124950 (diff) | |
parent | 470f17f21c06709443b5634a6fc31dc4dc355daf (diff) |
Merge branch 'blender-v2.83-release'
Diffstat (limited to 'source/blender/draw')
-rw-r--r-- | source/blender/draw/engines/eevee/eevee_materials.c | 8 | ||||
-rw-r--r-- | source/blender/draw/engines/gpencil/gpencil_shader.c | 31 | ||||
-rw-r--r-- | source/blender/draw/engines/workbench/workbench_engine.c | 2 | ||||
-rw-r--r-- | source/blender/draw/intern/DRW_render.h | 5 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager.c | 8 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager_data.c | 11 |
6 files changed, 52 insertions, 13 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c index 10ad8f3f1be..dca9f2901ab 100644 --- a/source/blender/draw/engines/eevee/eevee_materials.c +++ b/source/blender/draw/engines/eevee/eevee_materials.c @@ -2089,16 +2089,16 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata, for (int i = 0; i < materials_len; i++) { sculpt_shgrps_array[i] = shgrps_array[i].shading_grp; } - DRW_shgroup_call_sculpt_with_materials(sculpt_shgrps_array, ob, use_vcol); + DRW_shgroup_call_sculpt_with_materials(sculpt_shgrps_array, materials_len, ob, use_vcol); for (int i = 0; i < materials_len; i++) { sculpt_shgrps_array[i] = shgrps_array[i].depth_grp; } - DRW_shgroup_call_sculpt_with_materials(sculpt_shgrps_array, ob, use_vcol); + DRW_shgroup_call_sculpt_with_materials(sculpt_shgrps_array, materials_len, ob, use_vcol); for (int i = 0; i < materials_len; i++) { sculpt_shgrps_array[i] = shgrps_array[i].depth_clip_grp; } - DRW_shgroup_call_sculpt_with_materials(sculpt_shgrps_array, ob, use_vcol); + DRW_shgroup_call_sculpt_with_materials(sculpt_shgrps_array, materials_len, ob, use_vcol); for (int renderpass_index = 0; renderpass_index < stl->g_data->render_passes_material_count; @@ -2106,7 +2106,7 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata, for (int i = 0; i < materials_len; i++) { sculpt_shgrps_array[i] = shgrps_array[i].material_accum_grp[renderpass_index]; } - DRW_shgroup_call_sculpt_with_materials(sculpt_shgrps_array, ob, use_vcol); + DRW_shgroup_call_sculpt_with_materials(sculpt_shgrps_array, materials_len, ob, use_vcol); } /* TODO(fclem): Support shadows in sculpt mode. */ diff --git a/source/blender/draw/engines/gpencil/gpencil_shader.c b/source/blender/draw/engines/gpencil/gpencil_shader.c index 8c7ba42a70e..fe095b1b916 100644 --- a/source/blender/draw/engines/gpencil/gpencil_shader.c +++ b/source/blender/draw/engines/gpencil/gpencil_shader.c @@ -77,10 +77,33 @@ static struct { void GPENCIL_shader_free(void) { - GPUShader **sh_data_as_array = (GPUShader **)&g_shaders; - for (int i = 0; i < (sizeof(g_shaders) / sizeof(GPUShader *)); i++) { - DRW_SHADER_FREE_SAFE(sh_data_as_array[i]); - } + DRW_SHADER_FREE_SAFE(g_shaders.antialiasing_sh[0]); + DRW_SHADER_FREE_SAFE(g_shaders.antialiasing_sh[1]); + DRW_SHADER_FREE_SAFE(g_shaders.antialiasing_sh[2]); + DRW_SHADER_FREE_SAFE(g_shaders.gpencil_sh); + DRW_SHADER_FREE_SAFE(g_shaders.composite_sh); + DRW_SHADER_FREE_SAFE(g_shaders.layer_blend_sh); + DRW_SHADER_FREE_SAFE(g_shaders.depth_merge_sh); + DRW_SHADER_FREE_SAFE(g_shaders.mask_invert_sh); + DRW_SHADER_FREE_SAFE(g_shaders.fx_composite_sh); + DRW_SHADER_FREE_SAFE(g_shaders.fx_colorize_sh); + DRW_SHADER_FREE_SAFE(g_shaders.fx_blur_sh); + DRW_SHADER_FREE_SAFE(g_shaders.fx_glow_sh); + DRW_SHADER_FREE_SAFE(g_shaders.fx_pixel_sh); + DRW_SHADER_FREE_SAFE(g_shaders.fx_rim_sh); + DRW_SHADER_FREE_SAFE(g_shaders.fx_shadow_sh); + DRW_SHADER_FREE_SAFE(g_shaders.fx_transform_sh); + DRW_SHADER_FREE_SAFE(g_shaders.gpencil_fill_sh); + DRW_SHADER_FREE_SAFE(g_shaders.gpencil_stroke_sh); + DRW_SHADER_FREE_SAFE(g_shaders.gpencil_point_sh); + DRW_SHADER_FREE_SAFE(g_shaders.gpencil_edit_point_sh); + DRW_SHADER_FREE_SAFE(g_shaders.gpencil_line_sh); + DRW_SHADER_FREE_SAFE(g_shaders.gpencil_drawing_fill_sh); + DRW_SHADER_FREE_SAFE(g_shaders.gpencil_fullscreen_sh); + DRW_SHADER_FREE_SAFE(g_shaders.gpencil_simple_fullscreen_sh); + DRW_SHADER_FREE_SAFE(g_shaders.gpencil_blend_fullscreen_sh); + DRW_SHADER_FREE_SAFE(g_shaders.gpencil_background_sh); + DRW_SHADER_FREE_SAFE(g_shaders.gpencil_paper_sh); } GPUShader *GPENCIL_shader_antialiasing(int stage) diff --git a/source/blender/draw/engines/workbench/workbench_engine.c b/source/blender/draw/engines/workbench/workbench_engine.c index c6c594dc04d..f3554f32205 100644 --- a/source/blender/draw/engines/workbench/workbench_engine.c +++ b/source/blender/draw/engines/workbench/workbench_engine.c @@ -126,7 +126,7 @@ static void workbench_cache_sculpt_populate(WORKBENCH_PrivateData *wpd, for (int i = 0; i < materials_len; i++) { shgrps[i] = workbench_material_setup(wpd, ob, i + 1, color_type, NULL); } - DRW_shgroup_call_sculpt_with_materials(shgrps, ob, false); + DRW_shgroup_call_sculpt_with_materials(shgrps, materials_len, ob, false); } } diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h index de4bf0303fe..663567fd51e 100644 --- a/source/blender/draw/intern/DRW_render.h +++ b/source/blender/draw/intern/DRW_render.h @@ -411,7 +411,10 @@ void DRW_shgroup_call_instances_with_attrs(DRWShadingGroup *shgroup, struct GPUBatch *inst_attributes); void DRW_shgroup_call_sculpt(DRWShadingGroup *sh, Object *ob, bool wire, bool mask, bool vcol); -void DRW_shgroup_call_sculpt_with_materials(DRWShadingGroup **sh, Object *ob, bool vcol); +void DRW_shgroup_call_sculpt_with_materials(DRWShadingGroup **sh, + int num_sh, + Object *ob, + bool vcol); DRWCallBuffer *DRW_shgroup_call_buffer(DRWShadingGroup *shading_group, struct GPUVertFormat *format, diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index 09b9b63d07a..51222d833c2 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -2054,7 +2054,9 @@ void DRW_draw_select_loop(struct Depsgraph *depsgraph, } else if (!draw_surface) { /* grease pencil selection */ - use_drw_engine(&draw_engine_gpencil_type); + if (drw_gpencil_engine_needed(depsgraph, v3d)) { + use_drw_engine(&draw_engine_gpencil_type); + } drw_engines_enable_overlays(); } @@ -2062,7 +2064,9 @@ void DRW_draw_select_loop(struct Depsgraph *depsgraph, /* Draw surface for occlusion. */ drw_engines_enable_basic(); /* grease pencil selection */ - use_drw_engine(&draw_engine_gpencil_type); + if (drw_gpencil_engine_needed(depsgraph, v3d)) { + use_drw_engine(&draw_engine_gpencil_type); + } drw_engines_enable_overlays(); } diff --git a/source/blender/draw/intern/draw_manager_data.c b/source/blender/draw/intern/draw_manager_data.c index 0544bb3c49b..1d0fe957631 100644 --- a/source/blender/draw/intern/draw_manager_data.c +++ b/source/blender/draw/intern/draw_manager_data.c @@ -858,6 +858,7 @@ void DRW_shgroup_call_instances_with_attrs(DRWShadingGroup *shgroup, typedef struct DRWSculptCallbackData { Object *ob; DRWShadingGroup **shading_groups; + int num_shading_groups; bool use_wire; bool use_mats; bool use_mask; @@ -896,6 +897,9 @@ static void sculpt_draw_cb(DRWSculptCallbackData *scd, GPU_PBVH_Buffers *buffers if (scd->use_mats) { index = GPU_pbvh_buffers_material_index_get(buffers); + if (index >= scd->num_shading_groups) { + index = 0; + } } DRWShadingGroup *shgrp = scd->shading_groups[index]; @@ -1035,6 +1039,7 @@ void DRW_shgroup_call_sculpt( DRWSculptCallbackData scd = { .ob = ob, .shading_groups = &shgroup, + .num_shading_groups = 1, .use_wire = use_wire, .use_mats = false, .use_mask = use_mask, @@ -1042,11 +1047,15 @@ void DRW_shgroup_call_sculpt( drw_sculpt_generate_calls(&scd, use_vcol); } -void DRW_shgroup_call_sculpt_with_materials(DRWShadingGroup **shgroups, Object *ob, bool use_vcol) +void DRW_shgroup_call_sculpt_with_materials(DRWShadingGroup **shgroups, + int num_shgroups, + Object *ob, + bool use_vcol) { DRWSculptCallbackData scd = { .ob = ob, .shading_groups = shgroups, + .num_shading_groups = num_shgroups, .use_wire = false, .use_mats = true, .use_mask = false, |