From 3b9b4f76054e55465c3c0ddbaed3f09618860b58 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Fri, 30 Jul 2010 10:44:00 +0000 Subject: Fix #23103: * missing glsl update when changing color management setting * disable glsl lamps only when disabling them for render --- source/blender/editors/render/render_shading.c | 18 ++++++++++++++++++ source/blender/editors/space_view3d/view3d_draw.c | 2 +- source/blender/gpu/intern/gpu_material.c | 2 +- source/blender/makesrna/intern/rna_scene.c | 21 +++++++++++++++------ 4 files changed, 35 insertions(+), 8 deletions(-) (limited to 'source/blender') diff --git a/source/blender/editors/render/render_shading.c b/source/blender/editors/render/render_shading.c index 6e8c3b721d0..9fd0074b9f1 100644 --- a/source/blender/editors/render/render_shading.c +++ b/source/blender/editors/render/render_shading.c @@ -209,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) @@ -230,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; } diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 8408152d23c..69375674d94 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -1807,7 +1807,7 @@ static void gpu_render_lamp_update(Scene *scene, View3D *v3d, Object *ob, Object lamp = GPU_lamp_from_blender(scene, ob, par); if(lamp) { - GPU_lamp_update(lamp, ob->lay, (ob->restrictflag & OB_RESTRICT_VIEW), obmat); + GPU_lamp_update(lamp, ob->lay, (ob->restrictflag & OB_RESTRICT_RENDER), obmat); GPU_lamp_update_colors(lamp, la->r, la->g, la->b, la->energy); if((ob->lay & v3d->lay) && GPU_lamp_has_shadow_buffer(lamp)) { diff --git a/source/blender/gpu/intern/gpu_material.c b/source/blender/gpu/intern/gpu_material.c index 429eaea9b43..f5898c8d0be 100644 --- a/source/blender/gpu/intern/gpu_material.c +++ b/source/blender/gpu/intern/gpu_material.c @@ -1363,7 +1363,7 @@ static void gpu_lamp_from_blender(Scene *scene, Object *ob, Object *par, Lamp *l lamp->col[1]= la->g*lamp->energy; lamp->col[2]= la->b*lamp->energy; - GPU_lamp_update(lamp, ob->lay, (ob->restrictflag & OB_RESTRICT_VIEW), ob->obmat); + GPU_lamp_update(lamp, ob->lay, (ob->restrictflag & OB_RESTRICT_RENDER), ob->obmat); lamp->spotsi= la->spotsize; if(lamp->mode & LA_HALO) diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index e48f07f48d6..a08e9e4252f 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -679,6 +679,13 @@ static int rna_RenderSettings_engine_get(PointerRNA *ptr) return 0; } +static void rna_Scene_glsl_update(Main *bmain, Scene *unused, PointerRNA *ptr) +{ + Scene *scene= (Scene*)ptr->id.data; + + DAG_id_flush_update(&scene->id, 0); +} + static void rna_RenderSettings_color_management_update(Main *bmain, Scene *unused, PointerRNA *ptr) { /* reset image nodes */ @@ -697,6 +704,8 @@ static void rna_RenderSettings_color_management_update(Main *bmain, Scene *unuse } } } + + rna_Scene_glsl_update(bmain, unused, ptr); } static void rna_SceneRenderLayer_name_set(PointerRNA *ptr, const char *value) @@ -1749,32 +1758,32 @@ static void rna_def_scene_game_data(BlenderRNA *brna) prop= RNA_def_property(srna, "glsl_lights", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", GAME_GLSL_NO_LIGHTS); RNA_def_property_ui_text(prop, "GLSL Lights", "Use lights for GLSL rendering"); - RNA_def_property_update(prop, NC_SCENE|NA_EDITED, NULL); + RNA_def_property_update(prop, NC_SCENE|NA_EDITED, "rna_Scene_glsl_update"); prop= RNA_def_property(srna, "glsl_shaders", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", GAME_GLSL_NO_SHADERS); RNA_def_property_ui_text(prop, "GLSL Shaders", "Use shaders for GLSL rendering"); - RNA_def_property_update(prop, NC_SCENE|NA_EDITED, NULL); + RNA_def_property_update(prop, NC_SCENE|NA_EDITED, "rna_Scene_glsl_update"); prop= RNA_def_property(srna, "glsl_shadows", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", GAME_GLSL_NO_SHADOWS); RNA_def_property_ui_text(prop, "GLSL Shadows", "Use shadows for GLSL rendering"); - RNA_def_property_update(prop, NC_SCENE|NA_EDITED, NULL); + RNA_def_property_update(prop, NC_SCENE|NA_EDITED, "rna_Scene_glsl_update"); prop= RNA_def_property(srna, "glsl_ramps", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", GAME_GLSL_NO_RAMPS); RNA_def_property_ui_text(prop, "GLSL Ramps", "Use ramps for GLSL rendering"); - RNA_def_property_update(prop, NC_SCENE|NA_EDITED, NULL); + RNA_def_property_update(prop, NC_SCENE|NA_EDITED, "rna_Scene_glsl_update"); prop= RNA_def_property(srna, "glsl_nodes", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", GAME_GLSL_NO_NODES); RNA_def_property_ui_text(prop, "GLSL Nodes", "Use nodes for GLSL rendering"); - RNA_def_property_update(prop, NC_SCENE|NA_EDITED, NULL); + RNA_def_property_update(prop, NC_SCENE|NA_EDITED, "rna_Scene_glsl_update"); prop= RNA_def_property(srna, "glsl_extra_textures", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", GAME_GLSL_NO_EXTRA_TEX); RNA_def_property_ui_text(prop, "GLSL Extra Textures", "Use extra textures like normal or specular maps for GLSL rendering"); - RNA_def_property_update(prop, NC_SCENE|NA_EDITED, NULL); + RNA_def_property_update(prop, NC_SCENE|NA_EDITED, "rna_Scene_glsl_update"); } static void rna_def_scene_render_layer(BlenderRNA *brna) -- cgit v1.2.3