[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