[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11536] branches/soc-2007-maike/source/ blender: Added group lighting for materials

Miguel Torres Lima torreslima at gmail.com
Fri Aug 10 17:28:34 CEST 2007


Revision: 11536
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11536
Author:   maike
Date:     2007-08-10 17:28:34 +0200 (Fri, 10 Aug 2007)

Log Message:
-----------
Added group lighting for materials

Modified Paths:
--------------
    branches/soc-2007-maike/source/blender/include/BIF_glsl_drawobject.h
    branches/soc-2007-maike/source/blender/include/BIF_glsl_light.h
    branches/soc-2007-maike/source/blender/src/glsl_drawobject.c
    branches/soc-2007-maike/source/blender/src/glsl_light.c

Modified: branches/soc-2007-maike/source/blender/include/BIF_glsl_drawobject.h
===================================================================
--- branches/soc-2007-maike/source/blender/include/BIF_glsl_drawobject.h	2007-08-10 14:40:04 UTC (rev 11535)
+++ branches/soc-2007-maike/source/blender/include/BIF_glsl_drawobject.h	2007-08-10 15:28:34 UTC (rev 11536)
@@ -7,6 +7,7 @@
 struct MVert;
 struct DispList;
 struct DerivedMesh;
+struct Group;
 
 /* ----------------------------------------------------------------------------- */
 
@@ -26,7 +27,7 @@
 void glsl_runtime_lamp_uniforms(struct Lamp *lamp, struct Object *obj, struct Object *lamp_obj, int num, unsigned long program);
 void glsl_runtime_lamp_uniforms(struct Lamp *lamp, struct Object *obj, struct Object *lamp_obj, int num, unsigned long program);
 void glsl_area_lamp_vectors(struct Lamp *lamp, struct Object *obj, struct Object *lamp_obj, int num, unsigned long program);
-void glsl_light_uniforms(unsigned long program, struct Object *obj);
+void glsl_light_uniforms(unsigned long program, struct Object *obj, short hasgroup, struct Group *group);
 void set_vertex_color(struct Material *mat, struct MCol *mcol, int n, unsigned long program);
 #else
 void glsl_runtime_lamp_uniforms(struct Lamp *lamp, struct Object *obj, struct Object *lamp_obj, int num, unsigned int program);
@@ -35,7 +36,7 @@
 void glsl_runtime_lamp_uniforms(struct Lamp *lamp, struct Object *obj, struct Object *lamp_obj, int num, unsigned int program);
 void glsl_runtime_lamp_uniforms(struct Lamp *lamp, struct Object *obj, struct Object *lamp_obj, int num, unsigned int program);
 void glsl_area_lamp_vectors(struct Lamp *lamp, struct Object *obj, struct Object *lamp_obj, int num, unsigned int program);
-void glsl_light_uniforms(unsigned int program, struct Object *obj);
+void glsl_light_uniforms(unsigned int program, struct Object *obj, short hasgroup, struct Group *group);
 void set_vertex_color(struct Material *mat, struct MCol *mcol, int n, unsigned int program);
 #endif
 

Modified: branches/soc-2007-maike/source/blender/include/BIF_glsl_light.h
===================================================================
--- branches/soc-2007-maike/source/blender/include/BIF_glsl_light.h	2007-08-10 14:40:04 UTC (rev 11535)
+++ branches/soc-2007-maike/source/blender/include/BIF_glsl_light.h	2007-08-10 15:28:34 UTC (rev 11536)
@@ -19,6 +19,7 @@
 struct Object;
 struct GLSL_List_;
 struct GLSL_MaterialTree_;
+struct Group;
 
 /* -------------------------------------------------------- */
 
@@ -38,3 +39,4 @@
 
 void glsl_delete_light(struct Lamp *lamp);
 
+int glsl_light_in_group(struct Object *ob, struct Group *group);

Modified: branches/soc-2007-maike/source/blender/src/glsl_drawobject.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_drawobject.c	2007-08-10 14:40:04 UTC (rev 11535)
+++ branches/soc-2007-maike/source/blender/src/glsl_drawobject.c	2007-08-10 15:28:34 UTC (rev 11536)
@@ -17,6 +17,7 @@
 #include "DNA_vec_types.h"
 #include "DNA_meta_types.h"
 #include "DNA_curve_types.h"
+#include "DNA_group_types.h"
 
 #include "BLI_arithb.h"
 
@@ -286,7 +287,7 @@
 }
 
 
-void glsl_light_uniforms(GLuint program, Object *obj)
+void glsl_light_uniforms(GLuint program, Object *obj, short hasgroup, Group *group)
 {
   GLSL_List list = glsl_get_lights();
   int i;
@@ -296,6 +297,13 @@
     Lamp *lamp = light->blen_light;
     Object *lamp_obj = light->obj;
 
+    if(group && !(glsl_light_in_group(lamp_obj, group))){
+      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:
@@ -372,7 +380,7 @@
       program = glsl_get_material_program(mat, GLSL_SHADED);
 
       glUseProgram(program->program);
-      glsl_light_uniforms(program->program, ob);
+      glsl_light_uniforms(program->program, ob, (mat->mode & MA_GROUP_NOLAY)?1:0, mat->group);
       oldmat = mat;
 
       if(mat){
@@ -559,7 +567,7 @@
       program = glsl_get_material_program(mat, GLSL_SHADED);
       glUseProgram(program->program); 
       
-      glsl_light_uniforms(program->program, ob);
+      glsl_light_uniforms(program->program, ob, (mat->mode & MA_GROUP_NOLAY)?1:0, mat->group);
       
       if(mat)
 	glsl_update_colorband_tex_uniforms(program->program, mat, 0);

Modified: branches/soc-2007-maike/source/blender/src/glsl_light.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_light.c	2007-08-10 14:40:04 UTC (rev 11535)
+++ branches/soc-2007-maike/source/blender/src/glsl_light.c	2007-08-10 15:28:34 UTC (rev 11536)
@@ -23,11 +23,13 @@
 #include "DNA_view3d_types.h"
 #include "DNA_lamp_types.h"
 #include "DNA_object_types.h"
+#include "DNA_group_types.h"
 
 #include "MEM_guardedalloc.h"
 
 #include "BLI_ghash.h"
 
+
 /* --------------------------------------------------------------- */
 
 GLSL_List lights = NULL;
@@ -231,3 +233,16 @@
 
   glsl_redo_programs();
 }
+
+
+int glsl_light_in_group(Object *ob, Group *group)
+{
+  GroupObject *go;
+
+  for(go = group->gobject.first; go; go = go->next){
+    if(go->ob == ob)
+      return 1;
+  }
+
+  return 0;
+}





More information about the Bf-blender-cvs mailing list