[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [30894] trunk/blender/source/blender: Fix #23103:

Brecht Van Lommel brecht at blender.org
Fri Jul 30 12:44:01 CEST 2010


Revision: 30894
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=30894
Author:   blendix
Date:     2010-07-30 12:44:00 +0200 (Fri, 30 Jul 2010)

Log Message:
-----------
Fix #23103:
* missing glsl update when changing color management setting
* disable glsl lamps only when disabling them for render

Modified Paths:
--------------
    trunk/blender/source/blender/editors/render/render_shading.c
    trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
    trunk/blender/source/blender/gpu/intern/gpu_material.c
    trunk/blender/source/blender/makesrna/intern/rna_scene.c

Modified: trunk/blender/source/blender/editors/render/render_shading.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_shading.c	2010-07-30 09:55:01 UTC (rev 30893)
+++ trunk/blender/source/blender/editors/render/render_shading.c	2010-07-30 10:44:00 UTC (rev 30894)
@@ -209,6 +209,21 @@
 			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 @@
 		case ID_IM:
 			image_changed(bmain, (Image*)id);
 			break;
+		case ID_SCE:
+			scene_changed(bmain, (Scene*)id);
+			break;
 		default:
 			break;
 	}

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_draw.c	2010-07-30 09:55:01 UTC (rev 30893)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_draw.c	2010-07-30 10:44:00 UTC (rev 30894)
@@ -1807,7 +1807,7 @@
 	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)) {

Modified: trunk/blender/source/blender/gpu/intern/gpu_material.c
===================================================================
--- trunk/blender/source/blender/gpu/intern/gpu_material.c	2010-07-30 09:55:01 UTC (rev 30893)
+++ trunk/blender/source/blender/gpu/intern/gpu_material.c	2010-07-30 10:44:00 UTC (rev 30894)
@@ -1363,7 +1363,7 @@
 	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)

Modified: trunk/blender/source/blender/makesrna/intern/rna_scene.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_scene.c	2010-07-30 09:55:01 UTC (rev 30893)
+++ trunk/blender/source/blender/makesrna/intern/rna_scene.c	2010-07-30 10:44:00 UTC (rev 30894)
@@ -679,6 +679,13 @@
 	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 @@
 			}
 		}
 	}
+
+	rna_Scene_glsl_update(bmain, unused, ptr);
 }
 
 static void rna_SceneRenderLayer_name_set(PointerRNA *ptr, const char *value)
@@ -1749,32 +1758,32 @@
 	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)





More information about the Bf-blender-cvs mailing list