[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11264] branches/soc-2007-maike/source/ blender: GLSL colorband structure operations and colorband factor uniform send

Miguel Torres Lima torreslima at gmail.com
Fri Jul 13 17:10:06 CEST 2007


Revision: 11264
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11264
Author:   maike
Date:     2007-07-13 17:10:06 +0200 (Fri, 13 Jul 2007)

Log Message:
-----------
GLSL colorband structure operations and colorband factor uniform send

Modified Paths:
--------------
    branches/soc-2007-maike/source/blender/include/BIF_glsl_colorband.h
    branches/soc-2007-maike/source/blender/include/BIF_glsl_material.h
    branches/soc-2007-maike/source/blender/include/BIF_glsl_uniforms.h
    branches/soc-2007-maike/source/blender/include/butspace.h
    branches/soc-2007-maike/source/blender/src/butspace.c
    branches/soc-2007-maike/source/blender/src/buttons_shading.c
    branches/soc-2007-maike/source/blender/src/glsl_colorband.c
    branches/soc-2007-maike/source/blender/src/glsl_material.c
    branches/soc-2007-maike/source/blender/src/glsl_node_util.c
    branches/soc-2007-maike/source/blender/src/glsl_uniforms.c
    branches/soc-2007-maike/source/blender/src/glutil.c

Modified: branches/soc-2007-maike/source/blender/include/BIF_glsl_colorband.h
===================================================================
--- branches/soc-2007-maike/source/blender/include/BIF_glsl_colorband.h	2007-07-13 14:38:44 UTC (rev 11263)
+++ branches/soc-2007-maike/source/blender/include/BIF_glsl_colorband.h	2007-07-13 15:10:06 UTC (rev 11264)
@@ -1,5 +1,6 @@
 struct ColorBand;
 struct Material;
+struct GLSL_Material_;
 
 /* -------------------------------------------------------- */
 
@@ -22,8 +23,9 @@
 
 /* -------------------------------------------------------- */
 
-void glsl_colorbands_state(struct Material *mat);
-void glsl_colorband_add(struct Material *mat);
-void glsl_colorband_del(struct Material *mat);
+GLSL_ColorBand glsl_init_colorband(struct Material *mat, struct ColorBand *cb);
+int glsl_colorband_state(struct Material *mat);
+void glsl_colorbands_change(struct Material *mat);
+void glsl_colorband_add(struct Material *mat, struct GLSL_Material_ *material, int type);
+void glsl_colorband_del(struct GLSL_Material_ *material, int type);
 void glsl_colorband_create_tex(struct Material *mat);
-void glsl_colorband_uniforms(struct Material *mat);

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-13 14:38:44 UTC (rev 11263)
+++ branches/soc-2007-maike/source/blender/include/BIF_glsl_material.h	2007-07-13 15:10:06 UTC (rev 11264)
@@ -10,6 +10,7 @@
 struct Material;
 struct Object;
 struct GHash;
+struct Colorband;
 struct GLSL_ColorBand_;
 
 /* ------------------------------------------------ */
@@ -25,7 +26,7 @@
   short texface;
   
   void (*unlink)(struct GLSL_Material_ * material, struct Material *mat);
-  
+  void (*init_cb)(struct GLSL_Material_ *material, struct Material *mat);
   void (*free)(struct GLSL_Material_ * material, struct Material *mat);
 
   struct GLSL_ColorBand_ *diff_ramp;

Modified: branches/soc-2007-maike/source/blender/include/BIF_glsl_uniforms.h
===================================================================
--- branches/soc-2007-maike/source/blender/include/BIF_glsl_uniforms.h	2007-07-13 14:38:44 UTC (rev 11263)
+++ branches/soc-2007-maike/source/blender/include/BIF_glsl_uniforms.h	2007-07-13 15:10:06 UTC (rev 11264)
@@ -26,3 +26,24 @@
 #else
 void glsl_update_world_uniforms(unsigned int program);
 #endif
+
+
+
+/* ------------------------------------ COLORBAND ------------------------------------ */
+
+void glsl_update_all_colorband_uniforms(void);
+void glsl_update_tree_colorband_uniforms(struct GLSL_MaterialTree_ *tree);
+
+#ifdef __APPLE__
+void glsl_update_material_colorband_uniforms(struct Material *mat, unsigned long program, int index);
+#else
+void glsl_update_material_colorband_uniforms(struct Material *mat, unsigned int program, int index);
+#endif
+
+void glsl_update_mat_colorband_uniforms(struct Material *mat);
+
+#ifdef __APPLE__
+void glsl_update_colorband_uniforms(unsigned long program, struct Material *mat, int index);
+#else
+void glsl_update_colorband_uniforms(unsigned int program, struct Material *mat, int index);
+#endif

Modified: branches/soc-2007-maike/source/blender/include/butspace.h
===================================================================
--- branches/soc-2007-maike/source/blender/include/butspace.h	2007-07-13 14:38:44 UTC (rev 11263)
+++ branches/soc-2007-maike/source/blender/include/butspace.h	2007-07-13 15:10:06 UTC (rev 11264)
@@ -227,8 +227,7 @@
 #define B_MATDIFF               1230
 #define B_MATSPEC               1231
 #define B_MAT_UNIFS             1232
-#define B_MAT_CB_ADD            1233
-#define B_MAT_CB_DEL            1234
+
 #define B_MAT_CB_REDR           1235
 #define B_MAT_CB_REWR           1236
 #define B_MAT_CB_UNIFS          1237

Modified: branches/soc-2007-maike/source/blender/src/butspace.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/butspace.c	2007-07-13 14:38:44 UTC (rev 11263)
+++ branches/soc-2007-maike/source/blender/src/butspace.c	2007-07-13 15:10:06 UTC (rev 11264)
@@ -560,12 +560,6 @@
 	else if(event == B_MAT_UNIFS){
 	  do_matbuts(event);
 	}
-	else if(event == B_MAT_CB_ADD){
-	  do_matbuts(event);
-	}
-	else if(event == B_MAT_CB_DEL){
-	  do_matbuts(event);
-	}
 	else if(event == B_MAT_CB_REWR){
 	  do_matbuts(event);
 	}

Modified: branches/soc-2007-maike/source/blender/src/buttons_shading.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/buttons_shading.c	2007-07-13 14:38:44 UTC (rev 11263)
+++ branches/soc-2007-maike/source/blender/src/buttons_shading.c	2007-07-13 15:10:06 UTC (rev 11264)
@@ -3014,7 +3014,7 @@
 		  }
 		  
 		  if(glsl_active())
-		    glsl_colorbands_state(ma);
+		    glsl_colorbands_change(ma);
 		    
 			if(ma) end_render_material(ma);	/// temporal... 3d preview
 			allqueue(REDRAWBUTSSHADING, 0);
@@ -3054,27 +3054,10 @@
                         glsl_update_material(ma, event);
 		}
 		break;
-	case B_MAT_CB_ADD:
-	  if(ma){
-	    if(glsl_active())
-	      glsl_colorband_add(ma);
-	    printf("\ncolorband add material: %s\n", ma->id.name);
-	  }
-	  do_matbuts(B_MATPRV);
-	  break;
-	case B_MAT_CB_DEL:
-	  if(ma){
-	    if(glsl_active())
-	      glsl_colorband_del(ma);
-	    printf("\ncolorband del material: %s\n", ma->id.name);
-	  }
-	  do_matbuts(B_MATPRV);
-	  break;
 	case B_MAT_CB_REWR:
 	  if(ma){
 	    if(glsl_active())
 	      glsl_update_material(ma, event);
-	    printf("\ncolorband rewrite material: %s\n", ma->id.name);
 	  }
 	  do_matbuts(B_MATPRV);
 	  break;
@@ -3082,15 +3065,13 @@
 	  if(ma){
 	    if(glsl_active())
 	      glsl_colorband_create_tex(ma);
-	    printf("\ncolorband redraw tex material: %s\n", ma->id.name);
 	  }
 	  do_matbuts(B_MATPRV);
 	  break;
 	case B_MAT_CB_UNIFS:
 	  if(ma){
 	    if(glsl_active())
-	      glsl_colorband_uniforms(ma);
-	    printf("\ncolorband uniforms material: %s\n", ma->id.name);
+	      glsl_update_mat_colorband_uniforms(ma);
 	  }
 	  do_matbuts(B_MATPRV);
 	  break;

Modified: branches/soc-2007-maike/source/blender/src/glsl_colorband.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_colorband.c	2007-07-13 14:38:44 UTC (rev 11263)
+++ branches/soc-2007-maike/source/blender/src/glsl_colorband.c	2007-07-13 15:10:06 UTC (rev 11264)
@@ -31,6 +31,8 @@
 #include "BKE_global.h"
 
 
+extern GHash *matHash;
+
 static void glsl_cb_free(GLSL_ColorBand colorband)
 {
   MEM_freeN(colorband);
@@ -47,32 +49,93 @@
 
   colorband->free = glsl_cb_free;
 
+  printf("\nGLSL Colorband created\n");
+
   return colorband;
 }
 
 
-void glsl_colorbands_state(Material *mat)
+int glsl_colorband_state(Material *mat)
 {
-
+  switch(mat->ramp_show)
+    {
+    case 0: return MA_RAMP_COL; break;
+    default: return MA_RAMP_SPEC; break;
+    }
 }
 
-void glsl_colorband_add(Material *mat)
+
+/*determine change*/
+void glsl_colorbands_change(Material *mat)
 {
+  GLSL_Material material = BLI_ghash_lookup(matHash, mat);
 
+  if(material){
+    switch(mat->ramp_show)
+      {
+      case 0:
+	if(!material->diff_ramp && mat->mode & MA_RAMP_COL)
+	  glsl_colorband_add(mat, material, MA_RAMP_COL);
+	else if(material->diff_ramp && !(mat->mode & MA_RAMP_COL))
+	  glsl_colorband_del(material, MA_RAMP_COL);
+	break;
+      case 1:
+	if(!material->spec_ramp && mat->mode & MA_RAMP_SPEC)
+	  glsl_colorband_add(mat, material, MA_RAMP_SPEC);
+	else if(material->spec_ramp && !(mat->mode & MA_RAMP_SPEC))
+	  glsl_colorband_del(material, MA_RAMP_SPEC);
+	break;
+      default:
+	break;
+      }
+
+    /* rewrite code and redo tex */
+  }
 }
 
-void glsl_colorband_del(Material *mat)
+
+/*new colorband*/
+void glsl_colorband_add(Material *mat, GLSL_Material material, int type)
 {
-
+  switch(type)
+    {
+    case MA_RAMP_COL:
+      material->diff_ramp = glsl_init_colorband(mat, mat->ramp_col);
+      printf("\nGLSL Diffuse ColorBand created.\n");
+      break;
+    case MA_RAMP_SPEC:
+      material->spec_ramp = glsl_init_colorband(mat, mat->ramp_spec);
+      printf("\nGLSL Specular ColorBand created.\n");
+      break;
+    default:
+      break;
+    }
 }
 
-void glsl_colorband_create_tex(Material *mat)
+
+/*remove colorband*/
+void glsl_colorband_del(GLSL_Material material, int type)
 {
-
+  switch(type)
+    {
+    case MA_RAMP_COL:
+      material->diff_ramp->free(material->diff_ramp);
+      material->diff_ramp = NULL;
+      printf("\nGLSL Diffuse ColorBand removed.\n");
+      break;
+    case MA_RAMP_SPEC:
+      material->spec_ramp->free(material->spec_ramp);
+      material->spec_ramp = NULL;
+      printf("\nGLSL Specular ColorBand removed.\n");
+      break;
+    default:
+      break;
+    }
 }
 
-void glsl_colorband_uniforms(Material *mat)
+
+/*create or recreate texture*/
+void glsl_colorband_create_tex(Material *mat)
 {
 
 }
-

Modified: branches/soc-2007-maike/source/blender/src/glsl_material.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_material.c	2007-07-13 14:38:44 UTC (rev 11263)
+++ branches/soc-2007-maike/source/blender/src/glsl_material.c	2007-07-13 15:10:06 UTC (rev 11264)
@@ -9,6 +9,7 @@
 #include "BIF_glsl_util.h"
 #include "BIF_glsl_node_util.h"
 #include "BIF_glsl_uniforms.h"
+#include "BIF_glsl_colorband.h"
 
 #include "BKE_global.h"
 #include "BKE_scene.h"
@@ -52,6 +53,8 @@
     material = glsl_init_material(mat);
     
     BLI_ghash_insert(matHash, mat, material);
+
+    material->init_cb(material, mat);
   }
   
   material->num_parents++;
@@ -156,9 +159,22 @@
     MEM_freeN(material);
   }
   
+  if(material->diff_ramp)
+    material->diff_ramp->free(material->diff_ramp);
+  if(material->spec_ramp)
+    material->spec_ramp->free(material->spec_ramp);
+
   printf("\n GLSL Material removed.\n");
 }
 
+static void glsl_mat_init_cb(GLSL_Material material, Material *mat)
+{
+  if(mat->mode & MA_RAMP_COL && mat->ramp_col)
+    material->diff_ramp = glsl_init_colorband(mat, mat->ramp_col);
+  if(mat->mode & MA_RAMP_SPEC && mat->ramp_spec)
+    material->spec_ramp = glsl_init_colorband(mat, mat->ramp_spec);
+}
+
 /* --------------------------------------------------------------- */
 
 
@@ -214,6 +230,7 @@
   }
 
   glsl_update_tree_material_uniforms(tree);
+  glsl_update_tree_colorband_uniforms(tree);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list