[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