[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11102] branches/soc-2007-maike/source/ blender: Corrected some segfaults
Miguel Torres Lima
torreslima at gmail.com
Thu Jun 28 19:02:41 CEST 2007
Revision: 11102
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11102
Author: maike
Date: 2007-06-28 19:02:41 +0200 (Thu, 28 Jun 2007)
Log Message:
-----------
Corrected some segfaults
Added ambient uniforms set function
Modified Paths:
--------------
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_light.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
Modified: branches/soc-2007-maike/source/blender/include/BIF_glsl_material.h
===================================================================
--- branches/soc-2007-maike/source/blender/include/BIF_glsl_material.h 2007-06-28 15:57:54 UTC (rev 11101)
+++ branches/soc-2007-maike/source/blender/include/BIF_glsl_material.h 2007-06-28 17:02:41 UTC (rev 11102)
@@ -85,3 +85,8 @@
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);
Modified: branches/soc-2007-maike/source/blender/src/glsl_drawobject.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_drawobject.c 2007-06-28 15:57:54 UTC (rev 11101)
+++ branches/soc-2007-maike/source/blender/src/glsl_drawobject.c 2007-06-28 17:02:41 UTC (rev 11102)
@@ -14,6 +14,7 @@
#include "DNA_screen_types.h"
#include "DNA_userdef_types.h"
#include "DNA_view3d_types.h"
+#include "DNA_vec_types.h"
#include "BLI_arithb.h"
@@ -32,6 +33,8 @@
#include "BIF_gl.h"
#include "BIF_glsl_drawobject.h"
+#include "BSE_view.h"
+
#include "blendef.h"
#include "MEM_guardedalloc.h"
@@ -64,11 +67,14 @@
lamp_obj->obmat[3][2] };
float mat[4][4];
float vecc[3];
+ float eyevec[3] = { 0,0,0 };
- glUniform3f(glsl_uniform_location(program, eye),
- G.vd->dist * G.vd->viewinv[2][0],
+ glUniform3f(glsl_uniform_location(program, eye), eyevec[0], eyevec[1], eyevec[2] );
+
+
+ /*G.vd->dist * G.vd->viewinv[2][0],
G.vd->dist * G.vd->viewinv[2][1],
- G.vd->dist * G.vd->viewinv[2][2]);
+ G.vd->dist * G.vd->viewinv[2][2]);*/
Mat4MulVecfl(G.vd->viewmat, vect);
Modified: branches/soc-2007-maike/source/blender/src/glsl_light.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_light.c 2007-06-28 15:57:54 UTC (rev 11101)
+++ branches/soc-2007-maike/source/blender/src/glsl_light.c 2007-06-28 17:02:41 UTC (rev 11102)
@@ -29,6 +29,7 @@
static int num_lights = 0;
extern GHash *treeHash;
+extern GHash *matHash;
/* --------------------------------------------------------------- */
@@ -96,7 +97,8 @@
printf("\nGLSL Light created.\n");
num_lights++;
- glsl_redo_programs();
+ if(treeHash && BLI_ghash_size(treeHash) > 0)
+ glsl_redo_programs();
}
@@ -188,6 +190,7 @@
char *att1 = glsl_string(3, 0, "lights[", GINT, n, 0, "].att1");
char *att2 = glsl_string(3, 0, "lights[", GINT, n, 0, "].att2");
char *att3 = glsl_string(3, 0, "lights[", GINT, n, 0, "].att3");
+ char *att4 = glsl_string(3, 0, "lights[", GINT, n, 0, "].att4");
char *quad = glsl_string(3, 0, "lights[", GINT, n, 0, "].quad");
char *sphere = glsl_string(3, 0, "lights[", GINT, n, 0, "].sphere");
char *square = glsl_string(3, 0, "lights[", GINT, n, 0, "].square");
@@ -217,12 +220,14 @@
if(lamp->mode & LA_QUAD){
glUniform1f(glsl_uniform_location(program, att1), lamp->att1);
glUniform1f(glsl_uniform_location(program, att2), lamp->att2);
- glUniform1f(glsl_uniform_location(program, att3), 0.0);
+ glUniform1f(glsl_uniform_location(program, att3), 1.0);
+ glUniform1f(glsl_uniform_location(program, att4), 0.0);
}
else{
glUniform1f(glsl_uniform_location(program, att1), 0.0);
glUniform1f(glsl_uniform_location(program, att2), 0.0);
- glUniform1f(glsl_uniform_location(program, att3), 1.0);
+ glUniform1f(glsl_uniform_location(program, att3), 0.0);
+ glUniform1f(glsl_uniform_location(program, att4), 1.0);
}
if(lamp->mode & LA_SPHERE){
@@ -233,6 +238,7 @@
}
}
+
if(vtree && vtree == tree)
break;
@@ -245,6 +251,7 @@
MEM_freeN(att1);
MEM_freeN(att2);
MEM_freeN(att3);
+ MEM_freeN(att4);
MEM_freeN(quad);
MEM_freeN(sphere);
MEM_freeN(square);
Modified: branches/soc-2007-maike/source/blender/src/glsl_material.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_material.c 2007-06-28 15:57:54 UTC (rev 11101)
+++ branches/soc-2007-maike/source/blender/src/glsl_material.c 2007-06-28 17:02:41 UTC (rev 11102)
@@ -1,5 +1,7 @@
#include <GL/glew.h>
+#include <math.h>
+
#include "BIF_glsl_material.h"
#include "BIF_glutil.h"
#include "BIF_glsl_program.h"
@@ -22,6 +24,8 @@
#include "DNA_meta_types.h"
#include "DNA_curve_types.h"
+#include "DNA_world_types.h"
+
#include "MEM_guardedalloc.h"
#include "BLI_ghash.h"
@@ -30,8 +34,9 @@
/* ----------------------------------------------------------------------- */
-GHash *matHash, *treeHash;
-GLSL_MaterialTree glsl_defmaterial;
+GHash *matHash = NULL;
+GHash *treeHash = NULL;
+GLSL_MaterialTree glsl_defmaterial = NULL;
extern Material defmaterial;
/* ----------------------------------------------------------------------- */
@@ -89,23 +94,25 @@
static void glsl_mattree_free(GLSL_MaterialTree tree)
{
- GHashIterator *iter = BLI_ghashIterator_new(treeHash);
- int i;
-
- for(i = 0; i < BLI_ghash_size(treeHash); i++, BLI_ghashIterator_step(iter)){
- if(BLI_ghashIterator_getValue(iter) == tree){
- BLI_ghash_lookup_reset(treeHash, BLI_ghashIterator_getKey(iter));
- break;
+ if(treeHash){
+ GHashIterator *iter = BLI_ghashIterator_new(treeHash);
+ int i;
+
+ for(i = 0; i < BLI_ghash_size(treeHash); i++, BLI_ghashIterator_step(iter)){
+ if(BLI_ghashIterator_getValue(iter) == tree){
+ BLI_ghash_lookup_reset(treeHash, BLI_ghashIterator_getKey(iter));
+ break;
+ }
}
}
-
+
BLI_ghash_free(tree->hash, NULL, NULL);
if(tree->shaded_program)
tree->shaded_program->free(tree->shaded_program);
if(tree->textured_program)
tree->textured_program->free(tree->textured_program);
-
+
if(tree)
MEM_freeN(tree);
@@ -115,20 +122,22 @@
static void glsl_mat_unlink(GLSL_Material material, Material *mat)
{
- GHashIterator *iter = BLI_ghashIterator_new(material->parent);
- int i;
-
- for(i = 0; i < BLI_ghash_size(material->parent); i++, BLI_ghashIterator_step(iter)){
- GLSL_MaterialTree tree = BLI_ghashIterator_getKey(iter);
- BLI_ghash_lookup_reset(material->parent, tree);
+ if(material->parent){
+ GHashIterator *iter = BLI_ghashIterator_new(material->parent);
+ int i;
- tree->del_material(tree, mat);
- }
-
- BLI_ghashIterator_free(iter);
-
- if(material->num_parents == 0)
- material->free(material, mat);
+ for(i = 0; i < BLI_ghash_size(material->parent); i++, BLI_ghashIterator_step(iter)){
+ GLSL_MaterialTree tree = BLI_ghashIterator_getKey(iter);
+ BLI_ghash_lookup_reset(material->parent, tree);
+
+ tree->del_material(tree, mat);
+ }
+
+ BLI_ghashIterator_free(iter);
+
+ if(material->num_parents == 0)
+ material->free(material, mat);
+ }
}
@@ -157,8 +166,15 @@
/* called from usiblender.c in function exit_usiblender() */
void glsl_free_ghash(void)
{
- BLI_ghash_free(matHash, NULL, NULL);
- BLI_ghash_free(treeHash, NULL, NULL);
+ if(matHash){
+ BLI_ghash_free(matHash, NULL, NULL);
+ matHash = NULL;
+ }
+
+ if(treeHash){
+ BLI_ghash_free(treeHash, NULL, NULL);
+ treeHash = NULL;
+ }
}
@@ -192,12 +208,15 @@
if(material){
BLI_ghashIterator_free(iter);
-
- BLI_ghash_free(material->parent, NULL, NULL);
+
+ if(material->parent)
+ BLI_ghash_free(material->parent, NULL, NULL);
MEM_freeN(material);
}
glsl_defmaterial->free(glsl_defmaterial);
}
+
+ glsl_defmaterial = NULL;
}
@@ -232,10 +251,9 @@
}
- if((Material *) mat != &defmaterial){
- tree->create_programs(tree);
- glsl_update_all_light_uniforms(tree);
- }
+ tree->create_programs(tree);
+ glsl_update_all_light_uniforms(tree);
+ glsl_update_tree_world_uniforms(tree);
printf("\n GLSL MaterialTree created.\n");
@@ -276,40 +294,44 @@
void glsl_free_material_structs(void)
{
- GHashIterator *iterM = BLI_ghashIterator_new(matHash);
- GHashIterator *iterT = BLI_ghashIterator_new(treeHash);
- int i;
+ if(matHash){
+ GHashIterator *iterM = BLI_ghashIterator_new(matHash);
+ int i;
-
- for(i = 0; i < BLI_ghash_size(matHash); i++, BLI_ghashIterator_step(iterM)){
- GLSL_Material material = BLI_ghashIterator_getValue(iterM);
+ for(i = 0; i < BLI_ghash_size(matHash); i++, BLI_ghashIterator_step(iterM)){
+ GLSL_Material material = BLI_ghashIterator_getValue(iterM);
+
+ printf("\n GLSL Material removed.\n");
+
+ BLI_ghash_free(material->parent, NULL, NULL);
+ MEM_freeN(material);
+ }
- printf("\n GLSL Material removed.\n");
+ BLI_ghashIterator_free(iterM);
+ }
- BLI_ghash_free(material->parent, NULL, NULL);
- MEM_freeN(material);
- }
-
- BLI_ghashIterator_free(iterM);
+ if(treeHash){
+ GHashIterator *iterT = BLI_ghashIterator_new(treeHash);
+ int i;
-
- for(i = 0; i < BLI_ghash_size(treeHash); i++, BLI_ghashIterator_step(iterT)){
- GLSL_MaterialTree tree = BLI_ghashIterator_getValue(iterT);
-
- printf("\n GLSL MaterialTree removed.\n");
-
- BLI_ghash_free(tree->hash, NULL, NULL);
+ for(i = 0; i < BLI_ghash_size(treeHash); i++, BLI_ghashIterator_step(iterT)){
+ GLSL_MaterialTree tree = BLI_ghashIterator_getValue(iterT);
+
+ printf("\n GLSL MaterialTree removed.\n");
+
+ BLI_ghash_free(tree->hash, NULL, NULL);
+
+ if(tree->shaded_program)
+ tree->shaded_program->free(tree->shaded_program);
+ /*tree->textured_program->free(tree->textured_program);*/
+
+ MEM_freeN(tree);
+ }
- if(tree->shaded_program)
- tree->shaded_program->free(tree->shaded_program);
- //tree->textured_program->free(tree->textured_program);
+ BLI_ghashIterator_free(iterT);
+ }
- MEM_freeN(tree);
- }
-
- BLI_ghashIterator_free(iterT);
-
glsl_free_ghash();
glsl_init_ghash();
}
@@ -406,7 +428,7 @@
char *spec, *alpha, *amb_fac;
char *diff1, *diff2, *diff3;
char *spec1, *spec2, *spec3;
- char *emit, *hard;
+ char *emit, *hard, *ambcolor;
glUseProgram(program);
@@ -417,6 +439,7 @@
BLI_ghashIterator_free(iter);
+
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list