[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11291] branches/soc-2007-maike/source/ blender: Colorband texture creation and uniform sending

Miguel Torres Lima torreslima at gmail.com
Mon Jul 16 19:22:07 CEST 2007


Revision: 11291
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11291
Author:   maike
Date:     2007-07-16 19:22:07 +0200 (Mon, 16 Jul 2007)

Log Message:
-----------
Colorband texture creation and uniform sending

Modified Paths:
--------------
    branches/soc-2007-maike/source/blender/include/BIF_glsl_colorband.h
    branches/soc-2007-maike/source/blender/include/BIF_glsl_light.h
    branches/soc-2007-maike/source/blender/src/glsl_colorband.c
    branches/soc-2007-maike/source/blender/src/glsl_light.c
    branches/soc-2007-maike/source/blender/src/glsl_material.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-16 17:18:36 UTC (rev 11290)
+++ branches/soc-2007-maike/source/blender/include/BIF_glsl_colorband.h	2007-07-16 17:22:07 UTC (rev 11291)
@@ -1,3 +1,7 @@
+#define COLORBAND_WIDTH   512
+
+/* -------------------------------------------------------- */
+
 struct ColorBand;
 struct Material;
 struct GLSL_Material_;
@@ -13,7 +17,8 @@
 #else
   unsigned int texid;
 #endif
-
+  short tex_set;
+  
   void (*free)(struct GLSL_ColorBand_ *colorband);
 };
 
@@ -29,3 +34,4 @@
 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_generate_tex(GLSL_ColorBand colorband);

Modified: branches/soc-2007-maike/source/blender/include/BIF_glsl_light.h
===================================================================
--- branches/soc-2007-maike/source/blender/include/BIF_glsl_light.h	2007-07-16 17:18:36 UTC (rev 11290)
+++ branches/soc-2007-maike/source/blender/include/BIF_glsl_light.h	2007-07-16 17:22:07 UTC (rev 11291)
@@ -28,6 +28,7 @@
 void glsl_init_scene_light(struct Lamp *lamp, struct Object *obj);
 void glsl_free_light_structs(void);
 void glsl_create_light(struct Lamp *lamp, struct Object *obj);
+void glsl_find_create_light(struct Lamp *lamp);
 struct GLSL_List_ * glsl_get_light(struct Lamp *lamp);
 
 void glsl_update_light(struct Lamp *lamp, unsigned short event);

Modified: branches/soc-2007-maike/source/blender/src/glsl_colorband.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_colorband.c	2007-07-16 17:18:36 UTC (rev 11290)
+++ branches/soc-2007-maike/source/blender/src/glsl_colorband.c	2007-07-16 17:22:07 UTC (rev 11291)
@@ -24,11 +24,13 @@
 #include "DNA_texture_types.h"
 #include "DNA_lamp_types.h"
 #include "DNA_userdef_types.h"
+#include "DNA_key_types.h"
 
 #include "MEM_guardedalloc.h"
 
 #include "BKE_bad_level_calls.h"
 #include "BKE_global.h"
+#include "BKE_texture.h"
 
 
 extern GHash *matHash;
@@ -45,8 +47,8 @@
 
   colorband->index = 0;
   colorband->colorband = cb;
-  colorband->texid = -1;
-
+  colorband->texid = 0;
+  colorband->tex_set = 0;
   colorband->free = glsl_cb_free;
 
   printf("\nGLSL Colorband created\n");
@@ -137,5 +139,44 @@
 /*create or recreate texture*/
 void glsl_colorband_create_tex(Material *mat)
 {
+  GLSL_Material material = BLI_ghash_lookup(matHash, mat);
 
+  if(!material) return;
+
+  if(!mat->ramp_show)  glsl_colorband_generate_tex(material->diff_ramp);
+  else  glsl_colorband_generate_tex(material->spec_ramp);
+
+  printf("\nGLSL ColorBand texture created\n");
 }
+
+
+void glsl_colorband_generate_tex(GLSL_ColorBand colorband)
+{  
+  GLubyte cb_tex[COLORBAND_WIDTH][4];
+  GLuint tex_name;
+  float texels[4];
+  ColorBand *cb = colorband->colorband;
+  int i;
+
+  if(colorband->tex_set)
+    glDeleteTextures(1, &colorband->texid);
+
+  for(i = 0; i < 512; i++){
+    do_colorband(cb, i / 512, texels);
+    cb_tex[i][0] = texels[0];
+    cb_tex[i][1] = texels[1];
+    cb_tex[i][2] = texels[2];
+    cb_tex[i][3] = texels[3];
+  }
+
+  glEnable(GL_TEXTURE_1D);
+  glGenTextures(1, &tex_name);
+  
+  colorband->texid = tex_name;
+
+  glBindTexture(GL_TEXTURE_1D, tex_name);
+  glTexImage1D(GL_TEXTURE_1D, 0, GL_RGBA, COLORBAND_WIDTH, 0, GL_RGBA, GL_UNSIGNED_BYTE, cb_tex);
+  glDisable(GL_TEXTURE_1D);
+
+  colorband->tex_set = 1;
+}

Modified: branches/soc-2007-maike/source/blender/src/glsl_light.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_light.c	2007-07-16 17:18:36 UTC (rev 11290)
+++ branches/soc-2007-maike/source/blender/src/glsl_light.c	2007-07-16 17:22:07 UTC (rev 11291)
@@ -117,6 +117,21 @@
 }
 
 
+void glsl_find_create_light(Lamp *lamp)
+{
+  Base *base;
+  Object *obj;
+    
+  for(base= G.scene->base.first; base; base= base->next) {
+    obj = base->object;
+      
+    if(obj->type == OB_LAMP && obj->data == lamp){
+	glsl_create_light((Lamp *) obj->data, obj);
+    }
+  }
+}
+
+
 GLSL_List glsl_get_light(Lamp *lamp)
 {
   GLSL_List list = lights;

Modified: branches/soc-2007-maike/source/blender/src/glsl_material.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_material.c	2007-07-16 17:18:36 UTC (rev 11290)
+++ branches/soc-2007-maike/source/blender/src/glsl_material.c	2007-07-16 17:22:07 UTC (rev 11291)
@@ -388,6 +388,7 @@
   BLI_ghashIterator_free(iter);
 
   glsl_update_mat_material_uniforms(material->mat);
+  glsl_update_mat_colorband_uniforms(material->mat);
   glsl_update_material_world_uniforms(material->mat);
 }
 
@@ -429,6 +430,7 @@
       case B_MAT_CB_REWR:
 	printf("\nGLSL Colorband changed\n");
 	glsl_redo_mat_program(material);
+	glsl_colorband_create_tex(mat);
       default:
 	printf("\nGLSL Material params changed.\n");
 	glsl_update_mat_material_uniforms(mat);





More information about the Bf-blender-cvs mailing list