[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11642] branches/soc-2007-maike/source/ blender/src/glsl_drawobject.c: Sending tex object coords (testing)

Miguel Torres Lima torreslima at gmail.com
Fri Aug 17 17:12:58 CEST 2007


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

Log Message:
-----------
Sending tex object coords (testing)

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

Modified: branches/soc-2007-maike/source/blender/src/glsl_drawobject.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_drawobject.c	2007-08-17 14:53:01 UTC (rev 11641)
+++ branches/soc-2007-maike/source/blender/src/glsl_drawobject.c	2007-08-17 15:12:58 UTC (rev 11642)
@@ -3,6 +3,7 @@
 #endif
 
 #include <stdio.h>
+#include <GL/glew.h>
 
 #include "DNA_lamp_types.h"
 #include "DNA_material_types.h"
@@ -342,6 +343,33 @@
 }
 
 
+void send_texture_coords(Material *mat, GLuint program, Object *obj, MVert *vert, int index)
+{
+  GLSL_MaterialTree tree = BLI_ghash_lookup(matHash, mat);
+
+  if(mat && tree){
+    int matindex = tree->mat_index(tree, mat);
+    int i;
+
+    for(i = 0; i < MAX_MTEX; i++){
+      MTex *mtex = mat->mtex[i];
+
+      if(mtex && mtex->tex && mtex->tex->type){
+	char *coords = glsl_string(4, 0, "mat_", GINT, matindex, 0, "_tex_", GINT, i);
+	float vec[3] = { vert[index].co[0], vert[index].co[1], vert[index].co[2] };
+
+	MTC_Mat4MulVecfl(obj->imat, vec);
+
+	glBindAttribLocation(program, i+2, coords);
+	glVertexAttrib3f(i+2, vec[0], vec[1], vec[2]);
+
+	MEM_freeN(coords);
+      }
+    }
+  }
+}
+
+
 void glsl_draw(Base *base, int warning_recursive, int flag, unsigned int *col)
 {
   Object *ob = base->object;
@@ -415,29 +443,37 @@
     else
       tmpcol = NULL;
 
-    if(program)
+    if(program){
       set_vertex_color(mat, tmpcol, 1, program->program); 
+      send_texture_coords(mat, program->program, ob, vert, face->v1);
+    }
     else if(mat->mode & MA_SHLESS)
       set_vertex_color(mat, tmpcol, 1, 0); 
     create_vertex(ob, vert, face->v1, face->flag, &tangent[0], (mat->mode & MA_TANGENT_V)?1:0, 0);
 
-    if(program)
+    if(program){
       set_vertex_color(mat, tmpcol, 5, program->program); 
+      send_texture_coords(mat, program->program, ob, vert, face->v2);
+    }
     else if(mat->mode & MA_SHLESS)
       set_vertex_color(mat, tmpcol, 5, 0); 
     create_vertex(ob, vert, face->v2, face->flag, &tangent[0], (mat->mode & MA_TANGENT_V)?1:0, 1);
 
-    if(program)
+    if(program){
       set_vertex_color(mat, tmpcol, 9, program->program); 
+      send_texture_coords(mat, program->program, ob, vert, face->v3);
+    }
     else if(mat->mode & MA_SHLESS)
-      set_vertex_color(mat, tmpcol, 9, 0); 
+      set_vertex_color(mat, tmpcol, 9, 0);
     create_vertex(ob, vert, face->v3, face->flag, &tangent[0], (mat->mode & MA_TANGENT_V)?1:0, 2);
     
     if(face->v4){
-      if(program)
+      if(program){
 	set_vertex_color(mat, tmpcol, 13, program->program); 
+	send_texture_coords(mat, program->program, ob, vert, face->v4);
+      }
       else if(mat->mode & MA_SHLESS)
-	set_vertex_color(mat, tmpcol, 13, 0);  
+	set_vertex_color(mat, tmpcol, 13, 0);
       create_vertex(ob, vert, face->v4, face->flag, &tangent[0], (mat->mode & MA_TANGENT_V)?1:0, 3);
     }
     





More information about the Bf-blender-cvs mailing list