[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11535] branches/soc-2007-maike: Vertex Color bugfix
Miguel Torres Lima
torreslima at gmail.com
Fri Aug 10 16:40:05 CEST 2007
Revision: 11535
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11535
Author: maike
Date: 2007-08-10 16:40:04 +0200 (Fri, 10 Aug 2007)
Log Message:
-----------
Vertex Color bugfix
Modified Paths:
--------------
branches/soc-2007-maike/release/glsl/light_calc.gsl
branches/soc-2007-maike/release/glsl/material_return.gsl
branches/soc-2007-maike/source/blender/src/glsl_drawobject.c
Modified: branches/soc-2007-maike/release/glsl/light_calc.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/light_calc.gsl 2007-08-10 12:12:00 UTC (rev 11534)
+++ branches/soc-2007-maike/release/glsl/light_calc.gsl 2007-08-10 14:40:04 UTC (rev 11535)
@@ -14,18 +14,18 @@
diff_fac = rslt1;
#else
#if DIFF_CB_TYPE == 1
-diff_fac = (0.3 * lights[LIGHT_ID].color.r + 0.58 * lights[LIGHT_ID].color.g + 0.12 * lights[LIGHT_ID].color.b) * vis * rslt1 * lights[LIGHT_ID].energy;
+diff_fac = ((0.3 * lights[LIGHT_ID].color.r + vert_color.r) + (0.58 * lights[LIGHT_ID].color.g + vert_color.g) + (0.12 * lights[LIGHT_ID].color.b + vert_color.b)) * vis * rslt1 * lights[LIGHT_ID].energy;
#else
diff_fac = dot((eye - pos), normal);
#endif
#endif
diff_cb = texture1D(DIFF_CB_TEX, clamp(diff_fac, 0.000, 0.999));
-diff_rslt += DIFF_CB_BLEND_FUNC(diff_cb.rgb, diff_color, DIFF_CB_FAC * diff_cb.a) * rslt1 * diff1 * vec3(lights[LIGHT_ID].color + vert_color) * lights[LIGHT_ID].layer * vis * lights[LIGHT_ID].energy;
+diff_rslt += DIFF_CB_BLEND_FUNC(diff_cb.rgb, diff_color, DIFF_CB_FAC * diff_cb.a) * rslt1 * diff1 * vec3(lights[LIGHT_ID].color) * lights[LIGHT_ID].layer * vis * lights[LIGHT_ID].energy;
#else
#ifdef HEMI
-diff_rslt+= (DIFF_SHADER_ID(lights[LIGHT_ID], norm) * diff1 * diff_color * vec3(lights[LIGHT_ID].color + vert_color) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis);
+diff_rslt+= (DIFF_SHADER_ID(lights[LIGHT_ID], norm) * diff1 * diff_color * vec3(lights[LIGHT_ID].color) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis);
#else
-diff_rslt+= (DIFF_SHADER_ID(lights[LIGHT_ID], norm, diff2, diff3) * diff1 * diff_color * vec3(lights[LIGHT_ID].color + vert_color) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis);
+diff_rslt+= (DIFF_SHADER_ID(lights[LIGHT_ID], norm, diff2, diff3) * diff1 * diff_color * vec3(lights[LIGHT_ID].color) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis);
#endif
#endif
#endif
@@ -53,9 +53,9 @@
spec_rslt += SPEC_CB_BLEND_FUNC(spec_cb.rgb, spec_color, SPEC_CB_FAC) * rslt2 * spec1 * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis;
#else
#ifdef HEMI
-spec_rslt+= SPEC_SHADER_ID(lights[LIGHT_ID], normal, hard) * spec1 * spec_color * vec3(lights[LIGHT_ID].color + vert_color) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis;
+spec_rslt+= SPEC_SHADER_ID(lights[LIGHT_ID], normal, hard) * spec1 * spec_color * vec3(lights[LIGHT_ID].color) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis;
#else
-spec_rslt+= SPEC_SHADER_ID(lights[LIGHT_ID], normal, spec2, spec3) * spec1 * spec_color * vec3(lights[LIGHT_ID].color + vert_color) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis;
+spec_rslt+= SPEC_SHADER_ID(lights[LIGHT_ID], normal, spec2, spec3) * spec1 * spec_color * vec3(lights[LIGHT_ID].color) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis;
#endif
#endif
#endif
Modified: branches/soc-2007-maike/release/glsl/material_return.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/material_return.gsl 2007-08-10 12:12:00 UTC (rev 11534)
+++ branches/soc-2007-maike/release/glsl/material_return.gsl 2007-08-10 14:40:04 UTC (rev 11535)
@@ -37,7 +37,7 @@
#endif
#ifdef LIGHT_CALCULATIONS
- return(amb_exp * (1.0 - exp((diff_rslt + (diff_color * emit))* amb_range)) + spec_rslt + amb_rslt);
+ 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));
#endif
Modified: branches/soc-2007-maike/source/blender/src/glsl_drawobject.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_drawobject.c 2007-08-10 12:12:00 UTC (rev 11534)
+++ branches/soc-2007-maike/source/blender/src/glsl_drawobject.c 2007-08-10 14:40:04 UTC (rev 11535)
@@ -634,22 +634,30 @@
void set_vertex_color(Material *mat, MCol *mcol, int n, GLuint program)
{
- if(mat && mcol){
- unsigned char *col = (unsigned char *) mcol;
-
- if(mat->mode & MA_VERTEXCOLP){
+ if(mat->mode & MA_VERTEXCOLP){
+ if(mcol){
+ unsigned char *col = (unsigned char *) mcol;
glColor4f(col[n+2] / 255.0f, col[n+1] / 255.0f, col[n] / 255.0f, col[n-1] / 255.0f);
}
- else if(mat->mode & MA_VERTEXCOL){
+ else{
+ glColor4f(0.0, 0.0, 0.0, 1.0);
+ }
+ }
+
+ if(mat->mode & MA_VERTEXCOL){
+ if(mcol){
+ unsigned char *col = (unsigned char *) mcol;
glBindAttribLocation(program, 1, "v_col");
glVertexAttrib3f(1, col[n+2] / 255.0f, col[n+1] / 255.0f, col[n] / 255.0f);
}
else{
+ glBindAttribLocation(program, 1, "v_col");
glVertexAttrib3f(1, 0.0, 0.0, 0.0);
}
}
else{
- glVertexAttrib3f(1, 0.0, 0.0, 0.0);
+ glBindAttribLocation(program, 1, "v_col");
+ glVertexAttrib3f(1, 0.0, 0.0, 0.0);
}
}
More information about the Bf-blender-cvs
mailing list