[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11212] branches/soc-2007-maike/source/ blender: Material structures creation refactor for better error detection

Miguel Torres Lima torreslima at gmail.com
Tue Jul 10 20:01:53 CEST 2007


Revision: 11212
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11212
Author:   maike
Date:     2007-07-10 20:01:53 +0200 (Tue, 10 Jul 2007)

Log Message:
-----------
Material structures creation refactor for better error detection

Modified Paths:
--------------
    branches/soc-2007-maike/source/blender/blenkernel/intern/material.c
    branches/soc-2007-maike/source/blender/blenkernel/intern/node.c
    branches/soc-2007-maike/source/blender/blenkernel/intern/scene.c
    branches/soc-2007-maike/source/blender/include/BIF_glsl_material.h
    branches/soc-2007-maike/source/blender/src/glsl_drawobject.c
    branches/soc-2007-maike/source/blender/src/glsl_material.c
    branches/soc-2007-maike/source/blender/src/glsl_material_node.c
    branches/soc-2007-maike/source/blender/src/glsl_node_util.c
    branches/soc-2007-maike/source/blender/src/glsl_program.c
    branches/soc-2007-maike/source/blender/src/glsl_shader_util.c
    branches/soc-2007-maike/source/blender/src/glsl_util.c

Added Paths:
-----------
    branches/soc-2007-maike/source/blender/include/BIF_glsl_uniforms.h
    branches/soc-2007-maike/source/blender/src/glsl_uniforms.c

Modified: branches/soc-2007-maike/source/blender/blenkernel/intern/material.c
===================================================================
--- branches/soc-2007-maike/source/blender/blenkernel/intern/material.c	2007-07-10 16:57:49 UTC (rev 11211)
+++ branches/soc-2007-maike/source/blender/blenkernel/intern/material.c	2007-07-10 18:01:53 UTC (rev 11212)
@@ -73,10 +73,8 @@
 /* called on startup, creator.c */
 void init_def_material(void)
 {
+        glsl_init_ghash();
 	init_material(&defmaterial);
-
-	glsl_init_ghash();
-	glsl_init_defmaterial(&defmaterial);
 }
 
 /* not material itself */
@@ -104,9 +102,6 @@
 		ntreeFreeTree(ma->nodetree);
 		MEM_freeN(ma->nodetree);
 	}
-
-	if(glsl_active() != 0 && ma != &defmaterial)
-	  glsl_delete_material(ma);
 }
 
 void init_material(Material *ma)
@@ -168,6 +163,9 @@
 	ma->sss_back= 1.0f;
 
 	ma->mode= MA_TRACEBLE|MA_SHADBUF|MA_SHADOW|MA_RADIO|MA_RAYBIAS|MA_TANGENT_STR;
+	
+	if(glsl_firstdraw())
+	  glsl_create_materialtree(ma, GLSL_MAT);
 }
 
 Material *add_material(char *name)
@@ -178,9 +176,6 @@
 	
 	init_material(ma);
 
-	if(ma != &defmaterial && glsl_active() != 0)
-	  glsl_create_materialtree(ma, GLSL_MAT);
-
 	return ma;	
 }
 
@@ -212,7 +207,7 @@
 		man->nodetree= ntreeCopyTree(ma->nodetree, 0);	/* 0 == full new tree */
 	}
 
-	if(glsl_active() != 0 && ma != &defmaterial)
+	if(glsl_active())
 	  glsl_create_materialtree(man, GLSL_MAT);
 
 	return man;

Modified: branches/soc-2007-maike/source/blender/blenkernel/intern/node.c
===================================================================
--- branches/soc-2007-maike/source/blender/blenkernel/intern/node.c	2007-07-10 16:57:49 UTC (rev 11211)
+++ branches/soc-2007-maike/source/blender/blenkernel/intern/node.c	2007-07-10 18:01:53 UTC (rev 11212)
@@ -137,7 +137,7 @@
 	
 	if(lb)
 		BLI_addtail(lb, sock);
-	
+	printf("\nnode add socket type\n");
 	return sock;
 }
 
@@ -151,7 +151,7 @@
 			nodeRemLink(ntree, link);
 		}
 	}
-	
+	printf("\nnode rem socket\n");
 	BLI_remlink(lb, sock);
 	MEM_freeN(sock);
 }
@@ -175,10 +175,10 @@
 		sock->tosock= stype->internsock;
 		
 		BLI_remlink(lb, sock);
-		
+		printf("\nverify socket\n");
 		return sock;
 	}
-	else {
+	else {printf("\nverify socket\n");
 		return node_add_socket_type(NULL, stype);
 	}
 }
@@ -792,7 +792,7 @@
    /* got it-bob*/
    if(ntype->initfunc!=NULL)
       ntype->initfunc(node);
-
+printf("\nnodeAddNodeType\n");
    return node;
 }
 
@@ -826,7 +826,7 @@
 	node->new_node= nnode;
 	nnode->new_node= NULL;
 	nnode->preview= NULL;
-
+	printf("\nnodeCopyNode\n");
 	return nnode;
 }
 
@@ -839,7 +839,7 @@
 	link->fromsock= fromsock;
 	link->tonode= tonode;
 	link->tosock= tosock;
-	
+	printf("\nnodeAddLink\n");
 	return link;
 }
 
@@ -848,7 +848,7 @@
 	BLI_remlink(&ntree->links, link);
 	if(link->tosock)
 		link->tosock->link= NULL;
-	MEM_freeN(link);
+	MEM_freeN(link);printf("\nnodeRemLink\n");
 }
 
 
@@ -859,7 +859,7 @@
 	ntree->alltypes.first = NULL;
 	ntree->alltypes.last = NULL;
 	
-	ntreeInitTypes(ntree);
+	ntreeInitTypes(ntree);printf("\nntreeAddTree\n");
 	return ntree;
 }
 
@@ -968,7 +968,7 @@
 				nodeRemLink(ntree, link);
 			}
 		}
-	}
+	}printf("\nnode_unlink_node\n");
 }
 
 static void composit_free_node_cache(bNode *node)
@@ -1003,7 +1003,7 @@
 	if(node->typeinfo && node->typeinfo->freestoragefunc) {
 		node->typeinfo->freestoragefunc(node);
 	}
-	MEM_freeN(node);
+	MEM_freeN(node);printf("\nnodeFreeNode\n");
 }
 
 /* do not free ntree itself here, free_libblock calls this function too */
@@ -1027,7 +1027,7 @@
 			MEM_freeN(ntree->owntype->inputs);
 		if(ntree->owntype->outputs)
 			MEM_freeN(ntree->owntype->outputs);
-		MEM_freeN(ntree->owntype);
+		MEM_freeN(ntree->owntype);printf("\nntreeFreeTree\n");
 	}
 }
 

Modified: branches/soc-2007-maike/source/blender/blenkernel/intern/scene.c
===================================================================
--- branches/soc-2007-maike/source/blender/blenkernel/intern/scene.c	2007-07-10 16:57:49 UTC (rev 11211)
+++ branches/soc-2007-maike/source/blender/blenkernel/intern/scene.c	2007-07-10 18:01:53 UTC (rev 11212)
@@ -86,6 +86,7 @@
 #include "BLI_blenlib.h"
 
 #include "BIF_glsl_light.h"
+#include "BIF_glsl_material.h"
 #include "BIF_glsl_util.h"
 #include "BIF_glutil.h"
 
@@ -274,7 +275,7 @@
 	
 	G.scene= sce;
 	
-	if(glsl_active() != 0){
+	if(glsl_active()){
 	  glsl_free_all();
 	}
 
@@ -323,8 +324,14 @@
 		  else if(G.scene->lay & base->lay && glsl_active() != 0) glsl_query_material(ob);*/
 	}
 
-	if(glsl_active() != 0)
+	/* write programs  HERE */
+
+	if(!glsl_firstdraw()){
+	  glsl_change_state();
+	}
+	else if(glsl_active()){
 	  glsl_create_all();
+	}
 
 	/* no full animation update, this to enable render code to work (render code calls own animation updates) */
 	/* do we need FRAMECHANGED in set_scene? */

Modified: branches/soc-2007-maike/source/blender/include/BIF_glsl_material.h
===================================================================
--- branches/soc-2007-maike/source/blender/include/BIF_glsl_material.h	2007-07-10 16:57:49 UTC (rev 11211)
+++ branches/soc-2007-maike/source/blender/include/BIF_glsl_material.h	2007-07-10 18:01:53 UTC (rev 11212)
@@ -17,12 +17,12 @@
 {  
   struct Material *mat;
   struct GHash *parent;
-
+  
   short num_parents;
   short diffuse_shader;
   short specular_shader;
   short texface;
-
+  
   void (*unlink)(struct GLSL_Material_ * material, struct Material *mat);
   
   void (*free)(struct GLSL_Material_ * material, struct Material *mat);
@@ -40,15 +40,15 @@
 {
   struct GLSL_Program_ *shaded_program;     /* pointer to GLSL_Program structure for shaded mode */
   struct GLSL_Program_ *textured_program;   /* pointer to GLSL_Program structure for textured mode */
-
+  
   struct GHash *hash;
-
+  
   void (*add_material)(struct GLSL_MaterialTree_ * tree, struct Material *mat);
   void (*del_material)(struct GLSL_MaterialTree_ * tree, struct Material *mat);
   void (*update_material)(void);
-  void (*create_programs)(struct GLSL_MaterialTree_ * tree);
+  int  (*create_programs)(struct GLSL_MaterialTree_ * tree);
   void (*free)(struct GLSL_MaterialTree_ * tree);
-
+  
   short type;
 };
 
@@ -78,15 +78,13 @@
 void glsl_layer_change(unsigned int lay);
 
 void glsl_update_material(struct Material *mat, unsigned short event);
-void glsl_update_all_material_uniforms(struct Material *mat);
-void glsl_update_material_uniforms(unsigned int program, struct Material *mat, GLSL_MaterialTree tree);
 
+
 void glsl_init_material_programs(void);
 struct GLSL_Program_ *glsl_get_material_program(struct Material *mat, short mode);
 void glsl_redo_programs(void);
 void glsl_redo_mat_program(struct GLSL_Material_ *material);
 
-void glsl_update_all_world_uniforms(void);
-void glsl_update_tree_world_uniforms(GLSL_MaterialTree tree);
-void glsl_update_material_world_uniforms(struct Material *mat);
-void glsl_update_world_uniforms(unsigned long program);
+
+
+int glsl_get_material_index(GLSL_MaterialTree tree, struct Material *mat);

Added: branches/soc-2007-maike/source/blender/include/BIF_glsl_uniforms.h
===================================================================
--- branches/soc-2007-maike/source/blender/include/BIF_glsl_uniforms.h	                        (rev 0)
+++ branches/soc-2007-maike/source/blender/include/BIF_glsl_uniforms.h	2007-07-10 18:01:53 UTC (rev 11212)
@@ -0,0 +1,19 @@
+struct GLSL_Program_;
+struct GLSL_MaterialTree_;
+struct Material;
+struct Object;
+struct GHash;
+
+/* ------------------------------------------------ */
+
+void glsl_update_all_material_uniforms(void);
+void glsl_update_tree_material_uniforms(struct GLSL_MaterialTree_ *tree);
+void glsl_update_material_material_uniforms(struct Material *mat, struct GLSL_Program_ *program, int index);
+void glsl_update_mat_material_uniforms(struct Material *mat);
+void glsl_update_material_uniforms(unsigned int program, struct Material *mat, int index);
+
+
+void glsl_update_all_world_uniforms(void);
+void glsl_update_tree_world_uniforms(struct GLSL_MaterialTree_ *tree);
+void glsl_update_material_world_uniforms(struct Material *mat);
+void glsl_update_world_uniforms(unsigned int program);

Modified: branches/soc-2007-maike/source/blender/src/glsl_drawobject.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_drawobject.c	2007-07-10 16:57:49 UTC (rev 11211)
+++ branches/soc-2007-maike/source/blender/src/glsl_drawobject.c	2007-07-10 18:01:53 UTC (rev 11212)
@@ -345,8 +345,6 @@
   if(ob == OBACT ||  (base->flag & (SELECT+BA_WAS_SEL)))
     glsl_draw_outline(base, face, dm->numFaceData, vert);
 
-  if(!glsl_defmaterial->shaded_program)
-    glsl_defmaterial->create_programs(glsl_defmaterial);
 
   for(i = 0; i < dm->numFaceData; i++, face++, tface++){
     Material *mat = give_current_material(ob, (int) face->mat_nr + 1);
@@ -357,12 +355,9 @@
     }
     
     if(!oldmat || mat != oldmat){
-      if(mat && mat != &defmaterial)
+      if(mat)
 	glColor4f(mat->r, mat->g, mat->b, mat->alpha);
-      else{
-	mat = &defmaterial; 
-	glColor4f(mat->r, mat->g, mat->b, mat->alpha);
-      }
+      
 
       if(G.vd->drawtype == OB_SHADED){
 	program = glsl_get_material_program(mat, GLSL_SHADED);

Modified: branches/soc-2007-maike/source/blender/src/glsl_material.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_material.c	2007-07-10 16:57:49 UTC (rev 11211)
+++ branches/soc-2007-maike/source/blender/src/glsl_material.c	2007-07-10 18:01:53 UTC (rev 11212)
@@ -8,6 +8,7 @@
 #include "BIF_glsl_light.h"
 #include "BIF_glsl_util.h"
 #include "BIF_glsl_node_util.h"
+#include "BIF_glsl_uniforms.h"
 
 #include "BKE_global.h"
 #include "BKE_scene.h"
@@ -46,17 +47,15 @@
 static void glsl_mattree_add_mat(GLSL_MaterialTree tree, Material *mat)
 {
   GLSL_Material material = BLI_ghash_lookup(matHash, mat);
-
+  
   if(material == NULL){
     material = glsl_init_material(mat);
-
-    if(mat != &defmaterial){
-      BLI_ghash_insert(matHash, mat, material);
-    }
+    
+    BLI_ghash_insert(matHash, mat, material);
   }
   
   material->num_parents++;
-
+  
   BLI_ghash_insert(tree->hash, mat, material);
   BLI_ghash_insert(material->parent, tree, material);
 }
@@ -64,15 +63,12 @@
 
 static void glsl_mattree_del_mat(GLSL_MaterialTree tree, Material *mat)
 {
-  GLSL_Material material = (struct GLSL_Material_ *) BLI_ghash_lookup_reset(tree->hash, mat);
+  GLSL_Material material = (struct GLSL_Material_ *) BLI_ghash_lookup(tree->hash, mat);
 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list