[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