[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11596] branches/soc-2007-maike/source/ blender: Added entry points for glsl texturing code concatenation

Miguel Torres Lima torreslima at gmail.com
Tue Aug 14 18:10:01 CEST 2007


Revision: 11596
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11596
Author:   maike
Date:     2007-08-14 18:10:01 +0200 (Tue, 14 Aug 2007)

Log Message:
-----------
Added entry points for glsl texturing code concatenation

Modified Paths:
--------------
    branches/soc-2007-maike/source/blender/include/BIF_glsl_material_node.h
    branches/soc-2007-maike/source/blender/src/glsl_material_node.c

Modified: branches/soc-2007-maike/source/blender/include/BIF_glsl_material_node.h
===================================================================
--- branches/soc-2007-maike/source/blender/include/BIF_glsl_material_node.h	2007-08-14 16:05:33 UTC (rev 11595)
+++ branches/soc-2007-maike/source/blender/include/BIF_glsl_material_node.h	2007-08-14 16:10:01 UTC (rev 11596)
@@ -3,7 +3,7 @@
 
 /* ---------------------------------------------------------------------------------------------------------- */
 
-struct GLSL_NodeCode_ *glsl_material_node(struct Material *mat, int *diffuse, int *specular, int *lights, int *blend, int num);
+struct GLSL_NodeCode_ *glsl_material_node(struct Material *mat, int *diffuse, int *specular, int *lights, int *blend, int *tex_type, int *tex_blend, int *tex_blendval, int num);
 char *glsl_material_node_uniforms(int num);
 char *glsl_material_node_func(struct Material *mat, int *diffuse, int *specular, int *lights, int *blend, int num);
 char *glsl_material_lights(struct Material *mat, int *diff, int *spec, int *lights);

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-14 16:05:33 UTC (rev 11595)
+++ branches/soc-2007-maike/source/blender/src/glsl_material_node.c	2007-08-14 16:10:01 UTC (rev 11596)
@@ -25,6 +25,7 @@
 #include "DNA_material_types.h"
 #include "DNA_lamp_types.h"
 #include "DNA_userdef_types.h"
+#include "DNA_texture_types.h"
 
 #include "MEM_guardedalloc.h"
 
@@ -33,14 +34,23 @@
 
 /* ----------------------------------------------------------------------------- */
 
-GLSL_NodeCode glsl_material_node(Material *mat, int *diffuse, int *specular, int *lights, int *blend, int num)
+GLSL_NodeCode glsl_material_node(Material *mat, int *diffuse, int *specular, int *lights, int *blend, int *tex_type, int *tex_blend, int *tex_blendval, int num)
 {
   GLSL_NodeCode node_code = glsl_init_nodecode();
+  GLSL_NodeCode texture_code = glsl_texture_fragment_code(mat, num, tex_type, tex_blend, tex_blendval);
   char *diff_ramp, *spec_ramp;
 
   node_code->uniform_code = glsl_material_node_uniforms(num);
   node_code->node_code = glsl_material_node_func(mat, diffuse, specular, lights, blend, num);
 
+  node_code->uniform_code = glsl_string(2,
+					GFREE, node_code->uniform_code,
+					GFREE, texture_code->uniform_code);
+
+  node_code->node_code = glsl_string(2, 
+				     GFREE, texture_code->node_code,
+				     GFREE, node_code->node_code);
+
   if(mat->mode & MA_RAMP_COL){
     diff_ramp = glsl_colorband_node_uniforms(num, 0);
     node_code->uniform_code = glsl_string(2, GFREE, node_code->uniform_code, GFREE, diff_ramp);
@@ -50,6 +60,8 @@
     node_code->uniform_code = glsl_string(2, GFREE, node_code->uniform_code, GFREE, spec_ramp);
   }
 
+  MEM_freeN(texture_code);
+
   return node_code;
 }
 
@@ -86,7 +98,8 @@
   char *code = NULL;
   char *material_lights = NULL;
   char *diff_ramp, *spec_ramp;
-
+  int i;
+  
   if(!(func_init = glsl_get_func("material.gsl")))
     return NULL;
 
@@ -95,6 +108,28 @@
     return NULL;
   }
 
+  for(i = 0; i < MAX_MTEX; i++){
+    if(mat->mtex[i]){
+      MTex *mtex = mat->mtex[i];
+
+      if(mtex->tex && mtex->tex->type){
+	func_init = glsl_string(12,
+				GFREE, func_init,
+				0, "#define TEX_ID ", GINT, i, 0, "\n",
+				0, "#define TEX_FUNC material_", GINT, num, 0, "_tex_", GINT, i, 0, "\n",
+				0, "TEX_FUNC(diff_color, spec_color, norm, alpha, diff1, spec1, amb_fac, emit, hard);\n",
+				0, "#undef TEX_ID\n",
+				0, "#undef TEX_FUNC\n");
+      }
+    }
+  }
+
+  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);





More information about the Bf-blender-cvs mailing list