From 64660b902c3fb52fe5a3cb5bf232f90283db8732 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 13 Apr 2017 13:30:53 +1000 Subject: [PATCH] Use 'safe' macros for common free operation Same as MEM_SAFE_FREE macro, checks for NULL, runs free then sets NULL. Blocks of code that do this many times are noisy and likely errors here wouldn't be noticed immediately. Also NULL's static vars which were being left set. --- intern/gawain/gawain/batch.h | 16 +++ intern/gawain/gawain/element.h | 10 ++ intern/gawain/gawain/vertex_buffer.h | 10 ++ .../blender/blenkernel/intern/mesh_render.c | 51 ++++------ source/blender/draw/engines/clay/clay.c | 16 +-- source/blender/draw/engines/eevee/eevee.c | 15 +-- .../blender/draw/engines/eevee/eevee_lights.c | 15 +-- source/blender/draw/intern/DRW_render.h | 12 +++ source/blender/draw/intern/draw_cache.c | 99 +++++++------------ source/blender/draw/intern/draw_manager.c | 4 +- source/blender/draw/modes/edit_curve_mode.c | 3 +- source/blender/draw/modes/edit_lattice_mode.c | 3 +- source/blender/draw/modes/edit_mesh_mode.c | 36 +++---- .../blender/draw/modes/edit_metaball_mode.c | 3 +- source/blender/draw/modes/edit_surface_mode.c | 3 +- source/blender/draw/modes/edit_text_mode.c | 3 +- source/blender/draw/modes/object_mode.c | 12 +-- .../blender/draw/modes/paint_texture_mode.c | 3 +- source/blender/draw/modes/paint_vertex_mode.c | 3 +- source/blender/draw/modes/paint_weight_mode.c | 3 +- source/blender/draw/modes/particle_mode.c | 3 +- source/blender/draw/modes/pose_mode.c | 3 +- source/blender/draw/modes/sculpt_mode.c | 3 +- 23 files changed, 139 insertions(+), 190 deletions(-) diff --git a/intern/gawain/gawain/batch.h b/intern/gawain/gawain/batch.h index 532c45ae832..2802dad3db3 100644 --- a/intern/gawain/gawain/batch.h +++ b/intern/gawain/gawain/batch.h @@ -109,3 +109,19 @@ Batch* create_BatchWithOwnVertexBufferAndElementList(PrimitiveType, VertexFormat Batch* create_BatchInGeneral(PrimitiveType, VertexBufferStuff, ElementListStuff); #endif // future plans + + +/* Macros */ + +#define BATCH_DISCARD_SAFE(batch) do { \ + if (batch != NULL) { \ + Batch_discard(batch); \ + batch = NULL; \ + } \ +} while (0) +#define BATCH_DISCARD_ALL_SAFE(batch) do { \ + if (batch != NULL) { \ + Batch_discard_all(batch); \ + batch = NULL; \ + } \ +} while (0) diff --git a/intern/gawain/gawain/element.h b/intern/gawain/gawain/element.h index f22d7c0ffda..fde395ce898 100644 --- a/intern/gawain/gawain/element.h +++ b/intern/gawain/gawain/element.h @@ -62,3 +62,13 @@ ElementList* ElementList_build(ElementListBuilder*); void ElementList_build_in_place(ElementListBuilder*, ElementList*); void ElementList_discard(ElementList*); + + +/* Macros */ + +#define ELEMENTLIST_DISCARD_SAFE(elem) do { \ + if (elem != NULL) { \ + ElementList_discard(elem); \ + elem = NULL; \ + } \ +} while (0) diff --git a/intern/gawain/gawain/vertex_buffer.h b/intern/gawain/gawain/vertex_buffer.h index 687f15e9e98..3a2575fa2e1 100644 --- a/intern/gawain/gawain/vertex_buffer.h +++ b/intern/gawain/gawain/vertex_buffer.h @@ -62,3 +62,13 @@ void VertexBuffer_fill_attrib_stride(VertexBuffer*, unsigned a_idx, unsigned str // void setAttrib4ub(unsigned a_idx, unsigned v_idx, unsigned char r, unsigned char g, unsigned char b, unsigned char a); void VertexBuffer_use(VertexBuffer*); + + +/* Macros */ + +#define VERTEXBUFFER_DISCARD_SAFE(verts) do { \ + if (verts != NULL) { \ + VertexBuffer_discard(verts); \ + verts = NULL; \ + } \ +} while (0) diff --git a/source/blender/blenkernel/intern/mesh_render.c b/source/blender/blenkernel/intern/mesh_render.c index cf4992cdcb4..2fd5435ba6f 100644 --- a/source/blender/blenkernel/intern/mesh_render.c +++ b/source/blender/blenkernel/intern/mesh_render.c @@ -877,22 +877,10 @@ void BKE_mesh_batch_selection_dirty(Mesh *me) MeshBatchCache *cache = me->batch_cache; if (cache) { /* TODO Separate Flag vbo */ - if (cache->overlay_triangles) { - Batch_discard_all(cache->overlay_triangles); - cache->overlay_triangles = NULL; - } - if (cache->overlay_loose_verts) { - Batch_discard_all(cache->overlay_loose_verts); - cache->overlay_loose_verts = NULL; - } - if (cache->overlay_loose_edges) { - Batch_discard_all(cache->overlay_loose_edges); - cache->overlay_loose_edges = NULL; - } - if (cache->overlay_facedots) { - Batch_discard_all(cache->overlay_facedots); - cache->overlay_facedots = NULL; - } + BATCH_DISCARD_ALL_SAFE(cache->overlay_triangles); + BATCH_DISCARD_ALL_SAFE(cache->overlay_loose_verts); + BATCH_DISCARD_ALL_SAFE(cache->overlay_loose_edges); + BATCH_DISCARD_ALL_SAFE(cache->overlay_facedots); } } @@ -903,27 +891,24 @@ void BKE_mesh_batch_cache_clear(Mesh *me) return; } - if (cache->all_verts) Batch_discard(cache->all_verts); - if (cache->all_edges) Batch_discard(cache->all_edges); - if (cache->all_triangles) Batch_discard(cache->all_triangles); + BATCH_DISCARD_SAFE(cache->all_verts); + BATCH_DISCARD_SAFE(cache->all_edges); + BATCH_DISCARD_SAFE(cache->all_triangles); - if (cache->pos_in_order) VertexBuffer_discard(cache->pos_in_order); - if (cache->edges_in_order) ElementList_discard(cache->edges_in_order); - if (cache->triangles_in_order) ElementList_discard(cache->triangles_in_order); + VERTEXBUFFER_DISCARD_SAFE(cache->pos_in_order); + ELEMENTLIST_DISCARD_SAFE(cache->edges_in_order); + ELEMENTLIST_DISCARD_SAFE(cache->triangles_in_order); - if (cache->overlay_triangles) Batch_discard_all(cache->overlay_triangles); - if (cache->overlay_loose_verts) Batch_discard_all(cache->overlay_loose_verts); - if (cache->overlay_loose_edges) Batch_discard_all(cache->overlay_loose_edges); - if (cache->overlay_facedots) Batch_discard_all(cache->overlay_facedots); + BATCH_DISCARD_ALL_SAFE(cache->overlay_triangles); + BATCH_DISCARD_ALL_SAFE(cache->overlay_loose_verts); + BATCH_DISCARD_ALL_SAFE(cache->overlay_loose_edges); + BATCH_DISCARD_ALL_SAFE(cache->overlay_facedots); - if (cache->triangles_with_normals) Batch_discard(cache->triangles_with_normals); - if (cache->points_with_normals) Batch_discard(cache->points_with_normals); - if (cache->pos_with_normals) VertexBuffer_discard(cache->pos_with_normals); - + BATCH_DISCARD_SAFE(cache->triangles_with_normals); + BATCH_DISCARD_SAFE(cache->points_with_normals); + VERTEXBUFFER_DISCARD_SAFE(cache->pos_with_normals); - if (cache->fancy_edges) { - Batch_discard_all(cache->fancy_edges); - } + BATCH_DISCARD_ALL_SAFE(cache->fancy_edges); } void BKE_mesh_batch_cache_free(Mesh *me) diff --git a/source/blender/draw/engines/clay/clay.c b/source/blender/draw/engines/clay/clay.c index 3f65efc2b28..7aa5e226a61 100644 --- a/source/blender/draw/engines/clay/clay.c +++ b/source/blender/draw/engines/clay/clay.c @@ -632,18 +632,10 @@ static void CLAY_collection_settings_create(RenderEngine *UNUSED(engine), IDProp static void CLAY_engine_free(void) { - if (e_data.clay_sh) { - DRW_shader_free(e_data.clay_sh); - } - if (e_data.matcap_array) { - DRW_texture_free(e_data.matcap_array); - } - if (e_data.jitter_tx) { - DRW_texture_free(e_data.jitter_tx); - } - if (e_data.sampling_tx) { - DRW_texture_free(e_data.sampling_tx); - } + DRW_SHADER_FREE_SAFE(e_data.clay_sh); + DRW_TEXTURE_FREE_SAFE(e_data.matcap_array); + DRW_TEXTURE_FREE_SAFE(e_data.jitter_tx); + DRW_TEXTURE_FREE_SAFE(e_data.sampling_tx); } static const DrawEngineDataSize CLAY_data_size = DRW_VIEWPORT_DATA_SIZE(CLAY_Data); diff --git a/source/blender/draw/engines/eevee/eevee.c b/source/blender/draw/engines/eevee/eevee.c index ae345ae97f0..224eb296b33 100644 --- a/source/blender/draw/engines/eevee/eevee.c +++ b/source/blender/draw/engines/eevee/eevee.c @@ -248,16 +248,11 @@ static void EEVEE_draw_scene(void *vedata) static void EEVEE_engine_free(void) { - if (e_data.default_lit) - DRW_shader_free(e_data.default_lit); - if (e_data.shadow_sh) - DRW_shader_free(e_data.shadow_sh); - if (e_data.tonemap) - DRW_shader_free(e_data.tonemap); - if (e_data.ltc_mat) - DRW_texture_free(e_data.ltc_mat); - if (e_data.ltc_mag) - DRW_texture_free(e_data.ltc_mag); + DRW_SHADER_FREE_SAFE(e_data.default_lit); + DRW_SHADER_FREE_SAFE(e_data.shadow_sh); + DRW_SHADER_FREE_SAFE(e_data.tonemap); + DRW_TEXTURE_FREE_SAFE(e_data.ltc_mat); + DRW_TEXTURE_FREE_SAFE(e_data.ltc_mag); } static void EEVEE_collection_settings_create(RenderEngine *UNUSED(engine), IDProperty *props) diff --git a/source/blender/draw/engines/eevee/eevee_lights.c b/source/blender/draw/engines/eevee/eevee_lights.c index 9a06c665ae2..3dc1f7cb48f 100644 --- a/source/blender/draw/engines/eevee/eevee_lights.c +++ b/source/blender/draw/engines/eevee/eevee_lights.c @@ -125,24 +125,15 @@ void EEVEE_lights_cache_finish(EEVEE_StorageList *stl, EEVEE_TextureList *txl, E /* Step 5 Setup enough layers */ /* Free textures if number mismatch */ if (linfo->num_cube != linfo->cache_num_cube) { - if (txl->shadow_depth_cube_pool) { - DRW_texture_free(txl->shadow_depth_cube_pool); - txl->shadow_depth_cube_pool = NULL; - } + DRW_TEXTURE_FREE_SAFE(txl->shadow_depth_cube_pool); linfo->cache_num_cube = linfo->num_cube; } if (linfo->num_map != linfo->cache_num_map) { - if (txl->shadow_depth_map_pool) { - DRW_texture_free(txl->shadow_depth_map_pool); - txl->shadow_depth_map_pool = NULL; - } + DRW_TEXTURE_FREE_SAFE(txl->shadow_depth_map_pool); linfo->cache_num_map = linfo->num_map; } if (linfo->num_cascade != linfo->cache_num_cascade) { - if (txl->shadow_depth_cascade_pool) { - DRW_texture_free(txl->shadow_depth_cascade_pool); - txl->shadow_depth_cascade_pool = NULL; - } + DRW_TEXTURE_FREE_SAFE(txl->shadow_depth_cascade_pool); linfo->cache_num_cascade = linfo->num_cascade; } diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h index c9435b532f7..b5913eb8742 100644 --- a/source/blender/draw/intern/DRW_render.h +++ b/source/blender/draw/intern/DRW_render.h @@ -153,6 +153,12 @@ struct GPUTexture *DRW_texture_create_2D_array( struct GPUTexture *DRW_texture_create_cube( int w, DRWTextureFormat format, DRWTextureFlag flags, const float *fpixels); void DRW_texture_free(struct GPUTexture *tex); +#define DRW_TEXTURE_FREE_SAFE(tex) do { \ + if (tex != NULL) { \ + DRW_texture_free(tex); \ + tex = NULL; \ + } \ +} while (0) /* UBOs */ struct GPUUniformBuffer *DRW_uniformbuffer_create(int size, const void *data); @@ -200,6 +206,12 @@ struct GPUShader *DRW_shader_create_3D(const char *frag, const char *defines); struct GPUShader *DRW_shader_create_fullscreen(const char *frag, const char *defines); struct GPUShader *DRW_shader_create_3D_depth_only(void); void DRW_shader_free(struct GPUShader *shader); +#define DRW_SHADER_FREE_SAFE(shader) do { \ + if (shader != NULL) { \ + DRW_shader_free(shader); \ + shader = NULL; \ + } \ +} while (0) /* Batches */ diff --git a/source/blender/draw/intern/draw_cache.c b/source/blender/draw/intern/draw_cache.c index 79f9e26f3b5..2cb5aa374fd 100644 --- a/source/blender/draw/intern/draw_cache.c +++ b/source/blender/draw/intern/draw_cache.c @@ -76,72 +76,39 @@ static struct DRWShapeCache { void DRW_shape_cache_free(void) { - if (SHC.drw_single_vertice) - Batch_discard_all(SHC.drw_single_vertice); - if (SHC.drw_fullscreen_quad) - Batch_discard_all(SHC.drw_fullscreen_quad); - if (SHC.drw_plain_axes) - Batch_discard_all(SHC.drw_plain_axes); - if (SHC.drw_single_arrow) - Batch_discard_all(SHC.drw_single_arrow); - if (SHC.drw_cube) - Batch_discard_all(SHC.drw_cube); - if (SHC.drw_circle) - Batch_discard_all(SHC.drw_circle); - if (SHC.drw_square) - Batch_discard_all(SHC.drw_square); - if (SHC.drw_line) - Batch_discard_all(SHC.drw_line); - if (SHC.drw_line_endpoints) - Batch_discard_all(SHC.drw_line_endpoints); - if (SHC.drw_empty_sphere) - Batch_discard_all(SHC.drw_empty_sphere); - if (SHC.drw_empty_cone) - Batch_discard_all(SHC.drw_empty_cone); - if (SHC.drw_arrows) - Batch_discard_all(SHC.drw_arrows); - if (SHC.drw_axis_names) - Batch_discard_all(SHC.drw_axis_names); - if (SHC.drw_field_wind) - Batch_discard_all(SHC.drw_field_wind); - if (SHC.drw_field_force) - Batch_discard_all(SHC.drw_field_force); - if (SHC.drw_field_vortex) - Batch_discard_all(SHC.drw_field_vortex); - if (SHC.drw_field_tube_limit) - Batch_discard_all(SHC.drw_field_tube_limit); - if (SHC.drw_field_cone_limit) - Batch_discard_all(SHC.drw_field_cone_limit); - if (SHC.drw_lamp) - Batch_discard_all(SHC.drw_lamp); - if (SHC.drw_lamp_sunrays) - Batch_discard_all(SHC.drw_lamp_sunrays); - if (SHC.drw_lamp_area) - Batch_discard_all(SHC.drw_lamp_area); - if (SHC.drw_lamp_hemi) - Batch_discard_all(SHC.drw_lamp_hemi); - if (SHC.drw_lamp_spot) - Batch_discard_all(SHC.drw_lamp_spot); - if (SHC.drw_lamp_spot_square) - Batch_discard_all(SHC.drw_lamp_spot_square); - if (SHC.drw_speaker) - Batch_discard_all(SHC.drw_speaker); - if (SHC.drw_bone_octahedral) - Batch_discard_all(SHC.drw_bone_octahedral); - if (SHC.drw_bone_octahedral_wire) - Batch_discard_all(SHC.drw_bone_octahedral_wire); - if (SHC.drw_bone_point) - Batch_discard_all(SHC.drw_bone_point); - if (SHC.drw_bone_point_wire) - Batch_discard_all(SHC.drw_bone_point_wire); - if (SHC.drw_bone_arrows) - Batch_discard_all(SHC.drw_bone_arrows); - if (SHC.drw_camera) - Batch_discard_all(SHC.drw_camera); - if (SHC.drw_camera_tria) - Batch_discard_all(SHC.drw_camera_tria); - if (SHC.drw_camera_focus) - Batch_discard_all(SHC.drw_camera_focus); + BATCH_DISCARD_ALL_SAFE(SHC.drw_single_vertice); + BATCH_DISCARD_ALL_SAFE(SHC.drw_fullscreen_quad); + BATCH_DISCARD_ALL_SAFE(SHC.drw_plain_axes); + BATCH_DISCARD_ALL_SAFE(SHC.drw_single_arrow); + BATCH_DISCARD_ALL_SAFE(SHC.drw_cube); + BATCH_DISCARD_ALL_SAFE(SHC.drw_circle); + BATCH_DISCARD_ALL_SAFE(SHC.drw_square); + BATCH_DISCARD_ALL_SAFE(SHC.drw_line); + BATCH_DISCARD_ALL_SAFE(SHC.drw_line_endpoints); + BATCH_DISCARD_ALL_SAFE(SHC.drw_empty_sphere); + BATCH_DISCARD_ALL_SAFE(SHC.drw_empty_cone); + BATCH_DISCARD_ALL_SAFE(SHC.drw_arrows); + BATCH_DISCARD_ALL_SAFE(SHC.drw_axis_names); + BATCH_DISCARD_ALL_SAFE(SHC.drw_field_wind); + BATCH_DISCARD_ALL_SAFE(SHC.drw_field_force); + BATCH_DISCARD_ALL_SAFE(SHC.drw_field_vortex); + BATCH_DISCARD_ALL_SAFE(SHC.drw_field_tube_limit); + BATCH_DISCARD_ALL_SAFE(SHC.drw_field_cone_limit); + BATCH_DISCARD_ALL_SAFE(SHC.drw_lamp); + BATCH_DISCARD_ALL_SAFE(SHC.drw_lamp_sunrays); + BATCH_DISCARD_ALL_SAFE(SHC.drw_lamp_area); + BATCH_DISCARD_ALL_SAFE(SHC.drw_lamp_hemi); + BATCH_DISCARD_ALL_SAFE(SHC.drw_lamp_spot); + BATCH_DISCARD_ALL_SAFE(SHC.drw_lamp_spot_square); + BATCH_DISCARD_ALL_SAFE(SHC.drw_speaker); + BATCH_DISCARD_ALL_SAFE(SHC.drw_bone_octahedral); + BATCH_DISCARD_ALL_SAFE(SHC.drw_bone_octahedral_wire); + BATCH_DISCARD_ALL_SAFE(SHC.drw_bone_point); + BATCH_DISCARD_ALL_SAFE(SHC.drw_bone_point_wire); + BATCH_DISCARD_ALL_SAFE(SHC.drw_bone_arrows); + BATCH_DISCARD_ALL_SAFE(SHC.drw_camera); + BATCH_DISCARD_ALL_SAFE(SHC.drw_camera_tria); + BATCH_DISCARD_ALL_SAFE(SHC.drw_camera_focus); } /* Helper functions */ diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index e065e14a002..3cb6c57eef6 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -555,9 +555,7 @@ void DRW_shgroup_free(struct DRWShadingGroup *shgroup) MEM_freeN(shgroup->interface); - if (shgroup->batch_geom) { - Batch_discard_all(shgroup->batch_geom); - } + BATCH_DISCARD_ALL_SAFE(shgroup->batch_geom); } void DRW_shgroup_call_add(DRWShadingGroup *shgroup, Batch *geom, float (*obmat)[4]) diff --git a/source/blender/draw/modes/edit_curve_mode.c b/source/blender/draw/modes/edit_curve_mode.c index 2cb03018254..e0b1a4eac0c 100644 --- a/source/blender/draw/modes/edit_curve_mode.c +++ b/source/blender/draw/modes/edit_curve_mode.c @@ -230,8 +230,7 @@ static void EDIT_CURVE_draw_scene(void *vedata) * Mostly used for freeing shaders */ static void EDIT_CURVE_engine_free(void) { - // if (custom_shader) - // DRW_shader_free(custom_shader); + // DRW_SHADER_FREE_SAFE(custom_shader); } /* Create collection settings here. diff --git a/source/blender/draw/modes/edit_lattice_mode.c b/source/blender/draw/modes/edit_lattice_mode.c index ea5256b42a5..473f9074536 100644 --- a/source/blender/draw/modes/edit_lattice_mode.c +++ b/source/blender/draw/modes/edit_lattice_mode.c @@ -228,8 +228,7 @@ static void EDIT_LATTICE_draw_scene(void *vedata) * Mostly used for freeing shaders */ static void EDIT_LATTICE_engine_free(void) { - // if (custom_shader) - // DRW_shader_free(custom_shader); + // DRW_SHADER_FREE_SAFE(custom_shader); } /* Create collection settings here. diff --git a/source/blender/draw/modes/edit_mesh_mode.c b/source/blender/draw/modes/edit_mesh_mode.c index 08a6a6e778b..46a3e8e2e4e 100644 --- a/source/blender/draw/modes/edit_mesh_mode.c +++ b/source/blender/draw/modes/edit_mesh_mode.c @@ -499,30 +499,18 @@ void EDIT_MESH_collection_settings_create(IDProperty *properties) static void EDIT_MESH_engine_free(void) { - if (e_data.overlay_tri_sh) - DRW_shader_free(e_data.overlay_tri_sh); - if (e_data.overlay_tri_fast_sh) - DRW_shader_free(e_data.overlay_tri_fast_sh); - if (e_data.overlay_tri_vcol_sh) - DRW_shader_free(e_data.overlay_tri_vcol_sh); - if (e_data.overlay_tri_vcol_fast_sh) - DRW_shader_free(e_data.overlay_tri_vcol_fast_sh); - if (e_data.overlay_edge_sh) - DRW_shader_free(e_data.overlay_edge_sh); - if (e_data.overlay_edge_vcol_sh) - DRW_shader_free(e_data.overlay_edge_vcol_sh); - if (e_data.overlay_vert_sh) - DRW_shader_free(e_data.overlay_vert_sh); - if (e_data.overlay_facedot_sh) - DRW_shader_free(e_data.overlay_facedot_sh); - if (e_data.overlay_mix_sh) - DRW_shader_free(e_data.overlay_mix_sh); - if (e_data.overlay_facefill_sh) - DRW_shader_free(e_data.overlay_facefill_sh); - if (e_data.normals_face_sh) - DRW_shader_free(e_data.normals_face_sh); - if (e_data.normals_sh) - DRW_shader_free(e_data.normals_sh); + DRW_SHADER_FREE_SAFE(e_data.overlay_tri_sh); + DRW_SHADER_FREE_SAFE(e_data.overlay_tri_fast_sh); + DRW_SHADER_FREE_SAFE(e_data.overlay_tri_vcol_sh); + DRW_SHADER_FREE_SAFE(e_data.overlay_tri_vcol_fast_sh); + DRW_SHADER_FREE_SAFE(e_data.overlay_edge_sh); + DRW_SHADER_FREE_SAFE(e_data.overlay_edge_vcol_sh); + DRW_SHADER_FREE_SAFE(e_data.overlay_vert_sh); + DRW_SHADER_FREE_SAFE(e_data.overlay_facedot_sh); + DRW_SHADER_FREE_SAFE(e_data.overlay_mix_sh); + DRW_SHADER_FREE_SAFE(e_data.overlay_facefill_sh); + DRW_SHADER_FREE_SAFE(e_data.normals_face_sh); + DRW_SHADER_FREE_SAFE(e_data.normals_sh); } static const DrawEngineDataSize EDIT_MESH_data_size = DRW_VIEWPORT_DATA_SIZE(EDIT_MESH_Data); diff --git a/source/blender/draw/modes/edit_metaball_mode.c b/source/blender/draw/modes/edit_metaball_mode.c index 20d78fdffda..5d08d4e5076 100644 --- a/source/blender/draw/modes/edit_metaball_mode.c +++ b/source/blender/draw/modes/edit_metaball_mode.c @@ -228,8 +228,7 @@ static void EDIT_METABALL_draw_scene(void *vedata) * Mostly used for freeing shaders */ static void EDIT_METABALL_engine_free(void) { - // if (custom_shader) - // DRW_shader_free(custom_shader); + // DRW_SHADER_FREE_SAFE(custom_shader); } /* Create collection settings here. diff --git a/source/blender/draw/modes/edit_surface_mode.c b/source/blender/draw/modes/edit_surface_mode.c index c09a10dcc91..783defaf4ec 100644 --- a/source/blender/draw/modes/edit_surface_mode.c +++ b/source/blender/draw/modes/edit_surface_mode.c @@ -228,8 +228,7 @@ static void EDIT_SURFACE_draw_scene(void *vedata) * Mostly used for freeing shaders */ static void EDIT_SURFACE_engine_free(void) { - // if (custom_shader) - // DRW_shader_free(custom_shader); + // DRW_SHADER_FREE_SAFE(custom_shader); } /* Create collection settings here. diff --git a/source/blender/draw/modes/edit_text_mode.c b/source/blender/draw/modes/edit_text_mode.c index f105e2d316c..101202cea40 100644 --- a/source/blender/draw/modes/edit_text_mode.c +++ b/source/blender/draw/modes/edit_text_mode.c @@ -228,8 +228,7 @@ static void EDIT_TEXT_draw_scene(void *vedata) * Mostly used for freeing shaders */ static void EDIT_TEXT_engine_free(void) { - // if (custom_shader) - // DRW_shader_free(custom_shader); + // DRW_SHADER_FREE_SAFE(custom_shader); } /* Create collection settings here. diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c index ad4da8870f2..0ac27cdbf1e 100644 --- a/source/blender/draw/modes/object_mode.c +++ b/source/blender/draw/modes/object_mode.c @@ -371,14 +371,10 @@ static void OBJECT_engine_init(void *vedata) static void OBJECT_engine_free(void) { - if (e_data.outline_resolve_sh) - DRW_shader_free(e_data.outline_resolve_sh); - if (e_data.outline_detect_sh) - DRW_shader_free(e_data.outline_detect_sh); - if (e_data.outline_fade_sh) - DRW_shader_free(e_data.outline_fade_sh); - if (e_data.grid_sh) - DRW_shader_free(e_data.grid_sh); + DRW_SHADER_FREE_SAFE(e_data.outline_resolve_sh); + DRW_SHADER_FREE_SAFE(e_data.outline_detect_sh); + DRW_SHADER_FREE_SAFE(e_data.outline_fade_sh); + DRW_SHADER_FREE_SAFE(e_data.grid_sh); } static DRWShadingGroup *shgroup_outline(DRWPass *pass, const float col[4], struct GPUShader *sh) diff --git a/source/blender/draw/modes/paint_texture_mode.c b/source/blender/draw/modes/paint_texture_mode.c index 06799e549e5..5bace8b2a77 100644 --- a/source/blender/draw/modes/paint_texture_mode.c +++ b/source/blender/draw/modes/paint_texture_mode.c @@ -228,8 +228,7 @@ static void PAINT_TEXTURE_draw_scene(void *vedata) * Mostly used for freeing shaders */ static void PAINT_TEXTURE_engine_free(void) { - // if (custom_shader) - // DRW_shader_free(custom_shader); + // DRW_SHADER_FREE_SAFE(custom_shader); } /* Create collection settings here. diff --git a/source/blender/draw/modes/paint_vertex_mode.c b/source/blender/draw/modes/paint_vertex_mode.c index 61bd376072f..7f58efd73af 100644 --- a/source/blender/draw/modes/paint_vertex_mode.c +++ b/source/blender/draw/modes/paint_vertex_mode.c @@ -228,8 +228,7 @@ static void PAINT_VERTEX_draw_scene(void *vedata) * Mostly used for freeing shaders */ static void PAINT_VERTEX_engine_free(void) { - // if (custom_shader) - // DRW_shader_free(custom_shader); + // DRW_SHADER_FREE_SAFE(custom_shader); } /* Create collection settings here. diff --git a/source/blender/draw/modes/paint_weight_mode.c b/source/blender/draw/modes/paint_weight_mode.c index fa02ac3f3d8..af9333cdd8f 100644 --- a/source/blender/draw/modes/paint_weight_mode.c +++ b/source/blender/draw/modes/paint_weight_mode.c @@ -225,8 +225,7 @@ static void PAINT_WEIGHT_draw_scene(void *vedata) * Mostly used for freeing shaders */ static void PAINT_WEIGHT_engine_free(void) { - // if (custom_shader) - // DRW_shader_free(custom_shader); + // DRW_SHADER_FREE_SAFE(custom_shader); } /* Create collection settings here. diff --git a/source/blender/draw/modes/particle_mode.c b/source/blender/draw/modes/particle_mode.c index e51be560476..b9fb8d031a8 100644 --- a/source/blender/draw/modes/particle_mode.c +++ b/source/blender/draw/modes/particle_mode.c @@ -223,8 +223,7 @@ static void PARTICLE_draw_scene(void *vedata) * Mostly used for freeing shaders */ static void PARTICLE_engine_free(void) { - // if (custom_shader) - // DRW_shader_free(custom_shader); + // DRW_SHADER_FREE_SAFE(custom_shader); } /* Create collection settings here. diff --git a/source/blender/draw/modes/pose_mode.c b/source/blender/draw/modes/pose_mode.c index 390becf2d91..fda993c4b82 100644 --- a/source/blender/draw/modes/pose_mode.c +++ b/source/blender/draw/modes/pose_mode.c @@ -223,8 +223,7 @@ static void POSE_draw_scene(void *vedata) * Mostly used for freeing shaders */ static void POSE_engine_free(void) { - // if (custom_shader) - // DRW_shader_free(custom_shader); + // DRW_SHADER_FREE_SAFE(custom_shader); } /* Create collection settings here. diff --git a/source/blender/draw/modes/sculpt_mode.c b/source/blender/draw/modes/sculpt_mode.c index 14140ae6711..0fc212ee177 100644 --- a/source/blender/draw/modes/sculpt_mode.c +++ b/source/blender/draw/modes/sculpt_mode.c @@ -222,8 +222,7 @@ static void SCULPT_draw_scene(void *vedata) * Mostly used for freeing shaders */ static void SCULPT_engine_free(void) { - // if (custom_shader) - // DRW_shader_free(custom_shader); + // DRW_SHADER_FREE_SAFE(custom_shader); } /* Create collection settings here.