[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