Fix #19736: GLSL viewport materials are not updated on all changes.
This commit is contained in:
@@ -89,6 +89,7 @@
|
||||
#include "ED_mball.h"
|
||||
#include "ED_mesh.h"
|
||||
#include "ED_object.h"
|
||||
#include "ED_render.h"
|
||||
#include "ED_screen.h"
|
||||
#include "ED_transform.h"
|
||||
|
||||
@@ -294,6 +295,7 @@ Object *ED_object_add_type(bContext *C, int type, float *loc, float *rot, int en
|
||||
ED_object_base_init_transform(C, BASACT, loc, rot);
|
||||
|
||||
DAG_scene_sort(scene);
|
||||
ED_render_id_flush_update(G.main, ob->data);
|
||||
|
||||
if(enter_editmode)
|
||||
ED_object_enter_editmode(C, EM_IGNORE_LAYER);
|
||||
@@ -1628,13 +1630,16 @@ static Base *object_add_duplicate_internal(Scene *scene, Base *base, int dupflag
|
||||
Base *ED_object_add_duplicate(Scene *scene, Base *base, int dupflag)
|
||||
{
|
||||
Base *basen;
|
||||
Object *ob;
|
||||
|
||||
clear_id_newpoins();
|
||||
clear_sca_new_poins(); /* sensor/contr/act */
|
||||
|
||||
basen= object_add_duplicate_internal(scene, base, dupflag);
|
||||
ob= basen->object;
|
||||
|
||||
DAG_scene_sort(scene);
|
||||
ED_render_id_flush_update(G.main, ob->data);
|
||||
|
||||
return basen;
|
||||
}
|
||||
@@ -1660,6 +1665,7 @@ static int duplicate_exec(bContext *C, wmOperator *op)
|
||||
if(BASACT==base)
|
||||
ED_base_object_activate(C, basen);
|
||||
|
||||
ED_render_id_flush_update(G.main, basen->object->data);
|
||||
}
|
||||
CTX_DATA_END;
|
||||
|
||||
|
||||
@@ -107,7 +107,10 @@ static void rna_Lamp_update(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
Lamp *la= ptr->id.data;
|
||||
|
||||
DAG_id_flush_update(&la->id, 0);
|
||||
WM_main_add_notifier(NC_LAMP|ND_LIGHTING, la);
|
||||
if(scene->gm.matmode == GAME_MAT_GLSL)
|
||||
WM_main_add_notifier(NC_LAMP|ND_LIGHTING_DRAW, la);
|
||||
else
|
||||
WM_main_add_notifier(NC_LAMP|ND_LIGHTING, la);
|
||||
}
|
||||
|
||||
static void rna_Lamp_draw_update(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
@@ -350,13 +353,13 @@ static void rna_def_lamp(BlenderRNA *brna)
|
||||
prop= RNA_def_property(srna, "energy", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_ui_range(prop, 0, 10.0, 10, 2);
|
||||
RNA_def_property_ui_text(prop, "Energy", "Amount of light that the lamp emits");
|
||||
RNA_def_property_update(prop, 0, "rna_Lamp_update");
|
||||
RNA_def_property_update(prop, 0, "rna_Lamp_draw_update");
|
||||
|
||||
prop= RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
|
||||
RNA_def_property_float_sdna(prop, NULL, "r");
|
||||
RNA_def_property_array(prop, 3);
|
||||
RNA_def_property_ui_text(prop, "Color", "Light color");
|
||||
RNA_def_property_update(prop, 0, "rna_Lamp_update");
|
||||
RNA_def_property_update(prop, 0, "rna_Lamp_draw_update");
|
||||
|
||||
prop= RNA_def_property(srna, "layer", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_LAYER);
|
||||
@@ -417,13 +420,13 @@ static void rna_def_lamp_falloff(StructRNA *srna)
|
||||
RNA_def_property_float_sdna(prop, NULL, "att1");
|
||||
RNA_def_property_range(prop, 0.0f, 1.0f);
|
||||
RNA_def_property_ui_text(prop, "Linear Attenuation", "Linear distance attentuation");
|
||||
RNA_def_property_update(prop, 0, "rna_Lamp_update");
|
||||
RNA_def_property_update(prop, 0, "rna_Lamp_draw_update");
|
||||
|
||||
prop= RNA_def_property(srna, "quadratic_attenuation", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_float_sdna(prop, NULL, "att2");
|
||||
RNA_def_property_range(prop, 0.0f, 1.0f);
|
||||
RNA_def_property_ui_text(prop, "Quadratic Attenuation", "Quadratic distance attentuation");
|
||||
RNA_def_property_update(prop, 0, "rna_Lamp_update");
|
||||
RNA_def_property_update(prop, 0, "rna_Lamp_draw_update");
|
||||
}
|
||||
|
||||
static void rna_def_lamp_shadow(StructRNA *srna, int spot, int area)
|
||||
|
||||
@@ -69,7 +69,10 @@ static void rna_Material_update(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
Material *ma= ptr->id.data;
|
||||
|
||||
DAG_id_flush_update(&ma->id, 0);
|
||||
WM_main_add_notifier(NC_MATERIAL|ND_SHADING, ma);
|
||||
if(scene->gm.matmode == GAME_MAT_GLSL)
|
||||
WM_main_add_notifier(NC_MATERIAL|ND_SHADING_DRAW, ma);
|
||||
else
|
||||
WM_main_add_notifier(NC_MATERIAL|ND_SHADING, ma);
|
||||
}
|
||||
|
||||
static void rna_Material_draw_update(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
|
||||
Reference in New Issue
Block a user