[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11766] branches/soc-2007-maike/source/ blender/src: Added object restrict renderability

Miguel Torres Lima torreslima at gmail.com
Tue Aug 21 17:36:41 CEST 2007


Revision: 11766
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11766
Author:   maike
Date:     2007-08-21 17:36:40 +0200 (Tue, 21 Aug 2007)

Log Message:
-----------
Added object restrict renderability

Modified Paths:
--------------
    branches/soc-2007-maike/source/blender/src/glsl_drawobject.c
    branches/soc-2007-maike/source/blender/src/glsl_material_node.c
    branches/soc-2007-maike/source/blender/src/glutil.c

Modified: branches/soc-2007-maike/source/blender/src/glsl_drawobject.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_drawobject.c	2007-08-21 15:12:09 UTC (rev 11765)
+++ branches/soc-2007-maike/source/blender/src/glsl_drawobject.c	2007-08-21 15:36:40 UTC (rev 11766)
@@ -302,9 +302,16 @@
       char *layer = glsl_string(3, 0, "lights[", GINT, i, 0, "].layer");
       glUniform1f(glsl_uniform_location(program, layer), 0.0);
       MEM_freeN(layer);
-       continue;
+      continue;
     }
 
+    if(lamp_obj->restrictflag & OB_RESTRICT_RENDER){
+      char *layer = glsl_string(3, 0, "lights[", GINT, i, 0, "].layer");
+      glUniform1f(glsl_uniform_location(program, layer), 0.0);
+      MEM_freeN(layer);
+      continue;
+    }
+
     switch(lamp->type)
       {
       case LA_LOCAL:
@@ -386,6 +393,8 @@
   Material *oldmat = NULL;
   GLSL_Program program = NULL;
   
+  if(ob->restrictflag & OB_RESTRICT_RENDER) return;
+
   if((base->flag & SELECT || ob == OBACT) && (G.vd->flag&V3D_SELECT_OUTLINE))
     glsl_draw_outline(ob, dm);
 
@@ -510,6 +519,8 @@
   DispList *dl;
   ListBase *lb;
 
+  if(ob->restrictflag & OB_RESTRICT_RENDER) return;
+  
   switch(ob->type)
     {
     case OB_CURVE:
@@ -565,6 +576,7 @@
   MetaElem *ml;
   float imat[4][4], tmat[4][4];
 
+  if(ob->restrictflag & OB_RESTRICT_RENDER) return;
 
   lb = &ob->disp;
   if(lb->first == NULL) makeDispListMBall(ob);
@@ -618,6 +630,7 @@
   
   if(mat && mat->mode & MA_SHLESS){
     glUseProgram(0);
+    glColor4f(mat->r, mat->g, mat->b, mat->alpha);
   } 
   else{
     if(mat && mat->mode & MA_TANGENT_V){

Modified: branches/soc-2007-maike/source/blender/src/glsl_material_node.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_material_node.c	2007-08-21 15:12:09 UTC (rev 11765)
+++ branches/soc-2007-maike/source/blender/src/glsl_material_node.c	2007-08-21 15:36:40 UTC (rev 11766)
@@ -103,7 +103,39 @@
   if(!(func_init = glsl_get_func("material.gsl")))
     return NULL;
 
-  if(!(func_end = glsl_get_func("material_return.gsl"))){
+  if(mat->mode & MA_SHLESS){
+    code = glsl_string(9,
+		       0, "\n#define MATERIAL_ID ", GINT, num, 0, "\n",
+		       0, "\n#define MATERIAL_FUNC material_", GINT, num, 0, "\n",
+		       GFREE, func_init,
+		       0, "\nreturn(diff_color + vert_color);\n}\n",
+		       0, "#undef MATERIAL_ID\n#undef MATERIAL_FUNC\n");
+
+    return code;
+  }
+  
+  if(!glsl_get_num_lights()){
+    code = glsl_string(9,
+		       0, "\n#define MATERIAL_ID ", GINT, num, 0, "\n",
+		       0, "\n#define MATERIAL_FUNC material_", GINT, num, 0, "\n",
+		       GFREE, func_init,
+		       0, "\nreturn(0.0, 0.0, 0.0);\n}\n",
+		       0, "#undef MATERIAL_ID\n#undef MATERIAL_FUNC\n");
+
+    return code;
+  }
+  
+  if(mat->mode & MA_RAMP_COL && mat->rampin_col == MA_RAMP_IN_RESULT){
+    func_end = glsl_get_func("material_return_cb_diff.gsl");
+  }
+  else if(mat->mode & MA_RAMP_SPEC && mat->rampin_spec == MA_RAMP_IN_RESULT){
+    func_end = glsl_get_func("material_return_cb_spec.gsl");
+  }
+  else{
+    func_end = glsl_get_func("material_return.gsl");
+  }
+
+  if(!func_end){
     MEM_freeN(func_init);
     return NULL;
   }
@@ -124,12 +156,6 @@
     }
   }
 
-  if(mat->mode & MA_SHLESS){
-    func_init = glsl_string(2,
-			    0, "#define IS_SHADELESS 1\n",
-			    GFREE, func_init);
-  }
-
   if(mat->mode & MA_RAMP_COL){
     diff_ramp = glsl_colorband_node_defines(mat, blend, num, 0);
     func_init = glsl_string(2, GFREE, func_init, GFREE, diff_ramp);
@@ -142,11 +168,11 @@
 
   material_lights = glsl_material_lights(mat, diffuse, specular, lights);
 
-  code = glsl_string(13,
+  code = glsl_string(11,
 		     0, "\n#define MATERIAL_ID ", GINT, num, 0, "\n",
 		     0, "\n#define MATERIAL_FUNC material_", GINT, num, 0, "\n",
 		     GFREE, func_init,
-		     0, "\n#define LIGHT_CALCULATIONS ", GINT, glsl_get_num_lights()?1:0, 0, "\n",
+		     0, "\n",
 		     GFREE, material_lights,
 		     GFREE, func_end,
 		     0, "\n#undef MATERIAL_ID\n#undef MATERIAL_FUNC\n");

Modified: branches/soc-2007-maike/source/blender/src/glutil.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glutil.c	2007-08-21 15:12:09 UTC (rev 11765)
+++ branches/soc-2007-maike/source/blender/src/glutil.c	2007-08-21 15:36:40 UTC (rev 11766)
@@ -832,6 +832,18 @@
       printf("\nGLSL deactivated.\n");
     }
   }
+  else{
+    if(G.vd && G.vd->drawtype == OB_GLSL){
+      if(drawtype == OB_GLSL){
+	glsl_free_all();
+	G.vd->drawtype = OB_SHADED;
+	drawtype = OB_SHADED;
+      }
+      else{
+	G.vd->drawtype = drawtype;
+      }
+    }
+  }
 }
 
 





More information about the Bf-blender-cvs mailing list