diff options
Diffstat (limited to 'source/blender/editors/render/render_shading.c')
-rw-r--r-- | source/blender/editors/render/render_shading.c | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/source/blender/editors/render/render_shading.c b/source/blender/editors/render/render_shading.c index f96e82a30f4..27ab8d06b04 100644 --- a/source/blender/editors/render/render_shading.c +++ b/source/blender/editors/render/render_shading.c @@ -52,7 +52,6 @@ #include "BKE_report.h" #include "BKE_scene.h" #include "BKE_texture.h" -#include "BKE_utildefines.h" #include "BKE_world.h" #include "BKE_tessmesh.h" @@ -210,6 +209,21 @@ static void image_changed(Main *bmain, Image *ima) texture_changed(bmain, tex); } +static void scene_changed(Main *bmain, Scene *sce) +{ + Object *ob; + Material *ma; + + /* glsl */ + for(ob=bmain->object.first; ob; ob=ob->id.next) + if(ob->gpulamp.first) + GPU_lamp_free(ob); + + for(ma=bmain->mat.first; ma; ma=ma->id.next) + if(ma->gpumaterial.first) + GPU_material_free(ma); +} + void ED_render_id_flush_update(Main *bmain, ID *id) { if(!id) @@ -231,6 +245,9 @@ void ED_render_id_flush_update(Main *bmain, ID *id) case ID_IM: image_changed(bmain, (Image*)id); break; + case ID_SCE: + scene_changed(bmain, (Scene*)id); + break; default: break; } @@ -313,11 +330,11 @@ static int material_slot_assign_exec(bContext *C, wmOperator *op) } } else if(ELEM(ob->type, OB_CURVE, OB_SURF)) { - ListBase *editnurb= ((Curve*)ob->data)->editnurb; Nurb *nu; + ListBase *nurbs= ED_curve_editnurbs((Curve*)ob->data); - if(editnurb) { - for(nu= editnurb->first; nu; nu= nu->next) + if(nurbs) { + for(nu= nurbs->first; nu; nu= nu->next) if(isNurbsel(nu)) nu->mat_nr= nu->charidx= ob->actcol-1; } @@ -372,13 +389,13 @@ static int material_slot_de_select(bContext *C, int select) */ } else if ELEM(ob->type, OB_CURVE, OB_SURF) { - ListBase *editnurb= ((Curve*)ob->data)->editnurb; + ListBase *nurbs= ED_curve_editnurbs((Curve*)ob->data); Nurb *nu; BPoint *bp; BezTriple *bezt; int a; - for(nu= editnurb->first; nu; nu=nu->next) { + for(nu= nurbs->first; nu; nu=nu->next) { if(nu->mat_nr==ob->actcol-1) { if(nu->bezt) { a= nu->pntsu; |