[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