[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