[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11550] branches/soc-2007-maike: Fixed the glsl preview activation when scene had no lights

Miguel Torres Lima torreslima at gmail.com
Sat Aug 11 18:06:05 CEST 2007


Revision: 11550
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11550
Author:   maike
Date:     2007-08-11 18:06:05 +0200 (Sat, 11 Aug 2007)

Log Message:
-----------
Fixed the glsl preview activation when scene had no lights
Illegal memory free for colorbands and shader generation fix

Modified Paths:
--------------
    branches/soc-2007-maike/release/glsl/material_return.gsl
    branches/soc-2007-maike/source/blender/src/glsl_colorband_node.c
    branches/soc-2007-maike/source/blender/src/glsl_materialtree.c
    branches/soc-2007-maike/source/blender/src/glsl_node_util.c

Modified: branches/soc-2007-maike/release/glsl/material_return.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/material_return.gsl	2007-08-11 12:58:35 UTC (rev 11549)
+++ branches/soc-2007-maike/release/glsl/material_return.gsl	2007-08-11 16:06:05 UTC (rev 11550)
@@ -1,6 +1,6 @@
 
 #ifdef DIFF_CB_RESULT
-#ifndef LIGHT_CALCULATIONS
+#if LIGHT_CALCULATIONS == 0
 return(vec3(0.0, 0.0, 0.0));
 #else
 if(diff_cb_res > 0.0){
@@ -36,7 +36,7 @@
 #endif
 #endif
 
-#ifdef LIGHT_CALCULATIONS
+#if LIGHT_CALCULATIONS == 1
   return(amb_exp * (1.0 - exp((diff_rslt + (diff_color * vec3(emit + vert_color.r, emit + vert_color.g, emit + vert_color.b))) * amb_range)) + spec_rslt + amb_rslt); 
 #else
   return(vec3(0.0, 0.0, 0.0));

Modified: branches/soc-2007-maike/source/blender/src/glsl_colorband_node.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_colorband_node.c	2007-08-11 12:58:35 UTC (rev 11549)
+++ branches/soc-2007-maike/source/blender/src/glsl_colorband_node.c	2007-08-11 16:06:05 UTC (rev 11550)
@@ -101,15 +101,28 @@
 		       0, "_ramp_", 
 		       GINT, ramp_num, 
 		       0, "_fac\n");
-    
-    if(mat->rampin_col == MA_RAMP_IN_RESULT)
+
+    code = glsl_string(3, 
+		     GFREE, func, 
+		     GFREE, tex, 
+		     GFREE, fac);
+
+    if(mat->rampin_col == MA_RAMP_IN_RESULT){
       rslt = "#define DIFF_CB_RESULT 1\n";
+      code = glsl_string(2,
+			 GFREE, code,
+			 0, rslt);
+    }
 
-    if(mat->rampin_col != MA_RAMP_IN_RESULT)
+    if(mat->rampin_col != MA_RAMP_IN_RESULT){
       type = glsl_string(3, 
 			 0, "#define DIFF_CB_TYPE ", 
 			 GINT, mat->rampin_col, 
 			 0, "\n");
+      code = glsl_string(2,
+			 GFREE, type,
+			 GFREE, code);
+    }
     
     blen_type = pow(2, mat->rampblend_col);
   }
@@ -133,24 +146,30 @@
 		       GINT, ramp_num, 
 		       0, "_fac\n");
 
-    if(mat->rampin_spec == MA_RAMP_IN_RESULT)
+    code = glsl_string(3, 
+		       GFREE, func, 
+		       GFREE, tex, 
+		       GFREE, fac);
+
+    if(mat->rampin_spec == MA_RAMP_IN_RESULT){
       rslt = "#define SPEC_CB_RESULT 1\n";
+      code = glsl_string(2,
+			 GFREE, code,
+			 0, rslt);
+    }
     
-    if(mat->rampin_spec != MA_RAMP_IN_RESULT)
+    if(mat->rampin_spec != MA_RAMP_IN_RESULT){
       type = glsl_string(3, 
 			 0, "#define SPEC_CB_TYPE ", 
 			 GINT, mat->rampin_spec, 
 			 0, "\n");
+      code = glsl_string(2,
+			 GFREE, type,
+			 GFREE, code);
+    }
 
     blen_type = pow(2, mat->rampblend_spec);
   }
-
-  code = glsl_string(5, 
-		     GFREE, type, 
-		     GFREE, func, 
-		     GFREE, tex, 
-		     GFREE, fac,
-		     0, rslt);
   
   if(!(*blend & blen_type))
     *blend += blen_type;

Modified: branches/soc-2007-maike/source/blender/src/glsl_materialtree.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_materialtree.c	2007-08-11 12:58:35 UTC (rev 11549)
+++ branches/soc-2007-maike/source/blender/src/glsl_materialtree.c	2007-08-11 16:06:05 UTC (rev 11550)
@@ -102,9 +102,7 @@
 
 static int glsl_tree_program(GLSL_MaterialTree tree)
 {
-  if(glsl_get_num_lights() > 0){
-    tree->shaded_program = glsl_init_program(tree);
-  }
+  tree->shaded_program = glsl_init_program(tree);
 
   if(tree->shaded_program != NULL){
     glsl_update_all_light_uniforms(tree);

Modified: branches/soc-2007-maike/source/blender/src/glsl_node_util.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_node_util.c	2007-08-11 12:58:35 UTC (rev 11549)
+++ branches/soc-2007-maike/source/blender/src/glsl_node_util.c	2007-08-11 16:06:05 UTC (rev 11550)
@@ -98,19 +98,15 @@
   char *light_decl = NULL;
   char *uniforms = NULL;
   
-  light_struct = glsl_get_func("light_struct.gsl");
-  varyings = glsl_get_func("varyings.gsl");
-  uniforms = glsl_get_func("uniforms.gsl");
-
-  if(!light_struct)
+  if(!(light_struct = glsl_get_func("light_struct.gsl")))
     return -1;
 
-  if(!varyings){
+  if(!(varyings = glsl_get_func("varyings.gsl"))){
     MEM_freeN(light_struct);
     return -1;
   }
-
-  if(!uniforms){
+  
+  if(!(uniforms = glsl_get_func("uniforms.gsl"))){
     MEM_freeN(light_struct);
     MEM_freeN(varyings);
     return -1;
@@ -123,7 +119,7 @@
     return -1;
   }
 
-  light_decl = glsl_declare_lightstruct(glsl_get_num_lights() + 1);
+  light_decl = glsl_declare_lightstruct(glsl_get_num_lights());
 
   code = glsl_string(7,
 		     GFREE, light_struct,
@@ -137,8 +133,6 @@
   printf("\n Code:\n%s\n", code);
 
   shader = glsl_create_GLshader(code, GL_FRAGMENT_SHADER, 1);
-  
-  MEM_freeN(program_node);
 
   return shader;
 }
@@ -147,7 +141,7 @@
 char *glsl_declare_lightstruct(int num)
 {
   char *defines = glsl_string(3, 
-			      0, "uniform light lights[", GINT, num, 0, "];\n");
+			      0, "uniform light lights[", GINT, num?num:1, 0, "];\n");
 
   return defines;
 }





More information about the Bf-blender-cvs mailing list