[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12285] branches/qdune/blender:

Brecht Van Lommel brechtvanlommel at pandora.be
Thu Oct 18 19:10:43 CEST 2007


Revision: 12285
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12285
Author:   blendix
Date:     2007-10-18 19:10:43 +0200 (Thu, 18 Oct 2007)

Log Message:
-----------

QDune Branch
============

Added support for multiple materials.

Modified Paths:
--------------
    branches/qdune/blender/extern/qdune/blender/BlenderShader.cpp
    branches/qdune/blender/source/blender/render/intern/source/qdinterface.c

Modified: branches/qdune/blender/extern/qdune/blender/BlenderShader.cpp
===================================================================
--- branches/qdune/blender/extern/qdune/blender/BlenderShader.cpp	2007-10-18 16:38:58 UTC (rev 12284)
+++ branches/qdune/blender/extern/qdune/blender/BlenderShader.cpp	2007-10-18 17:10:43 UTC (rev 12285)
@@ -42,14 +42,17 @@
 	RtVector *sticky = NULL, *stickydu = NULL, *stickydv = NULL;
 	RtFloat *stress = NULL;
 	RtVector *uv[8], *uvdu[8], *uvdv[8];
-	float du, dv;
+	float du, dv, *material;
 	char uvtoken[128];
-	int a, i, n, texco, mode, xdim, ydim;
+	int a, i, n, texco, mode, xdim, ydim, matidx;
 	ShadeInput shi;
 	ShadeResult shr;
 
-	mat = (Material*)blender_material[0];
+	material = (RtFloat*)grid->findVariable("material");
+	matidx = (material)? (int)*material: 0;
 
+	mat = (Material*)blender_material[matidx];
+
 	n = grid->get_nverts();
 	du = grid->get_du();
 	dv = grid->get_dv();

Modified: branches/qdune/blender/source/blender/render/intern/source/qdinterface.c
===================================================================
--- branches/qdune/blender/source/blender/render/intern/source/qdinterface.c	2007-10-18 16:38:58 UTC (rev 12284)
+++ branches/qdune/blender/source/blender/render/intern/source/qdinterface.c	2007-10-18 17:10:43 UTC (rev 12285)
@@ -65,6 +65,7 @@
 	float *P;
 	float *width;
 	int *nverts;
+	float *material;
 
 	int totpoint;
 	int totcurve;
@@ -125,6 +126,9 @@
 		curve->P= MEM_callocN(sizeof(float)*3*mesh->maxcurve*mesh->maxcurvepoint, "QDCurvesP");
 		curve->width= MEM_callocN(sizeof(float)*mesh->maxcurve*maxseg, "QDCurvesW");
 		curve->nverts= MEM_callocN(sizeof(int)*mesh->maxcurve, "QDCurvesNVerts");
+
+		if(object->totmaterial > 0)
+			curve->material= MEM_callocN(sizeof(float)*mesh->maxcurve, "QDPCurveMat");
 	}
 
 	RiTransformBegin();
@@ -206,6 +210,9 @@
 	}
 	else
 		*nvert= 3;
+	
+	if(ppoly->material)
+		ppoly->material[ppoly->totpoly]= face->matnr;
 
 	for(a=0; a<face->data.tottface; a++) {
 		if(!ppoly->uv[a])
@@ -288,6 +295,9 @@
 		curve->totwidth++;
 	}
 
+	if(curve->material)
+		curve->material[curve->totcurve]= cp->matnr;
+
 	curve->nverts[curve->totcurve]++;
 }
 
@@ -307,21 +317,19 @@
 	RtToken tokens[20];
 	RtPointer params[20];
 	char uvtoken[8][128];
-	int a, n= 0;
+	int a, n;
 
 	if(ppoly->totpoly) {
+		n= 0;
 		tokens[n]= "P";
 		params[n]= ppoly->P;
 		n++;
 
-#if 0
 		if(ppoly->material) {
-			/* TODO make uniform int work */
 			tokens[n]= "uniform float material";
 			params[n]= ppoly->material;
 			n++;
 		}
-#endif
 
 		if(ppoly->orco) {
 			tokens[n]= "vertex color orco";
@@ -368,13 +376,30 @@
 		MEM_freeN(ppoly->uv[a]);
 
 	if(curve->totcurve && curve->totpoint) {
-		RiCurves("cubic", curve->totcurve, curve->nverts, "nonperiodic", "P",
-			curve->P, "width", curve->width, RI_NULL);
+		n= 0;
+
+		tokens[n]= "P";
+		params[n]= curve->P;
+		n++;
+
+		tokens[n]= "width";
+		params[n]= curve->width;
+		n++;
+
+		if(curve->material) {
+			tokens[n]= "uniform float material";
+			params[n]= curve->material;
+			n++;
+		}
+
+		RiCurvesV("cubic", curve->totcurve, curve->nverts, "nonperiodic",
+			n, tokens, params);
 	}
 
 	if(curve->P) MEM_freeN(curve->P);
 	if(curve->width) MEM_freeN(curve->width);
 	if(curve->nverts) MEM_freeN(curve->nverts);
+	if(curve->material) MEM_freeN(curve->material);
 
 	RiAttributeEnd();
 	RiTransformEnd();





More information about the Bf-blender-cvs mailing list