From 63b981bf9bae1ad6c3929a32107dcb09caf1ec45 Mon Sep 17 00:00:00 2001 From: Antony Riakiotakis Date: Wed, 27 Aug 2014 19:15:14 +0200 Subject: Changing render engine now refreshes the texture paint display better. Also avoid looping over all objects for texture paint checks when a material changes, only check active object. --- source/blender/blenkernel/BKE_material.h | 1 - source/blender/blenkernel/intern/depsgraph.c | 11 +++++------ source/blender/blenkernel/intern/material.c | 13 ------------- source/blender/editors/render/render_update.c | 11 +++++------ 4 files changed, 10 insertions(+), 26 deletions(-) (limited to 'source/blender') diff --git a/source/blender/blenkernel/BKE_material.h b/source/blender/blenkernel/BKE_material.h index 9c85c4eab95..2f20505bea3 100644 --- a/source/blender/blenkernel/BKE_material.h +++ b/source/blender/blenkernel/BKE_material.h @@ -88,7 +88,6 @@ bool object_remove_material_slot(struct Object *ob); void BKE_texpaint_slot_refresh_cache(struct Scene *scene, struct Material *ma); void BKE_texpaint_slots_refresh_object(struct Scene *scene, struct Object *ob); -void BKE_texpaint_slots_clear(struct Material *ma); /* rna api */ void BKE_material_resize_id(struct ID *id, short totcol, bool do_id_user); diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c index 895e542ca52..eecc04c1e72 100644 --- a/source/blender/blenkernel/intern/depsgraph.c +++ b/source/blender/blenkernel/intern/depsgraph.c @@ -2497,12 +2497,11 @@ static void dag_id_flush_update(Main *bmain, Scene *sce, ID *id) } if (ELEM(idtype, ID_MA, ID_TE)) { - for (obt = bmain->object.first; obt; obt = obt->id.next) { - if (obt->mode & OB_MODE_TEXTURE_PAINT) { - obt->recalc |= OB_RECALC_DATA; - BKE_texpaint_slots_refresh_object(sce, obt); - lib_id_recalc_data_tag(bmain, &obt->id); - } + obt = sce->basact ? sce->basact->object : NULL; + if (obt && obt->mode & OB_MODE_TEXTURE_PAINT) { + obt->recalc |= OB_RECALC_DATA; + BKE_texpaint_slots_refresh_object(sce, obt); + lib_id_recalc_data_tag(bmain, &obt->id); } } diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c index 81b93a47917..7565703358e 100644 --- a/source/blender/blenkernel/intern/material.c +++ b/source/blender/blenkernel/intern/material.c @@ -1307,19 +1307,6 @@ bool object_remove_material_slot(Object *ob) return true; } -void BKE_texpaint_slots_clear(struct Material *ma) -{ - - if (ma->texpaintslot) { - MEM_freeN(ma->texpaintslot); - ma->texpaintslot = NULL; - } - ma->tot_slots = 0; - ma->paint_active_slot = 0; - ma->paint_clone_slot = 0; -} - - static bool get_mtex_slot_valid_texpaint(struct MTex *mtex) { return (mtex && (mtex->texco == TEXCO_UV) && diff --git a/source/blender/editors/render/render_update.c b/source/blender/editors/render/render_update.c index 8a034fdd8b5..6b58d3d55aa 100644 --- a/source/blender/editors/render/render_update.c +++ b/source/blender/editors/render/render_update.c @@ -177,12 +177,11 @@ void ED_render_engine_changed(Main *bmain) for (scene = bmain->scene.first; scene; scene = scene->id.next) ED_render_id_flush_update(bmain, &scene->id); - /* reset texture painting */ - for (ma = bmain->mat.first; ma; ma = ma->id.next) { - if (ma->texpaintslot) { - BKE_texpaint_slots_clear(ma); - DAG_id_tag_update(&ma->id, 0); - } + /* reset texture painting. Sending one dependency graph signal for any material should + * refresh any texture slots */ + ma = bmain->mat.first; + if (ma) { + DAG_id_tag_update(&ma->id, 0); } } -- cgit v1.2.3