Fix #33282: missing GLSL update assigning a lamp texture.

This commit is contained in:
Brecht Van Lommel 2012-11-24 14:50:40 +00:00
parent ed986b62e8
commit 9b32776be3
3 changed files with 22 additions and 23 deletions

@ -250,6 +250,24 @@ static void material_changed(Main *bmain, Material *ma)
}
}
static void lamp_changed(Main *bmain, Lamp *la)
{
Object *ob;
Material *ma;
/* icons */
BKE_icon_changed(BKE_icon_getid(&la->id));
/* glsl */
for (ob = bmain->object.first; ob; ob = ob->id.next)
if (ob->data == la && 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);
}
static void texture_changed(Main *bmain, Tex *tex)
{
Material *ma;
@ -282,16 +300,14 @@ static void texture_changed(Main *bmain, Tex *tex)
/* find lamps */
for (la = bmain->lamp.first; la; la = la->id.next) {
if (mtex_use_tex(la->mtex, MAX_MTEX, tex)) {
/* pass */
lamp_changed(bmain, la);
}
else if (la->nodetree && nodes_use_tex(la->nodetree, tex)) {
/* pass */
lamp_changed(bmain, la);
}
else {
continue;
}
BKE_icon_changed(BKE_icon_getid(&la->id));
}
/* find worlds */
@ -320,24 +336,6 @@ static void texture_changed(Main *bmain, Tex *tex)
}
}
static void lamp_changed(Main *bmain, Lamp *la)
{
Object *ob;
Material *ma;
/* icons */
BKE_icon_changed(BKE_icon_getid(&la->id));
/* glsl */
for (ob = bmain->object.first; ob; ob = ob->id.next)
if (ob->data == la && 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);
}
static void world_changed(Main *bmain, World *wo)
{
Material *ma;

@ -421,7 +421,7 @@ static void rna_def_lamp(BlenderRNA *brna)
/* textures */
rna_def_mtex_common(brna, srna, "rna_Lamp_mtex_begin", "rna_Lamp_active_texture_get",
"rna_Lamp_active_texture_set", NULL, "LampTextureSlot", "LampTextureSlots", "rna_Lamp_update");
"rna_Lamp_active_texture_set", NULL, "LampTextureSlot", "LampTextureSlots", "rna_Lamp_draw_update");
}
static void rna_def_lamp_falloff(StructRNA *srna)

@ -233,6 +233,7 @@ void rna_TextureSlot_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRN
break;
case ID_LA:
WM_main_add_notifier(NC_LAMP | ND_LIGHTING, id);
WM_main_add_notifier(NC_LAMP | ND_LIGHTING_DRAW, id);
break;
case ID_BR:
WM_main_add_notifier(NC_BRUSH, id);