[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11281] branches/soc-2007-maike/source/ blender: Duplicate lights fix

Miguel Torres Lima torreslima at gmail.com
Sun Jul 15 20:11:52 CEST 2007


Revision: 11281
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11281
Author:   maike
Date:     2007-07-15 20:11:51 +0200 (Sun, 15 Jul 2007)

Log Message:
-----------
Duplicate lights fix

Modified Paths:
--------------
    branches/soc-2007-maike/source/blender/blenkernel/intern/object.c
    branches/soc-2007-maike/source/blender/src/editobject.c
    branches/soc-2007-maike/source/blender/src/glsl_material.c
    branches/soc-2007-maike/source/blender/src/headerbuttons.c

Modified: branches/soc-2007-maike/source/blender/blenkernel/intern/object.c
===================================================================
--- branches/soc-2007-maike/source/blender/blenkernel/intern/object.c	2007-07-15 17:06:41 UTC (rev 11280)
+++ branches/soc-2007-maike/source/blender/blenkernel/intern/object.c	2007-07-15 18:11:51 UTC (rev 11281)
@@ -110,6 +110,9 @@
 
 #include "BPY_extern.h"
 
+#include "BIF_glutil.h"
+#include "BIF_glsl_light.h"
+
 /* Local function protos */
 static void solve_parenting (Object *ob, Object *par, float obmat[][4], float slowmat[][4], int simul);
 
@@ -621,7 +624,7 @@
 	id_us_plus((ID *)lan->ipo);
 
 	BPY_copy_scriptlink(&la->scriptlink);
-	
+
 	return lan;
 }
 
@@ -670,6 +673,9 @@
 					ob->data= lan;
 					lan->id.us++;
 					la->id.us--;
+						
+					if(glsl_active())
+					  glsl_create_light(lan, ob);
 				}
 			}
 			ob= ob->id.next;

Modified: branches/soc-2007-maike/source/blender/src/editobject.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/editobject.c	2007-07-15 17:06:41 UTC (rev 11280)
+++ branches/soc-2007-maike/source/blender/src/editobject.c	2007-07-15 18:11:51 UTC (rev 11281)
@@ -4084,7 +4084,10 @@
 				switch(ob->type) {
 				case OB_LAMP:
 					if(id && id->us>1 && id->lib==NULL) {
-						ob->data= la= copy_lamp(ob->data);
+						ob->data= la= copy_lamp(ob->data);	
+						if(glsl_active())
+						  glsl_create_light(la, ob);
+	
 						for(a=0; a<MAX_MTEX; a++) {
 							if(la->mtex[a]) {
 								ID_NEW(la->mtex[a]->object);
@@ -4844,7 +4847,13 @@
 				case OB_LAMP:
 					if(dupflag & USER_DUP_LAMP) {
 						ID_NEW_US2(obn->data )
-						else obn->data= copy_lamp(obn->data);
+						else{
+						  obn->data= copy_lamp(obn->data);
+						  	
+						  if(glsl_active())
+						    glsl_create_light(obn->data, obn);
+						}
+
 						id->us--;
 					}
 					break;

Modified: branches/soc-2007-maike/source/blender/src/glsl_material.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_material.c	2007-07-15 17:06:41 UTC (rev 11280)
+++ branches/soc-2007-maike/source/blender/src/glsl_material.c	2007-07-15 18:11:51 UTC (rev 11281)
@@ -233,6 +233,9 @@
   glsl_update_tree_colorband_uniforms(tree);
   glsl_update_tree_world_uniforms(tree);
   glsl_update_all_light_uniforms(tree);
+
+  if(mat == &defmaterial)
+    glsl_defmaterial = tree;
 }
 
 
@@ -322,6 +325,11 @@
 {
   GLSL_MaterialTree tree = (struct GLSL_MaterialTree_ *) BLI_ghash_lookup(treeHash, mat);
 
+  if(!tree || !mat){
+    if(mode == GLSL_SHADED) return glsl_defmaterial->shaded_program;
+    else return glsl_defmaterial->textured_program;
+  }
+
   if(mode == GLSL_SHADED){
     return((struct GLSL_Program_ *) tree->shaded_program);
   }

Modified: branches/soc-2007-maike/source/blender/src/headerbuttons.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/headerbuttons.c	2007-07-15 17:06:41 UTC (rev 11280)
+++ branches/soc-2007-maike/source/blender/src/headerbuttons.c	2007-07-15 18:11:51 UTC (rev 11281)
@@ -148,6 +148,7 @@
 #include "BIF_previewrender.h"
 #include "BIF_writeimage.h"
 #include "BIF_butspace.h"
+#include "BIF_glsl_light.h"
 
 #include "BPI_script.h"
 
@@ -1612,6 +1613,10 @@
 			if(la->id.us>1) {
 				if(okee("Single user")) {
 					ob->data= copy_lamp(la);
+	
+					if(glsl_active())
+					  glsl_create_light(la, ob);
+
 					la->id.us--;
 				}
 			}





More information about the Bf-blender-cvs mailing list