first commit with hours and hours of comment translation for render code...

This commit is contained in:
2003-04-27 14:05:41 +00:00
parent 0b2b5dbfb9
commit 1ab53ee998
8 changed files with 322 additions and 394 deletions

View File

@@ -81,7 +81,7 @@ RE_BasicShadowBuffer::~RE_BasicShadowBuffer(void)
void RE_BasicShadowBuffer::lrectreadRectz(int x1, int y1, void RE_BasicShadowBuffer::lrectreadRectz(int x1, int y1,
int x2, int y2, int x2, int y2,
char *r1) /* leest deel uit rectz in r1 */ char *r1) /* reads part from rectz in r1 */
{ {
unsigned int len4, *rz; unsigned int len4, *rz;
@@ -149,14 +149,14 @@ void RE_BasicShadowBuffer::importScene(LampRen *lar)
panophi = getPanoPhi(); panophi = getPanoPhi();
/* viewvars onthouden */ /* store view vars */
temprx= R.rectx; tempry= R.recty; temprx= R.rectx; tempry= R.recty;
R.rectx= R.recty= shb->size; R.rectx= R.recty= shb->size;
shb->jit= give_jitter_tab(shb->samp); shb->jit= give_jitter_tab(shb->samp);
/* matrices en window: in R.winmat komt transformatie /* matrices and window: in R.winmat the transformation is being put,
van obsview naar lampview, inclusief lampwinmat */ transforming from observer view to lamp view, including lamp window matrix */
wsize= shb->pixsize*(shb->size/2.0); wsize= shb->pixsize*(shb->size/2.0);
@@ -167,12 +167,12 @@ void RE_BasicShadowBuffer::importScene(LampRen *lar)
/* temp, will be restored */ /* temp, will be restored */
MTC_Mat4SwapMat4(shb->persmat, R.winmat); MTC_Mat4SwapMat4(shb->persmat, R.winmat);
/* zbufferen */ /* zbuffering */
if(R.rectz) MEM_freeN(R.rectz); if(R.rectz) MEM_freeN(R.rectz);
R.rectz= (unsigned int *)MEM_mallocN(sizeof(int)*shb->size*shb->size,"makeshadbuf"); R.rectz= (unsigned int *)MEM_mallocN(sizeof(int)*shb->size*shb->size,"makeshadbuf");
rcline= (char*) MEM_mallocN(256*4+sizeof(int),"makeshadbuf2"); rcline= (char*) MEM_mallocN(256*4+sizeof(int),"makeshadbuf2");
/* onthouden: panorama rot */ /* store: panorama rot */
temp= panophi; temp= panophi;
panophi= 0.0; panophi= 0.0;
pushTempPanoPhi(0.0); pushTempPanoPhi(0.0);
@@ -185,23 +185,9 @@ void RE_BasicShadowBuffer::importScene(LampRen *lar)
zbuffershad(lar); zbuffershad(lar);
/* alle pixels 1 x ingevuld verwijderen (oneven) */
/* probleem hierbij kan geven dat er abrupte overgangen van zacht gebied
* naar geen zacht gebied is: bijv als eronder een klein vlakje zit
* DAAROM ER WEER UIT
* ook vanwege shadowhalo!
*
a= shb->size*shb->size;
rz= R.rectz;
while(a--) {
if(*rz & 1) *rz= 0x7FFFFFFF;
rz++;
}
*/
square= lar->mode & LA_SQUARE; square= lar->mode & LA_SQUARE;
/* Z tiles aanmaken: dit systeem is 24 bits!!! */ /* create Z tiles (for compression): this system is 24 bits!!! */
ztile= shb->zbuf; ztile= shb->zbuf;
ctile= shb->cbuf; ctile= shb->cbuf;
@@ -211,7 +197,7 @@ void RE_BasicShadowBuffer::importScene(LampRen *lar)
for(x=0; x<shb->size; x+=16) { for(x=0; x<shb->size; x+=16) {
/* ligt rechthoek binnen spotbundel? */ /* is tile within spotbundle? */
a= shb->size/2; a= shb->size/2;
if(x< a) minx= x+15-a; if(x< a) minx= x+15-a;
else minx= x-a; else minx= x-a;
@@ -232,13 +218,13 @@ void RE_BasicShadowBuffer::importScene(LampRen *lar)
if( (*rz1 & 0xFFFFFF00) != verg) break; if( (*rz1 & 0xFFFFFF00) != verg) break;
} }
} }
if(a==256) { /* compleet leeg vakje */ if(a==256) { /* complete empty tile */
*ctile= 0; *ctile= 0;
*ztile= *(rz1-1); *ztile= *(rz1-1);
} }
else { else {
/* ACOMP enz. zijn defined L/B endian */ /* ACOMP etc. are defined to work L/B endian */
rc= rcline; rc= rcline;
rz1= (int *)rcline; rz1= (int *)rcline;
@@ -252,7 +238,7 @@ void RE_BasicShadowBuffer::importScene(LampRen *lar)
if(byt1==0) break; if(byt1==0) break;
} }
if(byt1 && byt2) { /* alleen byte opslaan */ if(byt1 && byt2) { /* only store byte */
*ctile= 1; *ctile= 1;
*ztile= (unsigned long)MEM_mallocN(256+4, "tile1"); *ztile= (unsigned long)MEM_mallocN(256+4, "tile1");
rz= (int *)*ztile; rz= (int *)*ztile;
@@ -262,7 +248,7 @@ void RE_BasicShadowBuffer::importScene(LampRen *lar)
rc= rcline; rc= rcline;
for(a=0; a<256; a++, zt++, rc+=4) *zt= rc[GCOMP]; for(a=0; a<256; a++, zt++, rc+=4) *zt= rc[GCOMP];
} }
else if(byt1) { /* short opslaan */ else if(byt1) { /* store short */
*ctile= 2; *ctile= 2;
*ztile= (unsigned long)MEM_mallocN(2*256+4,"Tile2"); *ztile= (unsigned long)MEM_mallocN(2*256+4,"Tile2");
rz= (int *)*ztile; rz= (int *)*ztile;
@@ -275,7 +261,7 @@ void RE_BasicShadowBuffer::importScene(LampRen *lar)
zt[1]= rc[GCOMP]; zt[1]= rc[GCOMP];
} }
} }
else { /* triple opslaan */ else { /* store triple */
*ctile= 3; *ctile= 3;
*ztile= (unsigned long)MEM_mallocN(3*256,"Tile3"); *ztile= (unsigned long)MEM_mallocN(3*256,"Tile3");
@@ -304,7 +290,7 @@ void RE_BasicShadowBuffer::importScene(LampRen *lar)
int RE_BasicShadowBuffer::firstreadshadbuf(struct ShadBuf *shb, int xs, int ys, int nr) int RE_BasicShadowBuffer::firstreadshadbuf(struct ShadBuf *shb, int xs, int ys, int nr)
{ {
/* return 1 als volledig gecomprimeerde shadbuftile && z==const */ /* return a 1 if fully compressed shadbuf-tile && z==const */
static int *rz; static int *rz;
int ofs; int ofs;
char *ct; char *ct;
@@ -313,7 +299,7 @@ int RE_BasicShadowBuffer::firstreadshadbuf(struct ShadBuf *shb, int xs, int ys,
if(xs<0) xs= 0; else if(xs>=shb->size) xs= shb->size-1; if(xs<0) xs= 0; else if(xs>=shb->size) xs= shb->size-1;
if(ys<0) ys= 0; else if(ys>=shb->size) ys= shb->size-1; if(ys<0) ys= 0; else if(ys>=shb->size) ys= shb->size-1;
/* z berekenen */ /* z calc */
ofs= (ys>>4)*(shb->size>>4) + (xs>>4); ofs= (ys>>4)*(shb->size>>4) + (xs>>4);
ct= shb->cbuf+ofs; ct= shb->cbuf+ofs;
if(*ct==0) { if(*ct==0) {
@@ -330,14 +316,14 @@ int RE_BasicShadowBuffer::firstreadshadbuf(struct ShadBuf *shb, int xs, int ys,
} }
float RE_BasicShadowBuffer::readshadowbuf(struct ShadBuf *shb, float RE_BasicShadowBuffer::readshadowbuf(struct ShadBuf *shb,
int xs, int ys, int zs) /* return 1.0 : volledig licht */ int xs, int ys, int zs) /* return 1.0 : fully in light */
{ {
float temp; float temp;
int *rz, ofs; int *rz, ofs;
int zsamp; int zsamp;
char *ct, *cz; char *ct, *cz;
/* simpleclip */ /* simple clip */
/* if(xs<0 || ys<0) return 1.0; */ /* if(xs<0 || ys<0) return 1.0; */
/* if(xs>=shb->size || ys>=shb->size) return 1.0; */ /* if(xs>=shb->size || ys>=shb->size) return 1.0; */
@@ -345,7 +331,7 @@ float RE_BasicShadowBuffer::readshadowbuf(struct ShadBuf *shb,
if(xs<0) xs= 0; else if(xs>=shb->size) xs= shb->size-1; if(xs<0) xs= 0; else if(xs>=shb->size) xs= shb->size-1;
if(ys<0) ys= 0; else if(ys>=shb->size) ys= shb->size-1; if(ys<0) ys= 0; else if(ys>=shb->size) ys= shb->size-1;
/* z berekenen */ /* z calc */
ofs= (ys>>4)*(shb->size>>4) + (xs>>4); ofs= (ys>>4)*(shb->size>>4) + (xs>>4);
ct= shb->cbuf+ofs; ct= shb->cbuf+ofs;
rz= *( (int **)(shb->zbuf+ofs) ); rz= *( (int **)(shb->zbuf+ofs) );
@@ -376,16 +362,14 @@ float RE_BasicShadowBuffer::readshadowbuf(struct ShadBuf *shb,
} }
else { else {
/* got warning on this from alpha .... */ /* got warning on this from DEC alpha (64 bits).... */
/* but it's working code! (ton) */ /* but it's working code! (ton) */
zsamp= (int) rz; zsamp= (int) rz;
} }
/* if(zsamp >= 0x7FFFFE00) return 1.0; */ /* geen schaduw als op oneindig wordt gesampeld*/ if(zsamp > zs) return 1.0; /* absolute no shadow */
else if( zsamp < zs-bias) return 0.0 ; /* absolute in shadow */
if(zsamp > zs) return 1.0; /* absoluut geen schaduw */ else { /* soft area */
else if( zsamp < zs-bias) return 0.0 ; /* absoluut wel schaduw */
else { /* zacht gebied */
temp= ( (float)(zs- zsamp) )/(float)bias; temp= ( (float)(zs- zsamp) )/(float)bias;
return 1.0 - temp*temp; return 1.0 - temp*temp;
@@ -396,7 +380,7 @@ float RE_BasicShadowBuffer::readshadowbuf(struct ShadBuf *shb,
void RE_BasicShadowBuffer::readShadowValue(struct ShadBuf *shb, void RE_BasicShadowBuffer::readShadowValue(struct ShadBuf *shb,
float inp, float inp,
float * shadres) /* return 1.0: geen schaduw */ float * shadres) /* return 1.0: no shadow */
{ {
float fac, co[4], dx[3], dy[3], aantal=0; float fac, co[4], dx[3], dy[3], aantal=0;
float xs1,ys1, siz, *j, xres, yres; float xs1,ys1, siz, *j, xres, yres;
@@ -411,14 +395,12 @@ void RE_BasicShadowBuffer::readShadowValue(struct ShadBuf *shb,
return; return;
#endif #endif
/* if(inp <= 0.0) return 1.0; */ /* rotate renderco en osaco */
/* renderco en osaco roteren */
siz= 0.5*(float)shb->size; siz= 0.5*(float)shb->size;
VECCOPY(co, R.co); VECCOPY(co, R.co);
co[3]= 1.0; co[3]= 1.0;
MTC_Mat4MulVec4fl(shb->persmat, co); /* rationele hom co */ MTC_Mat4MulVec4fl(shb->persmat, co); /* rational homogenic co */
xs1= siz*(1.0+co[0]/co[3]); xs1= siz*(1.0+co[0]/co[3]);
ys1= siz*(1.0+co[1]/co[3]); ys1= siz*(1.0+co[1]/co[3]);
@@ -442,7 +424,7 @@ void RE_BasicShadowBuffer::readShadowValue(struct ShadBuf *shb,
zs = (int) (((float)0x7FFFFFFF)*fac); zs = (int) (((float)0x7FFFFFFF)*fac);
/* num*num samples nemen, gebied met fac vergroten */ /* take num*num samples, increase area with fac */
num= shb->samp*shb->samp; num= shb->samp*shb->samp;
fac= shb->soft; fac= shb->soft;
@@ -461,7 +443,7 @@ void RE_BasicShadowBuffer::readShadowValue(struct ShadBuf *shb,
co[1]= R.co[1]+O.dxco[1]; co[1]= R.co[1]+O.dxco[1];
co[2]= R.co[2]+O.dxco[2]; co[2]= R.co[2]+O.dxco[2];
co[3]= 1.0; co[3]= 1.0;
MTC_Mat4MulVec4fl(shb->persmat,co); /* rationele hom co */ MTC_Mat4MulVec4fl(shb->persmat,co); /* rational hom co */
dx[0]= xs1- siz*(1.0+co[0]/co[3]); dx[0]= xs1- siz*(1.0+co[0]/co[3]);
dx[1]= ys1- siz*(1.0+co[1]/co[3]); dx[1]= ys1- siz*(1.0+co[1]/co[3]);
@@ -469,7 +451,7 @@ void RE_BasicShadowBuffer::readShadowValue(struct ShadBuf *shb,
co[1]= R.co[1]+O.dyco[1]; co[1]= R.co[1]+O.dyco[1];
co[2]= R.co[2]+O.dyco[2]; co[2]= R.co[2]+O.dyco[2];
co[3]= 1.0; co[3]= 1.0;
MTC_Mat4MulVec4fl(shb->persmat,co); /* rationele hom co */ MTC_Mat4MulVec4fl(shb->persmat,co); /* rational hom co */
dy[0]= xs1- siz*(1.0+co[0]/co[3]); dy[0]= xs1- siz*(1.0+co[0]/co[3]);
dy[1]= ys1- siz*(1.0+co[1]/co[3]); dy[1]= ys1- siz*(1.0+co[1]/co[3]);
@@ -502,7 +484,7 @@ void RE_BasicShadowBuffer::readShadowValue(struct ShadBuf *shb,
} }
for(a=num;a>0;a--) { for(a=num;a>0;a--) {
/* i.p.v. jit ook met random geprobeerd: lelijk! */ /* instead of jit i tried random: ugly! */
xs= (int) (xs1 + xres*j[0]); xs= (int) (xs1 + xres*j[0]);
ys= (int) (ys1 + yres*j[1]); ys= (int) (ys1 + yres*j[1]);
j+=2; j+=2;
@@ -531,7 +513,7 @@ float RE_BasicShadowBuffer::readshadowbuf_halo(struct ShadBuf *shb, int xs, int
if(xs<0 || ys<0) return 0.0; if(xs<0 || ys<0) return 0.0;
if(xs>=shb->size || ys>=shb->size) return 0.0; if(xs>=shb->size || ys>=shb->size) return 0.0;
/* z berekenen */ /* z calc */
ofs= (ys>>4)*(shb->size>>4) + (xs>>4); ofs= (ys>>4)*(shb->size>>4) + (xs>>4);
ct= shb->cbuf+ofs; ct= shb->cbuf+ofs;
rz= *( (int **)(shb->zbuf+ofs) ); rz= *( (int **)(shb->zbuf+ofs) );
@@ -568,21 +550,21 @@ float RE_BasicShadowBuffer::readshadowbuf_halo(struct ShadBuf *shb, int xs, int
zsamp= (int) rz; zsamp= (int) rz;
} }
/* geen schaduw als op oneindig wordt gesampeld*/ /* NO schadow when sampled at 'eternal' distance */
if(zsamp >= 0x7FFFFE00) return 1.0; if(zsamp >= 0x7FFFFE00) return 1.0;
if(zsamp > zs) return 1.0; /* absoluut geen schaduw */ if(zsamp > zs) return 1.0; /* absolute no shadww */
else { else {
/* bias is negative, so the (zs-bias) can be beyond 0x7fffffff */ /* bias is negative, so the (zs-bias) can be beyond 0x7fffffff */
zbias= 0x7fffffff - zs; zbias= 0x7fffffff - zs;
if(zbias > -bias) { if(zbias > -bias) {
if( zsamp < zs-bias) return 0.0 ; /* absoluut wel schaduw */ if( zsamp < zs-bias) return 0.0 ; /* absolute in shadow */
} }
else return 0.0 ; /* absoluut wel schaduw */ else return 0.0 ; /* absolute shadow */
} }
/* zacht gebied */ /* soft area */
temp= ( (float)(zs- zsamp) )/(float)bias; temp= ( (float)(zs- zsamp) )/(float)bias;
return 1.0 - temp*temp; return 1.0 - temp*temp;
@@ -608,7 +590,7 @@ float RE_BasicShadowBuffer::shadow_halo(LampRen *lar, float *p1, float *p2)
co[1]= p1[1]; co[1]= p1[1];
co[2]= p1[2]/lar->sh_zfac; co[2]= p1[2]/lar->sh_zfac;
co[3]= 1.0; co[3]= 1.0;
MTC_Mat4MulVec4fl(shb->winmat, co); /* rationele hom co */ MTC_Mat4MulVec4fl(shb->winmat, co); /* rational hom co */
xf1= siz*(1.0+co[0]/co[3]); xf1= siz*(1.0+co[0]/co[3]);
yf1= siz*(1.0+co[1]/co[3]); yf1= siz*(1.0+co[1]/co[3]);
zf1= (co[2]/co[3]); zf1= (co[2]/co[3]);
@@ -618,12 +600,12 @@ float RE_BasicShadowBuffer::shadow_halo(LampRen *lar, float *p1, float *p2)
co[1]= p2[1]; co[1]= p2[1];
co[2]= p2[2]/lar->sh_zfac; co[2]= p2[2]/lar->sh_zfac;
co[3]= 1.0; co[3]= 1.0;
MTC_Mat4MulVec4fl(shb->winmat, co); /* rationele hom co */ MTC_Mat4MulVec4fl(shb->winmat, co); /* rational hom co */
xf2= siz*(1.0+co[0]/co[3]); xf2= siz*(1.0+co[0]/co[3]);
yf2= siz*(1.0+co[1]/co[3]); yf2= siz*(1.0+co[1]/co[3]);
zf2= (co[2]/co[3]); zf2= (co[2]/co[3]);
/* de 2dda */ /* the 2dda (a pixel line formula) */
xs1= (int)xf1; xs1= (int)xf1;
ys1= (int)yf1; ys1= (int)yf1;
@@ -710,28 +692,3 @@ float RE_BasicShadowBuffer::shadow_halo(LampRen *lar, float *p1, float *p2)
} }
/* sampelen met filter
xstart= xs-1;
ystart= ys-1;
if(xstart<0) xstart= 0;
if(ystart<0) ystart= 0;
xend= xstart+2;
yend= ystart+2;
if(xend>=shb->size) { xstart= shb->size-3; xend= shb->size-1;}
if(yend>=shb->size) { ystart= shb->size-3; yend= shb->size-1;}
fid= filt3;
for(ys=ystart;ys<=yend;ys++) {
rz= shb->buf+ ys*shb->size+ xstart;
for(xs= xstart;xs<=xend;xs++,rz++) {
if( *rz+0x100000<zs) aantal+= *fid;
fid++;
}
}
return 1.0-((float)aantal)/16.0;
*/

View File

@@ -367,7 +367,7 @@ void renderEdges(char *colourRect)
} }
} }
/* alle getallen in zbuffer 3 naar rechts shiften */ /* shift values in zbuffer 3 to the right */
rz = edgeBuffer; rz = edgeBuffer;
if(rz==0) return; if(rz==0) return;
@@ -498,13 +498,13 @@ void renderEdges(char *colourRect)
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */
void addEdgeOver(char *doel, char *bron) /* telt bron bij doel */ void addEdgeOver(char *doel, char *bron) /* adds bron (source) to doel (goal) */
{ {
float c; float c;
int mul; int mul;
if( bron[3] == 0) return; if( bron[3] == 0) return;
if( bron[3] == 255) { /* is getest, scheelt */ if( bron[3] == 255) { /* has been tested, saves a lot */
*((unsigned int *)doel)= *((unsigned int *)bron); *((unsigned int *)doel)= *((unsigned int *)bron);
return; return;
} }
@@ -659,7 +659,7 @@ void fillEdgeRenderFace(float *v1, float *v2, float *v3)
else { minv=v3; midv=v2; maxv=v1;} else { minv=v3; midv=v2; maxv=v1;}
} }
if(minv[1] == maxv[1]) return; /* beveiliging 'nul' grote vlakken */ if(minv[1] == maxv[1]) return; /* security, for 'zero' size faces */
my0 = ceil(minv[1]); my0 = ceil(minv[1]);
my2 = floor(maxv[1]); my2 = floor(maxv[1]);
@@ -670,7 +670,7 @@ void fillEdgeRenderFace(float *v1, float *v2, float *v3)
if(my0<Aminy) my0= Aminy; if(my0<Aminy) my0= Aminy;
/* EDGES : DE LANGSTE */ /* EDGES : THE LONGEST */
xx1= maxv[1]-minv[1]; xx1= maxv[1]-minv[1];
if(xx1>2.0/65536.0) { if(xx1>2.0/65536.0) {
z0= (maxv[0]-minv[0])/xx1; z0= (maxv[0]-minv[0])/xx1;
@@ -685,7 +685,7 @@ void fillEdgeRenderFace(float *v1, float *v2, float *v3)
dx0= 0; dx0= 0;
xs0= 65536.0*(MIN2(minv[0],maxv[0])); xs0= 65536.0*(MIN2(minv[0],maxv[0]));
} }
/* EDGES : DE BOVENSTE */ /* EDGES : THE TOP ONE */
xx1= maxv[1]-midv[1]; xx1= maxv[1]-midv[1];
if(xx1>2.0/65536.0) { if(xx1>2.0/65536.0) {
z0= (maxv[0]-midv[0])/xx1; z0= (maxv[0]-midv[0])/xx1;
@@ -700,7 +700,7 @@ void fillEdgeRenderFace(float *v1, float *v2, float *v3)
dx1= 0; dx1= 0;
xs1= 65536.0*(MIN2(midv[0],maxv[0])); xs1= 65536.0*(MIN2(midv[0],maxv[0]));
} }
/* EDGES : DE ONDERSTE */ /* EDGES : THE BOTTOM ONE */
xx1= midv[1]-minv[1]; xx1= midv[1]-minv[1];
if(xx1>2.0/65536.0) { if(xx1>2.0/65536.0) {
z0= (midv[0]-minv[0])/xx1; z0= (midv[0]-minv[0])/xx1;
@@ -725,9 +725,9 @@ void fillEdgeRenderFace(float *v1, float *v2, float *v3)
if(vec0[2]==0.0) return; if(vec0[2]==0.0) return;
if(midv[1] == maxv[1]) omsl= my2; if(midv[1] == maxv[1]) omsl= my2;
if(omsl < Aminy) omsl= Aminy-1; /* dan neemt ie de eerste lus helemaal */ if(omsl < Aminy) omsl= Aminy-1; /* that way it does the first loop entirely */
while (my2 > Amaxy) { /* my2 kan groter zijn */ while (my2 > Amaxy) { /* my2 can really be larger */
xs0+=dx0; xs0+=dx0;
if (my2<=omsl) { if (my2<=omsl) {
xs2+= dx2; xs2+= dx2;
@@ -852,7 +852,7 @@ void fillEdgeRenderEdge(float *vec1, float *vec2)
if(fabs(dx) > fabs(dy)) { if(fabs(dx) > fabs(dy)) {
/* alle lijnen van links naar rechts */ /* alle lines from left to right */
if(vec1[0]<vec2[0]) { if(vec1[0]<vec2[0]) {
VECCOPY(v1, vec1); VECCOPY(v1, vec1);
VECCOPY(v2, vec2); VECCOPY(v2, vec2);
@@ -900,7 +900,7 @@ void fillEdgeRenderEdge(float *vec1, float *vec2)
} }
else { else {
/* alle lijnen van onder naar boven */ /* all lines from top to bottom */
if(vec1[1]<vec2[1]) { if(vec1[1]<vec2[1]) {
VECCOPY(v1, vec1); VECCOPY(v1, vec1);
VECCOPY(v2, vec2); VECCOPY(v2, vec2);

View File

@@ -301,7 +301,7 @@ void env_rotate_scene(float mat[][4], int mode)
xn= ver->n[0]; xn= ver->n[0];
yn= ver->n[1]; yn= ver->n[1];
zn= ver->n[2]; zn= ver->n[2];
/* geen transpose ! */ /* no transpose ! */
ver->n[0]= imat[0][0]*xn+imat[1][0]*yn+imat[2][0]*zn; ver->n[0]= imat[0][0]*xn+imat[1][0]*yn+imat[2][0]*zn;
ver->n[1]= imat[0][1]*xn+imat[1][1]*yn+imat[2][1]*zn; ver->n[1]= imat[0][1]*xn+imat[1][1]*yn+imat[2][1]*zn;
ver->n[2]= imat[0][2]*xn+imat[1][2]*yn+imat[2][2]*zn; ver->n[2]= imat[0][2]*xn+imat[1][2]*yn+imat[2][2]*zn;
@@ -322,7 +322,7 @@ void env_rotate_scene(float mat[][4], int mode)
xn= vlr->n[0]; xn= vlr->n[0];
yn= vlr->n[1]; yn= vlr->n[1];
zn= vlr->n[2]; zn= vlr->n[2];
/* geen transpose ! */ /* no transpose ! */
vlr->n[0]= imat[0][0]*xn+imat[1][0]*yn+imat[2][0]*zn; vlr->n[0]= imat[0][0]*xn+imat[1][0]*yn+imat[2][0]*zn;
vlr->n[1]= imat[0][1]*xn+imat[1][1]*yn+imat[2][1]*zn; vlr->n[1]= imat[0][1]*xn+imat[1][1]*yn+imat[2][1]*zn;
vlr->n[2]= imat[0][2]*xn+imat[1][2]*yn+imat[2][2]*zn; vlr->n[2]= imat[0][2]*xn+imat[1][2]*yn+imat[2][2]*zn;
@@ -424,7 +424,7 @@ void render_envmap(EnvMap *env)
RE_local_clear_render_display(R.win); RE_local_clear_render_display(R.win);
fillrect(R.rectot, R.rectx, R.recty, 0); fillrect(R.rectot, R.rectx, R.recty, 0);
RE_setwindowclip(1,-1); /* geen jit:(-1) */ RE_setwindowclip(1,-1); /* no jit:(-1) */
MTC_Mat4CpyMat4(tmat, G.scene->camera->obmat); MTC_Mat4CpyMat4(tmat, G.scene->camera->obmat);
MTC_Mat4Ortho(tmat); MTC_Mat4Ortho(tmat);

View File

@@ -100,13 +100,13 @@
#define ELEM3(a, b, c, d) ( ELEM(a, b, c) || (a)==(d) ) #define ELEM3(a, b, c, d) ( ELEM(a, b, c) || (a)==(d) )
/* uit render.c */ /* from render.c */
extern float fmask[256], centLut[16]; extern float fmask[256], centLut[16];
extern unsigned short *mask1[9], *mask2[9], /* *igamtab1, */ *igamtab2/*, *gamtab */; extern unsigned short *mask1[9], *mask2[9], /* *igamtab1, */ *igamtab2/*, *gamtab */;
extern char cmask[256], *centmask; extern char cmask[256], *centmask;
Material defmaterial; Material defmaterial;
short pa; /* pa is globaal part ivm print */ short pa; /* pa is global part, for print */
short allparts[65][4]; short allparts[65][4];
int qscount; int qscount;
@@ -159,7 +159,7 @@ void RE_free_render_data()
end_render_material(&defmaterial); end_render_material(&defmaterial);
} }
/* ****************** GAMMA, MASKERS en LUTS **************** */ /* ****************** GAMMA, MASKS and LUTS **************** */
float calc_weight(float *weight, int i, int j) float calc_weight(float *weight, int i, int j)
{ {
@@ -225,7 +225,7 @@ void RE_init_filt_mask(void)
} }
if(R.r.alphamode==R_ALPHAKEY) gamma= 1.0; /* ??? */ if(R.r.alphamode==R_ALPHAKEY) gamma= 1.0; /* gamma correction of alpha is nasty */
if(R.r.mode & R_GAMMA) gamma= 2.0; if(R.r.mode & R_GAMMA) gamma= 2.0;
else gamma= 1.0; else gamma= 1.0;
@@ -234,7 +234,7 @@ void RE_init_filt_mask(void)
if(gamma!= lastgamma) { if(gamma!= lastgamma) {
lastgamma= gamma; lastgamma= gamma;
/* gamtab: in short, uit short */ /* gamtab: in short, out short */
for(a=0; a<65536; a++) { for(a=0; a<65536; a++) {
val= a; val= a;
val/= 65535.0; val/= 65535.0;
@@ -244,7 +244,7 @@ void RE_init_filt_mask(void)
gamtab[a]= (65535.99*val); gamtab[a]= (65535.99*val);
} }
/* inv gamtab1 : in byte, uit short */ /* inverse gamtab1 : in byte, out short */
for(a=1; a<=256; a++) { for(a=1; a<=256; a++) {
if(gamma==2.0) igamtab1[a-1]= a*a-1; if(gamma==2.0) igamtab1[a-1]= a*a-1;
else if(gamma==1.0) igamtab1[a-1]= 256*a-1; else if(gamma==1.0) igamtab1[a-1]= 256*a-1;
@@ -254,7 +254,7 @@ void RE_init_filt_mask(void)
} }
} }
/* inv gamtab2 : in short, uit short */ /* inverse gamtab2 : in short, out short */
for(a=0; a<65536; a++) { for(a=0; a<65536; a++) {
val= a; val= a;
val/= 65535.0; val/= 65535.0;
@@ -280,7 +280,7 @@ void RE_init_filt_mask(void)
memset(mask2[a], 0, 256*2); memset(mask2[a], 0, 256*2);
} }
/* bereken totw */ /* calculate totw */
totw= 0.0; totw= 0.0;
for(j= -1; j<2; j++) { for(j= -1; j<2; j++) {
for(i= -1; i<2; i++) { for(i= -1; i<2; i++) {
@@ -290,7 +290,7 @@ void RE_init_filt_mask(void)
for(j= -1; j<2; j++) { for(j= -1; j<2; j++) {
for(i= -1; i<2; i++) { for(i= -1; i<2; i++) {
/* bereken ahv jit met ofset de gewichten */ /* calculate using jit, with offset the weights */
memset(weight, 0, 32*2); memset(weight, 0, 32*2);
calc_weight(weight, i, j); calc_weight(weight, i, j);
@@ -337,7 +337,7 @@ void RE_init_filt_mask(void)
} }
} }
/* centmask: de juiste subpixel ofset per masker */ /* centmask: the correct subpixel offset per mask */
fpx1= MEM_mallocN(256*sizeof(float), "initgauss4"); fpx1= MEM_mallocN(256*sizeof(float), "initgauss4");
fpx2= MEM_mallocN(256*sizeof(float), "initgauss4"); fpx2= MEM_mallocN(256*sizeof(float), "initgauss4");
@@ -457,7 +457,7 @@ void RE_make_existing_file(char *name)
strcpy(di, name); strcpy(di, name);
BLI_splitdirstring(di, fi); BLI_splitdirstring(di, fi);
/* exist testen */ /* test exist */
if (BLI_exists(di) == 0) { if (BLI_exists(di) == 0) {
BLI_recurdir_fileops(di); BLI_recurdir_fileops(di);
} }
@@ -466,11 +466,11 @@ void RE_make_existing_file(char *name)
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/* code for holographic hack, used in the neogeo days. SHould be removed (ton) */
extern float holoofs; /* render.c */ extern float holoofs; /* render.c */
void RE_setwindowclip(int mode, int jmode) void RE_setwindowclip(int mode, int jmode)
{ {
/* jmode>=0: alleen jitter doen, anders berekenen */
/* mode==1 zet persmat en grvec */
Camera *cam=0; Camera *cam=0;
float lens, fac, minx, miny, maxx, maxy; float lens, fac, minx, miny, maxx, maxy;
float xd, yd, afmx, afmy; float xd, yd, afmx, afmy;
@@ -509,7 +509,7 @@ void RE_setwindowclip(int mode, int jmode)
R.viewfac= R.ycor*(afmy*lens)/16.0; R.viewfac= R.ycor*(afmy*lens)/16.0;
} }
if(R.r.mode & R_ORTHO) { if(R.r.mode & R_ORTHO) {
R.near*= 100.0; /* R.far niet doen */ R.near*= 100.0;
R.viewfac*= 100.0; R.viewfac*= 100.0;
} }
@@ -572,8 +572,6 @@ void RE_setwindowclip(int mode, int jmode)
maxy= R.pixsize*(maxy+yd); maxy= R.pixsize*(maxy+yd);
if(R.r.mode & R_ORTHO) { if(R.r.mode & R_ORTHO) {
/* hier de near & far vermenigvuldigen is voldoende! */
i_window(minx, maxx, miny, maxy, R.near, 100.0*R.far, R.winmat); i_window(minx, maxx, miny, maxy, R.near, 100.0*R.far, R.winmat);
} }
else i_window(minx, maxx, miny, maxy, R.near, R.far, R.winmat); else i_window(minx, maxx, miny, maxy, R.near, R.far, R.winmat);
@@ -605,20 +603,20 @@ void initparts()
ymaxb= R.recty; ymaxb= R.recty;
} }
xparts= R.r.xparts; /* voor border */ xparts= R.r.xparts; /* for border */
yparts= R.r.yparts; yparts= R.r.yparts;
for(nr=0;nr<xparts*yparts;nr++) for(nr=0;nr<xparts*yparts;nr++)
allparts[nr][0]= -1; /* array leegmaken */ allparts[nr][0]= -1; /* clear array */
xpart= R.rectx/xparts; xpart= R.rectx/xparts;
ypart= R.recty/yparts; ypart= R.recty/yparts;
/* als border: testen of aantal parts minder kan */ /* if border: test if amount of parts can be fewer */
if(R.r.mode & R_BORDER) { if(R.r.mode & R_BORDER) {
a= (xmaxb-xminb-1)/xpart+1; /* zoveel parts in border */ a= (xmaxb-xminb-1)/xpart+1; /* amount of parts in border */
if(a<xparts) xparts= a; if(a<xparts) xparts= a;
a= (ymaxb-yminb-1)/ypart+1; /* zoveel parts in border */ a= (ymaxb-yminb-1)/ypart+1; /* amount of parts in border */
if(a<yparts) yparts= a; if(a<yparts) yparts= a;
xpart= (xmaxb-xminb)/xparts; xpart= (xmaxb-xminb)/xparts;
@@ -651,7 +649,7 @@ void initparts()
} }
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
short setpart(short nr) /* return 0 als geen goede part */ short setpart(short nr) /* return 0 if incorrect part */
{ {
if(allparts[nr][0]== -1) return 0; if(allparts[nr][0]== -1) return 0;
@@ -672,7 +670,7 @@ void addparttorect(short nr, Part *part)
unsigned int *rt, *rp; unsigned int *rt, *rp;
short y, heigth, len; short y, heigth, len;
/* de juiste offset in rectot */ /* the right offset in rectot */
rt= R.rectot+ (allparts[nr][1]*R.rectx+ allparts[nr][0]); rt= R.rectot+ (allparts[nr][1]*R.rectx+ allparts[nr][0]);
rp= part->rect; rp= part->rect;
@@ -726,12 +724,12 @@ void add_to_blurbuf(int blur)
} }
} }
else if(blur==R.osa-1) { else if(blur==R.osa-1) {
/* eerste keer */ /* first time */
blurrect= MEM_mallocN(R.rectx*R.recty*sizeof(int), "rectblur"); blurrect= MEM_mallocN(R.rectx*R.recty*sizeof(int), "rectblur");
if(R.rectot) memcpy(blurrect, R.rectot, R.rectx*R.recty*4); if(R.rectot) memcpy(blurrect, R.rectot, R.rectx*R.recty*4);
} }
else if(blurrect) { else if(blurrect) {
/* accumuleren */ /* accumulate */
facr= 256/(R.osa-blur); facr= 256/(R.osa-blur);
facb= 256-facr; facb= 256-facr;
@@ -765,7 +763,7 @@ void add_to_blurbuf(int blur)
} }
} }
if(blur==0) { if(blur==0) {
/* laatste keer */ /* last time */
if(R.rectot) MEM_freeN(R.rectot); if(R.rectot) MEM_freeN(R.rectot);
R.rectot= blurrect; R.rectot= blurrect;
blurrect= 0; blurrect= 0;
@@ -785,12 +783,12 @@ void render() {
} }
void oldRenderLoop(void) /* hierbinnen de PART en FIELD lussen */ void oldRenderLoop(void) /* here the PART and FIELD loops */
{ {
Part *part; Part *part;
unsigned int *rt, *rt1, *rt2; unsigned int *rt, *rt1, *rt2;
int len, y; int len, y;
short blur, a,fields,fi,parts; /* pa is globaal ivm print */ short blur, a,fields,fi,parts; /* pa is a global because of print */
unsigned int *border_buf= NULL; unsigned int *border_buf= NULL;
unsigned int border_x= 0; unsigned int border_x= 0;
unsigned int border_y= 0; unsigned int border_y= 0;
@@ -806,13 +804,13 @@ void oldRenderLoop(void) /* hierbinnen de PART en FIELD lussen */
if (R.rectz) MEM_freeN(R.rectz); if (R.rectz) MEM_freeN(R.rectz);
R.rectz = 0; R.rectz = 0;
/* FIELDLUS */ /* FIELD LOOP */
fields= 1; fields= 1;
parts= R.r.xparts*R.r.yparts; parts= R.r.xparts*R.r.yparts;
if(R.r.mode & R_FIELDS) { if(R.r.mode & R_FIELDS) {
fields= 2; fields= 2;
R.rectf1= R.rectf2= 0; /* fieldrecten */ R.rectf1= R.rectf2= 0; /* field rects */
R.r.ysch/= 2; R.r.ysch/= 2;
R.afmy/= 2; R.afmy/= 2;
R.r.yasp*= 2; R.r.yasp*= 2;
@@ -832,7 +830,7 @@ void oldRenderLoop(void) /* hierbinnen de PART en FIELD lussen */
if(fi==1) R.flag |= R_SEC_FIELD; if(fi==1) R.flag |= R_SEC_FIELD;
/* MOTIONBLUR lus */ /* MOTIONBLUR loop */
if(R.r.mode & R_MBLUR) blur= R.osa; if(R.r.mode & R_MBLUR) blur= R.osa;
else blur= 1; else blur= 1;
@@ -850,7 +848,7 @@ void oldRenderLoop(void) /* hierbinnen de PART en FIELD lussen */
if(R.r.mode & R_MBLUR) set_mblur_offs(R.osa-blur); if(R.r.mode & R_MBLUR) set_mblur_offs(R.osa-blur);
initparts(); /* altijd doen ivm border */ initparts(); /* always do, because of border */
setpart(0); setpart(0);
RE_local_init_render_display(); RE_local_init_render_display();
@@ -865,7 +863,7 @@ void oldRenderLoop(void) /* hierbinnen de PART en FIELD lussen */
if(RE_local_test_break()) break; if(RE_local_test_break()) break;
if(pa) { /* want pa==0 is al gedaan */ if(pa) { /* because case pa==0 has been done */
if(setpart(pa)==0) break; if(setpart(pa)==0) break;
} }
@@ -874,7 +872,7 @@ void oldRenderLoop(void) /* hierbinnen de PART en FIELD lussen */
if(R.r.mode & R_PANORAMA) setPanoRot(pa); if(R.r.mode & R_PANORAMA) setPanoRot(pa);
/* HOMOGENE COORDINATEN EN ZBUF EN CLIP OPT (per part) */ /* HOMOGENIC COORDINATES AND ZBUF AND CLIP OPTIMISATION (per part) */
/* There may be some interference with z-coordinate */ /* There may be some interference with z-coordinate */
/* calculation here? */ /* calculation here? */
@@ -882,7 +880,7 @@ void oldRenderLoop(void) /* hierbinnen de PART en FIELD lussen */
if(RE_local_test_break()) break; if(RE_local_test_break()) break;
/* ZBUFFER & SHADE: zbuffer stores int distances, int face indices */ /* ZBUFFER & SHADE: zbuffer stores integer distances, and integer face indices */
R.rectot= (unsigned int *)MEM_callocN(sizeof(int)*R.rectx*R.recty, "rectot"); R.rectot= (unsigned int *)MEM_callocN(sizeof(int)*R.rectx*R.recty, "rectot");
R.rectz = (unsigned int *)MEM_mallocN(sizeof(int)*R.rectx*R.recty, "rectz"); R.rectz = (unsigned int *)MEM_mallocN(sizeof(int)*R.rectx*R.recty, "rectz");
@@ -896,10 +894,10 @@ void oldRenderLoop(void) /* hierbinnen de PART en FIELD lussen */
if(RE_local_test_break()) break; if(RE_local_test_break()) break;
/* uitzondering */ /* exception */
if( (R.r.mode & R_BORDER) && (R.r.mode & R_MOVIECROP)); if( (R.r.mode & R_BORDER) && (R.r.mode & R_MOVIECROP));
else { else {
/* PART OF BORDER AFHANDELEN */ /* HANDLE PART OR BORDER */
if(parts>1 || (R.r.mode & R_BORDER)) { if(parts>1 || (R.r.mode & R_BORDER)) {
part= MEM_callocN(sizeof(Part), "part"); part= MEM_callocN(sizeof(Part), "part");
@@ -915,9 +913,9 @@ void oldRenderLoop(void) /* hierbinnen de PART en FIELD lussen */
} }
} }
/* PARTS SAMENVOEGEN OF BORDER INVOEGEN */ /* JOIN PARTS OR INSERT BORDER */
/* uitzondering: crop */ /* exception: crop */
if( (R.r.mode & R_BORDER) && (R.r.mode & R_MOVIECROP)) ; if( (R.r.mode & R_BORDER) && (R.r.mode & R_MOVIECROP)) ;
else { else {
R.rectx= R.r.xsch; R.rectx= R.r.xsch;
@@ -968,16 +966,16 @@ void oldRenderLoop(void) /* hierbinnen de PART en FIELD lussen */
add_to_blurbuf(blur); add_to_blurbuf(blur);
} }
/* EINDE (blurlus) */ /* END (blur loop) */
finalizeScene(); finalizeScene();
if(RE_local_test_break()) break; if(RE_local_test_break()) break;
} }
/* definitief vrijgeven */ /* definite free */
add_to_blurbuf(-1); add_to_blurbuf(-1);
/* FIELD AFHANDELEN */ /* HANDLE FIELD */
if(R.r.mode & R_FIELDS) { if(R.r.mode & R_FIELDS) {
if(R.flag & R_SEC_FIELD) R.rectf2= R.rectot; if(R.flag & R_SEC_FIELD) R.rectf2= R.rectot;
else R.rectf1= R.rectot; else R.rectf1= R.rectot;
@@ -987,14 +985,14 @@ void oldRenderLoop(void) /* hierbinnen de PART en FIELD lussen */
if(RE_local_test_break()) break; if(RE_local_test_break()) break;
} }
/* FIELDS SAMENVOEGEN */ /* JOIN FIELDS */
if(R.r.mode & R_FIELDS) { if(R.r.mode & R_FIELDS) {
R.r.ysch*= 2; R.r.ysch*= 2;
R.afmy*= 2; R.afmy*= 2;
R.recty*= 2; R.recty*= 2;
R.r.yasp/=2; R.r.yasp/=2;
if(R.rectot) MEM_freeN(R.rectot); /* komt voor bij afbreek */ if(R.rectot) MEM_freeN(R.rectot); /* happens when a render has been stopped */
R.rectot=(unsigned int *)MEM_mallocN(sizeof(int)*R.rectx*R.recty, "rectot"); R.rectot=(unsigned int *)MEM_mallocN(sizeof(int)*R.rectx*R.recty, "rectot");
if(RE_local_test_break()==0) { if(RE_local_test_break()==0) {
@@ -1026,7 +1024,7 @@ void oldRenderLoop(void) /* hierbinnen de PART en FIELD lussen */
/* if(R.r.mode & R_PANORAMA) R.rectx*= R.r.xparts; */ /* if(R.r.mode & R_PANORAMA) R.rectx*= R.r.xparts; */
/* R.recty= R.r.ysch; */ /* R.recty= R.r.ysch; */
/* als border: wel de skybuf doen */ /* if border: still do skybuf */
if(R.r.mode & R_BORDER) { if(R.r.mode & R_BORDER) {
if( (R.r.mode & R_MOVIECROP)==0) { if( (R.r.mode & R_MOVIECROP)==0) {
if(R.r.bufflag & 1) { if(R.r.bufflag & 1) {
@@ -1040,7 +1038,7 @@ void oldRenderLoop(void) /* hierbinnen de PART en FIELD lussen */
set_mblur_offs(0); set_mblur_offs(0);
/* VRIJGEVEN */ /* FREE */
/* zbuf test */ /* zbuf test */
@@ -1068,17 +1066,17 @@ void RE_initrender(struct View3D *ogl_render_view3d)
Image *bima; Image *bima;
char name[256]; char name[256];
/* scenedata naar R */ /* scene data to R */
R.r= G.scene->r; R.r= G.scene->r;
R.r.postigamma= 1.0/R.r.postgamma; R.r.postigamma= 1.0/R.r.postgamma;
/* voor zekerheid: bij voortijdige return */ /* to be sure: when a premature return */
R.rectx= R.r.xsch; R.rectx= R.r.xsch;
R.recty= R.r.ysch; R.recty= R.r.ysch;
/* MAG ER WEL WORDEN GERENDERD */ /* IS RENDERING ALLOWED? */
/* verboden combinatie */ /* forbidden combination */
if((R.r.mode & R_BORDER) && (R.r.mode & R_PANORAMA)) { if((R.r.mode & R_BORDER) && (R.r.mode & R_PANORAMA)) {
error("No border allowed for Panorama"); error("No border allowed for Panorama");
G.afbreek= 1; G.afbreek= 1;
@@ -1099,7 +1097,7 @@ void RE_initrender(struct View3D *ogl_render_view3d)
} }
/* BACKBUF TESTEN */ /* TEST BACKBUF */
/* If an image is specified for use as backdrop, that image is loaded */ /* If an image is specified for use as backdrop, that image is loaded */
/* here. */ /* here. */
if((R.r.bufflag & 1) && (G.scene->r.scemode & R_OGL)==0) { if((R.r.bufflag & 1) && (G.scene->r.scemode & R_OGL)==0) {
@@ -1127,7 +1125,7 @@ void RE_initrender(struct View3D *ogl_render_view3d)
} }
usegamtab= 0; /* zie hieronder */ usegamtab= 0; /* see also further */
if(R.r.mode & (R_OSA|R_MBLUR)) { if(R.r.mode & (R_OSA|R_MBLUR)) {
R.osa= R.r.osa; R.osa= R.r.osa;
@@ -1136,7 +1134,7 @@ void RE_initrender(struct View3D *ogl_render_view3d)
init_render_jit(R.osa); init_render_jit(R.osa);
RE_init_filt_mask(); RE_init_filt_mask();
/* wordt af en toe tijdelijk op nul gezet, o.a. in transp zbuf */ /* this value sometimes is reset temporally, for example in transp zbuf */
if(R.r.mode & R_GAMMA) { if(R.r.mode & R_GAMMA) {
if((R.r.mode & R_OSA)) usegamtab= 1; if((R.r.mode & R_OSA)) usegamtab= 1;
} }
@@ -1175,7 +1173,7 @@ void RE_initrender(struct View3D *ogl_render_view3d)
if(RE_local_test_break()==0) do_render_seq(); if(RE_local_test_break()==0) do_render_seq();
/* displayen */ /* display */
if(R.rectot) RE_local_render_display(0, R.recty-1, if(R.rectot) RE_local_render_display(0, R.recty-1,
R.rectx, R.recty, R.rectx, R.recty,
R.rectot); R.rectot);
@@ -1207,11 +1205,11 @@ void RE_initrender(struct View3D *ogl_render_view3d)
if(cam->type==CAM_ORTHO) R.r.mode |= R_ORTHO; if(cam->type==CAM_ORTHO) R.r.mode |= R_ORTHO;
} }
render(); /* keert terug met complete rect xsch-ysch */ render(); /* returns with complete rect xsch-ysch */
} }
} }
/* nog eens displayen: fields/seq/parts/pano etc */ /* display again: fields/seq/parts/pano etc */
if(R.rectot) { if(R.rectot) {
RE_local_init_render_display(); RE_local_init_render_display();
RE_local_render_display(0, R.recty-1, RE_local_render_display(0, R.recty-1,
@@ -1222,9 +1220,9 @@ void RE_initrender(struct View3D *ogl_render_view3d)
RE_local_printrenderinfo((PIL_check_seconds_timer() - start_time), -1); RE_local_printrenderinfo((PIL_check_seconds_timer() - start_time), -1);
/* variabelen weer goed */ /* restore variables */
R.osatex= 0; R.osatex= 0;
R.vlr= 0; /* bij cubemap */ R.vlr= 0; /* at cubemap */
R.flag= 0; R.flag= 0;
} }
@@ -1235,10 +1233,10 @@ void RE_animrender(struct View3D *ogl_render_view3d)
if(G.scene==0) return; if(G.scene==0) return;
/* scenedata naar R: (voor backbuf, R.rectx enz) */ /* scenedata to R: (for backbuf, R.rectx etc) */
R.r= G.scene->r; R.r= G.scene->r;
/* START ANIMLUS overal wordt NIET de cfra uit R.r gebruikt: ivm rest blender */ /* START ANIMLOOP, everywhere NOT the cfra from R.r is gebruikt: because of rest blender */
cfrao= (G.scene->r.cfra); cfrao= (G.scene->r.cfra);
if(G.scene->r.scemode & R_OGL) R.r.mode &= ~R_PANORAMA; if(G.scene->r.scemode & R_OGL) R.r.mode &= ~R_PANORAMA;
@@ -1275,7 +1273,7 @@ void RE_animrender(struct View3D *ogl_render_view3d)
RE_initrender(ogl_render_view3d); RE_initrender(ogl_render_view3d);
/* SCHRIJF PLAATJE */ /* WRITE IMAGE */
if(RE_local_test_break()==0) { if(RE_local_test_break()==0) {
if (0) { if (0) {
@@ -1297,7 +1295,7 @@ void RE_animrender(struct View3D *ogl_render_view3d)
timestr(PIL_check_seconds_timer()-starttime, name); timestr(PIL_check_seconds_timer()-starttime, name);
printf(" Time: %s\n", name); printf(" Time: %s\n", name);
fflush(stdout); /* nodig voor renderd !! */ fflush(stdout); /* needed for renderd !! */
} }
if(G.afbreek==1) break; if(G.afbreek==1) break;
@@ -1306,7 +1304,7 @@ void RE_animrender(struct View3D *ogl_render_view3d)
(G.scene->r.cfra)= cfrao; (G.scene->r.cfra)= cfrao;
/* restoren tijd */ /* restore time */
if(R.r.mode & (R_FIELDS|R_MBLUR)) { if(R.r.mode & (R_FIELDS|R_MBLUR)) {
do_all_ipos(); do_all_ipos();
do_all_keys(); do_all_keys();

View File

@@ -83,12 +83,12 @@ void addToBlurBuffer(int blur)
} }
} }
else if(blur==R.osa-1) { else if(blur==R.osa-1) {
/* eerste keer */ /* first time */
blurrect= MEM_mallocN(R.rectx*R.recty*sizeof(int), "rectblur"); blurrect= MEM_mallocN(R.rectx*R.recty*sizeof(int), "rectblur");
if(R.rectot) memcpy(blurrect, R.rectot, R.rectx*R.recty*4); if(R.rectot) memcpy(blurrect, R.rectot, R.rectx*R.recty*4);
} }
else if(blurrect) { else if(blurrect) {
/* accumuleren */ /* accumulate */
facr= 256/(R.osa-blur); facr= 256/(R.osa-blur);
facb= 256-facr; facb= 256-facr;
@@ -122,7 +122,7 @@ void addToBlurBuffer(int blur)
} }
} }
if(blur==0) { if(blur==0) {
/* laatste keer */ /* last time */
if(R.rectot) MEM_freeN(R.rectot); if(R.rectot) MEM_freeN(R.rectot);
R.rectot= blurrect; R.rectot= blurrect;
blurrect= 0; blurrect= 0;
@@ -138,7 +138,7 @@ void addPartToRect(short nr, Part *part)
unsigned int *rt, *rp; unsigned int *rt, *rp;
short y, heigth, len; short y, heigth, len;
/* de juiste offset in rectot */ /* the correct offset in rectot */
rt= R.rectot+ (partsCoordinates[nr][1]*R.rectx+ partsCoordinates[nr][0]); rt= R.rectot+ (partsCoordinates[nr][1]*R.rectx+ partsCoordinates[nr][0]);
rp= part->rect; rp= part->rect;
@@ -177,20 +177,20 @@ void initParts()
ymaxb= R.recty; ymaxb= R.recty;
} }
xparts= R.r.xparts; /* voor border */ xparts= R.r.xparts; /* for border */
yparts= R.r.yparts; yparts= R.r.yparts;
for(nr=0;nr<xparts*yparts;nr++) for(nr=0;nr<xparts*yparts;nr++)
partsCoordinates[nr][0]= -1; /* array leegmaken */ partsCoordinates[nr][0]= -1; /* clear array */
xpart= R.rectx/xparts; xpart= R.rectx/xparts;
ypart= R.recty/yparts; ypart= R.recty/yparts;
/* als border: testen of aantal parts minder kan */ /* if border: test if amount of parts can be reduced */
if(R.r.mode & R_BORDER) { if(R.r.mode & R_BORDER) {
a= (xmaxb-xminb-1)/xpart+1; /* zoveel parts in border */ a= (xmaxb-xminb-1)/xpart+1; /* amount of parts in border */
if(a<xparts) xparts= a; if(a<xparts) xparts= a;
a= (ymaxb-yminb-1)/ypart+1; /* zoveel parts in border */ a= (ymaxb-yminb-1)/ypart+1; /* amount of parts in border */
if(a<yparts) yparts= a; if(a<yparts) yparts= a;
xpart= (xmaxb-xminb)/xparts; xpart= (xmaxb-xminb)/xparts;
@@ -222,7 +222,7 @@ void initParts()
} }
} }
short setPart(short nr) /* return 0 als geen goede part */ short setPart(short nr) /* return 0 if incorrect part */
{ {
if(partsCoordinates[nr][0]== -1) return 0; if(partsCoordinates[nr][0]== -1) return 0;
@@ -239,12 +239,12 @@ short setPart(short nr) /* return 0 als geen goede part */
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */
void unifiedRenderingLoop(void) /* hierbinnen de PART en FIELD lussen */ void unifiedRenderingLoop(void) /* here the PART en FIELD loops */
{ {
Part *part; Part *part;
unsigned int *rt, *rt1, *rt2; unsigned int *rt, *rt1, *rt2;
int len; int len;
short blur, a,fields,fi,parts; /* pa is globaal ivm print */ short blur, a,fields,fi,parts; /* pa is global because of print */
unsigned int *border_buf= NULL; unsigned int *border_buf= NULL;
unsigned int border_x= 0; unsigned int border_x= 0;
unsigned int border_y= 0; unsigned int border_y= 0;
@@ -260,13 +260,13 @@ void unifiedRenderingLoop(void) /* hierbinnen de PART en FIELD lussen */
if (R.rectz) MEM_freeN(R.rectz); if (R.rectz) MEM_freeN(R.rectz);
R.rectz = 0; R.rectz = 0;
/* FIELDLUS */ /* FIELD LOOP */
fields= 1; fields= 1;
parts= R.r.xparts*R.r.yparts; parts= R.r.xparts*R.r.yparts;
if(R.r.mode & R_FIELDS) { if(R.r.mode & R_FIELDS) {
fields= 2; fields= 2;
R.rectf1= R.rectf2= 0; /* fieldrecten */ R.rectf1= R.rectf2= 0; /* field rects */
R.r.ysch/= 2; R.r.ysch/= 2;
R.afmy/= 2; R.afmy/= 2;
R.r.yasp*= 2; R.r.yasp*= 2;
@@ -286,7 +286,7 @@ void unifiedRenderingLoop(void) /* hierbinnen de PART en FIELD lussen */
if(fi==1) R.flag |= R_SEC_FIELD; if(fi==1) R.flag |= R_SEC_FIELD;
/* MOTIONBLUR lus */ /* MOTIONBLUR loop */
if(R.r.mode & R_MBLUR) blur= R.osa; if(R.r.mode & R_MBLUR) blur= R.osa;
else blur= 1; else blur= 1;
@@ -304,7 +304,7 @@ void unifiedRenderingLoop(void) /* hierbinnen de PART en FIELD lussen */
if(R.r.mode & R_MBLUR) set_mblur_offs(R.osa-blur); if(R.r.mode & R_MBLUR) set_mblur_offs(R.osa-blur);
initParts(); /* altijd doen ivm border */ initParts(); /* always do because of border */
setPart(0); setPart(0);
RE_local_init_render_display(); RE_local_init_render_display();
@@ -319,7 +319,7 @@ void unifiedRenderingLoop(void) /* hierbinnen de PART en FIELD lussen */
if(RE_local_test_break()) break; if(RE_local_test_break()) break;
if(pa) { /* want pa==0 is al gedaan */ if(pa) { /* because pa==0 has been done */
if(setPart(pa)==0) break; if(setPart(pa)==0) break;
} }
@@ -328,7 +328,7 @@ void unifiedRenderingLoop(void) /* hierbinnen de PART en FIELD lussen */
if(R.r.mode & R_PANORAMA) setPanoRot(pa); if(R.r.mode & R_PANORAMA) setPanoRot(pa);
/* HOMOGENE COORDINATEN EN ZBUF EN CLIP OPT (per part) */ /* HOMOGENIC COORDINATES AND ZBUF AND CLIP OPTIMISATION (per part) */
/* There may be some interference with z-coordinate */ /* There may be some interference with z-coordinate */
/* calculation here? */ /* calculation here? */
@@ -347,10 +347,10 @@ void unifiedRenderingLoop(void) /* hierbinnen de PART en FIELD lussen */
if(RE_local_test_break()) break; if(RE_local_test_break()) break;
/* uitzondering */ /* exception */
if( (R.r.mode & R_BORDER) && (R.r.mode & R_MOVIECROP)); if( (R.r.mode & R_BORDER) && (R.r.mode & R_MOVIECROP));
else { else {
/* PART OF BORDER AFHANDELEN */ /* HANDLE PARTS OR BORDER */
if(parts>1 || (R.r.mode & R_BORDER)) { if(parts>1 || (R.r.mode & R_BORDER)) {
part= MEM_callocN(sizeof(Part), "part"); part= MEM_callocN(sizeof(Part), "part");
@@ -366,9 +366,9 @@ void unifiedRenderingLoop(void) /* hierbinnen de PART en FIELD lussen */
} }
} }
/* PARTS SAMENVOEGEN OF BORDER INVOEGEN */ /* JOIN PARTS OR INSERT BORDER */
/* uitzondering: crop */ /* exception: crop */
if( (R.r.mode & R_BORDER) && (R.r.mode & R_MOVIECROP)) ; if( (R.r.mode & R_BORDER) && (R.r.mode & R_MOVIECROP)) ;
else { else {
R.rectx= R.r.xsch; R.rectx= R.r.xsch;
@@ -420,16 +420,16 @@ void unifiedRenderingLoop(void) /* hierbinnen de PART en FIELD lussen */
addToBlurBuffer(blur); addToBlurBuffer(blur);
} }
/* EINDE (blurlus) */ /* END (blur loop) */
finalizeScene(); finalizeScene();
if(RE_local_test_break()) break; if(RE_local_test_break()) break;
} }
/* definitief vrijgeven */ /* definite free */
addToBlurBuffer(-1); addToBlurBuffer(-1);
/* FIELD AFHANDELEN */ /* HANDLE FIELD */
if(R.r.mode & R_FIELDS) { if(R.r.mode & R_FIELDS) {
if(R.flag & R_SEC_FIELD) R.rectf2= R.rectot; if(R.flag & R_SEC_FIELD) R.rectf2= R.rectot;
else R.rectf1= R.rectot; else R.rectf1= R.rectot;
@@ -439,14 +439,14 @@ void unifiedRenderingLoop(void) /* hierbinnen de PART en FIELD lussen */
if(RE_local_test_break()) break; if(RE_local_test_break()) break;
} }
/* FIELDS SAMENVOEGEN */ /* JOIN FIELDS */
if(R.r.mode & R_FIELDS) { if(R.r.mode & R_FIELDS) {
R.r.ysch*= 2; R.r.ysch*= 2;
R.afmy*= 2; R.afmy*= 2;
R.recty*= 2; R.recty*= 2;
R.r.yasp/=2; R.r.yasp/=2;
if(R.rectot) MEM_freeN(R.rectot); /* komt voor bij afbreek */ if(R.rectot) MEM_freeN(R.rectot); /* happens when break */
R.rectot=(unsigned int *)MEM_mallocN(sizeof(int)*R.rectx*R.recty, "rectot"); R.rectot=(unsigned int *)MEM_mallocN(sizeof(int)*R.rectx*R.recty, "rectot");
if(RE_local_test_break()==0) { if(RE_local_test_break()==0) {
@@ -478,7 +478,6 @@ void unifiedRenderingLoop(void) /* hierbinnen de PART en FIELD lussen */
/* if(R.r.mode & R_PANORAMA) R.rectx*= R.r.xparts; */ /* if(R.r.mode & R_PANORAMA) R.rectx*= R.r.xparts; */
/* R.recty= R.r.ysch; */ /* R.recty= R.r.ysch; */
/* als border: wel de skybuf doen */
/* /*
This may be tricky This may be tricky
*/ */
@@ -495,7 +494,7 @@ void unifiedRenderingLoop(void) /* hierbinnen de PART en FIELD lussen */
set_mblur_offs(0); set_mblur_offs(0);
/* VRIJGEVEN */ /* FREE */
/* zbuf test */ /* zbuf test */

View File

@@ -174,12 +174,13 @@ int addtosampcol(unsigned short *sampcol, unsigned short *shortcol, int mask)
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */
void addAlphaOverShort(unsigned short *doel, unsigned short *bron) /* vult bron over doel in met alpha van bron */ void addAlphaOverShort(unsigned short *doel, unsigned short *bron)
/* fills in bron (source) over doel (target) with alpha from bron */
{ {
unsigned int c; unsigned int c;
unsigned int mul; unsigned int mul;
if( doel[3]==0 || bron[3]>=0xFFF0) { /* is getest, scheelt veel */ if( doel[3]==0 || bron[3]>=0xFFF0) { /* has been tested */
*((unsigned int *)doel)= *((unsigned int *)bron); *((unsigned int *)doel)= *((unsigned int *)bron);
*((unsigned int *)(doel+2))= *((unsigned int *)(bron+2)); *((unsigned int *)(doel+2))= *((unsigned int *)(bron+2));
return; return;
@@ -204,13 +205,14 @@ void addAlphaOverShort(unsigned short *doel, unsigned short *bron) /* vult bro
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */
void addAlphaUnderShort(unsigned short *doel, unsigned short *bron) /* vult bron onder doel in met alpha van doel */ void addAlphaUnderShort(unsigned short *doel, unsigned short *bron)
/* fills in bron (source) under doel (target) using alpha from doel */
{ {
unsigned int c; unsigned int c;
unsigned int mul; unsigned int mul;
if(doel[3]>=0xFFF0) return; if(doel[3]>=0xFFF0) return;
if( doel[3]==0 ) { /* is getest, scheelt veel */ if( doel[3]==0 ) { /* was tested */
*((unsigned int *)doel)= *((unsigned int *)bron); *((unsigned int *)doel)= *((unsigned int *)bron);
*((unsigned int *)(doel+2))= *((unsigned int *)(bron+2)); *((unsigned int *)(doel+2))= *((unsigned int *)(bron+2));
return; return;
@@ -243,8 +245,7 @@ void addAlphaOverFloat(float *dest, float *source)
/* I may want to disable this clipping */ /* I may want to disable this clipping */
#ifdef RE_FLOAT_COLOUR_CLIPPING #ifdef RE_FLOAT_COLOUR_CLIPPING
if( /* (-RE_FULL_COLOUR_FLOAT < source[3]) */ if( (source[3] > RE_FULL_COLOUR_FLOAT) ) {
/* && */ (source[3] > RE_FULL_COLOUR_FLOAT) ) { /* is getest, scheelt veel */
dest[0] = source[0]; dest[0] = source[0];
dest[1] = source[1]; dest[1] = source[1];
dest[2] = source[2]; dest[2] = source[2];
@@ -299,7 +300,7 @@ void addAlphaUnderFloat(float *dest, float *source)
if( dest[3] >= RE_FULL_COLOUR_FLOAT) return; if( dest[3] >= RE_FULL_COLOUR_FLOAT) return;
#endif #endif
if( (-RE_EMPTY_COLOUR_FLOAT < dest[3]) if( (-RE_EMPTY_COLOUR_FLOAT < dest[3])
&& (dest[3] < RE_EMPTY_COLOUR_FLOAT) ) { /* is getest, scheelt veel */ && (dest[3] < RE_EMPTY_COLOUR_FLOAT) ) {
dest[0] = source[0]; dest[0] = source[0];
dest[1] = source[1]; dest[1] = source[1];
dest[2] = source[2]; dest[2] = source[2];
@@ -372,8 +373,7 @@ void cpIntColV2CharColV(unsigned int *source, char *dest)
void cpCharColV2FloatColV(char *source, float *dest) void cpCharColV2FloatColV(char *source, float *dest)
{ {
/* What about endianness? Might be caught at this level :) */ dest[0] = source[0]/255.0;
dest[0] = source[0]/255.0;
dest[1] = source[1]/255.0; dest[1] = source[1]/255.0;
dest[2] = source[2]/255.0; dest[2] = source[2]/255.0;
dest[3] = source[3]/255.0; dest[3] = source[3]/255.0;
@@ -442,7 +442,6 @@ void cpCharColV(char *source, char *dest)
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */
void addalphaAddfacFloat(float *dest, float *source, char addfac) void addalphaAddfacFloat(float *dest, float *source, char addfac)
/* doel= bron over doel */
{ {
float m; /* weiging factor of destination */ float m; /* weiging factor of destination */
float c; /* intermediate colour */ float c; /* intermediate colour */
@@ -655,7 +654,7 @@ void sampleFloatColV2FloatColV(float *sample, float *dest, int osaNr)
/* The following functions are 'old' blending functions: */ /* The following functions are 'old' blending functions: */
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */
void keyalpha(char *doel) /* maakt premul 255 */ void keyalpha(char *doel) /* makes premul 255 */
{ {
int c; int c;
short div; short div;
@@ -680,14 +679,14 @@ void keyalpha(char *doel) /* maakt premul 255 */
} }
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */
/* vult bron onder doel in met alpha van doel*/ /* fills in bron (source) under doel (target) with alpha of doel*/
void addalphaUnder(char *doel, char *bron) void addalphaUnder(char *doel, char *bron)
{ {
int c; int c;
int mul; int mul;
if(doel[3]==255) return; if(doel[3]==255) return;
if( doel[3]==0) { /* is getest, scheelt */ if( doel[3]==0) { /* tested */
*((unsigned int *)doel)= *((unsigned int *)bron); *((unsigned int *)doel)= *((unsigned int *)bron);
return; return;
} }
@@ -712,14 +711,14 @@ void addalphaUnder(char *doel, char *bron)
} }
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */
/* gamma-gecorr: vult bron onder doel in met alpha van doel */ /* gamma-corrected */
void addalphaUnderGamma(char *doel, char *bron) void addalphaUnderGamma(char *doel, char *bron)
{ {
unsigned int tot; unsigned int tot;
int c, doe, bro; int c, doe, bro;
int mul; int mul;
/* hier doel[3]==0 of doel==255 afvangen gebeurt al in skylus */ /* if doel[3]==0 or doel==255 has been handled in sky loop */
mul= 256-doel[3]; mul= 256-doel[3];
doe= igamtab1[(int)doel[0]]; doe= igamtab1[(int)doel[0]];
@@ -754,7 +753,7 @@ void addalphaOver(char *doel, char *bron)
int mul; int mul;
if(bron[3]==0) return; if(bron[3]==0) return;
if( bron[3]==255) { /* is getest, scheelt */ if( bron[3]==255) { /* tested */
*((unsigned int *)doel)= *((unsigned int *)bron); *((unsigned int *)doel)= *((unsigned int *)bron);
return; return;
} }
@@ -776,11 +775,11 @@ void addalphaOver(char *doel, char *bron)
} }
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */
void addalphaAdd(char *doel, char *bron) /* telt bron bij doel */ void addalphaAdd(char *doel, char *bron) /* adds bron (source) to doel (target) */
{ {
int c; int c;
if( doel[3]==0 || bron[3]==255) { /* is getest, scheelt veel */ if( doel[3]==0 || bron[3]==255) { /* tested */
*((unsigned int *)doel)= *((unsigned int *)bron); *((unsigned int *)doel)= *((unsigned int *)bron);
return; return;
} }
@@ -798,7 +797,7 @@ void addalphaAdd(char *doel, char *bron) /* telt bron bij doel */
else doel[3]= c; else doel[3]= c;
} }
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */
void addalphaAddshort(unsigned short *doel, unsigned short *bron) /* telt bron bij doel */ void addalphaAddshort(unsigned short *doel, unsigned short *bron) /* adds bron (source) to doel (target) */
{ {
int c; int c;
@@ -847,7 +846,6 @@ void addalphaAddFloat(float *dest, float *source)
* Z= X alphaover Y: * Z= X alphaover Y:
* Zrgb= (1-Xa)*Yrgb + Xrgb * Zrgb= (1-Xa)*Yrgb + Xrgb
* *
* Om ook de add te doen moet (1-Xa) moduleren met 1 via fac
* (1-fac)*(1-Xa) + fac <=> * (1-fac)*(1-Xa) + fac <=>
* 1-Xa-fac+fac*Xa+fac <=> * 1-Xa-fac+fac*Xa+fac <=>
* Xa*(fac-1)+1 * Xa*(fac-1)+1

View File

@@ -204,7 +204,7 @@ void *renderFacePixel(float x, float y, int vlaknr)
return vlr; return vlr;
#endif #endif
if(R.vlaknr== -1) { /* doet initrender */ if(R.vlaknr== -1) { /* set by initrender */
/* also set in the pixelrender loop */ /* also set in the pixelrender loop */
vlr= R.vlr= 0; vlr= R.vlr= 0;
} }
@@ -225,7 +225,7 @@ void *renderFacePixel(float x, float y, int vlaknr)
R.mat= vlr->mat; R.mat= vlr->mat;
R.matren= R.mat->ren; R.matren= R.mat->ren;
if(R.matren==0) { /* tijdelijk voor debug */ if(R.matren==0) { /* purple color, for debug */
collector[3] = RE_UNITY_COLOUR_FLOAT; collector[3] = RE_UNITY_COLOUR_FLOAT;
collector[2] = 0.0; collector[2] = 0.0;
collector[1] = RE_UNITY_COLOUR_FLOAT; collector[1] = RE_UNITY_COLOUR_FLOAT;
@@ -242,7 +242,7 @@ void *renderFacePixel(float x, float y, int vlaknr)
v1= vlr->v1; v1= vlr->v1;
dvlak= MTC_dot3Float(v1->co, vlr->n); dvlak= MTC_dot3Float(v1->co, vlr->n);
if( (vlr->flag & R_SMOOTH) || (R.matren->texco & NEED_UV)) { /* uv nodig */ if( (vlr->flag & R_SMOOTH) || (R.matren->texco & NEED_UV)) { /* uv needed */
if(vlaknr & 0x800000) { if(vlaknr & 0x800000) {
v2= vlr->v3; v2= vlr->v3;
v3= vlr->v4; v3= vlr->v4;
@@ -269,7 +269,7 @@ void *renderFacePixel(float x, float y, int vlaknr)
t00/= detsh; t01/=detsh; t00/= detsh; t01/=detsh;
t10/=detsh; t11/=detsh; t10/=detsh; t11/=detsh;
if(vlr->flag & R_SMOOTH) { /* puno's goedzetten */ if(vlr->flag & R_SMOOTH) { /* set vertex normals ("punos") */
if(vlr->puno & ME_FLIPV1) MTC_cp3FloatInv(v1->n, n1); if(vlr->puno & ME_FLIPV1) MTC_cp3FloatInv(v1->n, n1);
else MTC_cp3Float(v1->n, n1); else MTC_cp3Float(v1->n, n1);
@@ -303,7 +303,6 @@ void *renderFacePixel(float x, float y, int vlaknr)
/* This trafo might be migrated to a separate function. It is used */ /* This trafo might be migrated to a separate function. It is used */
/* quite often. */ /* quite often. */
/* COXYZ nieuwe methode */
if( (G.special1 & G_HOLO) if( (G.special1 & G_HOLO)
&& (((Camera *)G.scene->camera->data)->flag & CAM_HOLO2) ) { && (((Camera *)G.scene->camera->data)->flag & CAM_HOLO2) ) {
R.view[0]= (x+(R.xstart)+1.0+holoofs); R.view[0]= (x+(R.xstart)+1.0+holoofs);
@@ -353,7 +352,7 @@ void *renderFacePixel(float x, float y, int vlaknr)
} }
fac= Normalise(R.view); fac= Normalise(R.view);
R.zcor*= fac; /* voor mist */ R.zcor*= fac; /* for mist */
if(R.osatex) { if(R.osatex) {
if( (R.matren->texco & TEXCO_REFL) ) { if( (R.matren->texco & TEXCO_REFL) ) {
@@ -535,11 +534,11 @@ void *renderFacePixel(float x, float y, int vlaknr)
if(vlr->tface) render_realtime_texture(); if(vlr->tface) render_realtime_texture();
} }
/* hierna klopt de u en v EN O.dxuv en O.dyuv niet meer */ /* after this, the u en v AND O.dxuv and O.dyuv are incorrect */
if(R.matren->texco & TEXCO_STICKY) { if(R.matren->texco & TEXCO_STICKY) {
if(v2->sticky) { if(v2->sticky) {
/* opnieuw u en v berekenen */ /* recalc u en v */
hox= x/Zmulx -1.0; hox= x/Zmulx -1.0;
hoy= y/Zmuly -1.0; hoy= y/Zmuly -1.0;
u= (hox - v3->ho[0]/v3->ho[3])*s11 u= (hox - v3->ho[0]/v3->ho[3])*s11
@@ -590,7 +589,7 @@ void *renderFacePixel(float x, float y, int vlaknr)
} }
else alpha= 1.0; else alpha= 1.0;
/* RAYTRACE (tijdelijk?) UITGESCHAKELD */ /* RAYTRACE WAS HERE! */
if(R.matren->alpha!=1.0 || alpha!=1.0) { if(R.matren->alpha!=1.0 || alpha!=1.0) {
fac= alpha*(R.matren->alpha); fac= alpha*(R.matren->alpha);
@@ -616,7 +615,7 @@ void *renderFacePixel(float x, float y, int vlaknr)
/* here makes it difficult to do proper overlaying later on. */ /* here makes it difficult to do proper overlaying later on. */
/* It starts off with a coordinate transform again. */ /* It starts off with a coordinate transform again. */
if(R.flag & R_LAMPHALO) { if(R.flag & R_LAMPHALO) {
if(vlaknr<=0) { /* bereken viewvec en zet R.co op far */ if(vlaknr<=0) { /* calculate view vector and set R.co at far */
/* this view vector stuff should get its own function */ /* this view vector stuff should get its own function */
if( (G.special1 & G_HOLO) && if( (G.special1 & G_HOLO) &&
@@ -696,15 +695,15 @@ void shadeSpotHaloPixelFloat(float *col)
if(factor > RE_FULL_COLOUR_FLOAT) rescol[3]= 1.0; if(factor > RE_FULL_COLOUR_FLOAT) rescol[3]= 1.0;
else rescol[3]= factor; else rescol[3]= factor;
/* erg vervelend: gammagecorrigeerd renderen EN addalphaADD */ /* nasty issue: gamma corrected rendering AND 'addalphaADD' */
/* gaat niet goed samen */ /* do not work well togethe */
/* eigenlijk moet er een aparte 'optel' gamma komen */ /* actually, we should invent a new 'add' gamma type... (ton) */
/* /*
There is a strange thing here: the spothalo seems to be There is a strange thing here: the spothalo seems to be
calculated in the space you would get when you go from calculated in the space you would get when you go from
value space through inverse gamma! So we gamma-transform value space through inverse gamma! So we gamma-transform
to value-space, then integrate, blend, and gamma correct to value-space, then integrate, blend, and gamma correct
_again_. _again_. -nzc-
*/ */
rescol[0] = factor * lar->r; /* Lampren rgb's are floats */ rescol[0] = factor * lar->r; /* Lampren rgb's are floats */
@@ -762,14 +761,14 @@ void spotHaloFloat(struct LampRen *lar, float *view, float *intens)
*intens= 0.0; *intens= 0.0;
haint= lar->haint; haint= lar->haint;
VECCOPY(npos, lar->sh_invcampos); /* in initlamp berekend */ VECCOPY(npos, lar->sh_invcampos); /* calculated in initlamp */
/* view roteren */ /* rotate view */
VECCOPY(nray, view); VECCOPY(nray, view);
MTC_Mat3MulVecd(lar->imat, nray); MTC_Mat3MulVecd(lar->imat, nray);
if(R.wrld.mode & WO_MIST) { if(R.wrld.mode & WO_MIST) {
/* een beetje patch... */ /* a bit patchy... */
R.zcor= -lar->co[2]; R.zcor= -lar->co[2];
haint *= mistfactor(lar->co); haint *= mistfactor(lar->co);
if(haint==0.0) { if(haint==0.0) {
@@ -778,8 +777,8 @@ void spotHaloFloat(struct LampRen *lar, float *view, float *intens)
} }
/* maxz roteren */ /* rotate maxz */
if(R.co[2]==0) doclip= 0; /* is als halo op sky */ if(R.co[2]==0) doclip= 0; /* for when halo over a sky */
else { else {
p1[0]= R.co[0]-lar->co[0]; p1[0]= R.co[0]-lar->co[0];
p1[1]= R.co[1]-lar->co[1]; p1[1]= R.co[1]-lar->co[1];
@@ -792,13 +791,13 @@ void spotHaloFloat(struct LampRen *lar, float *view, float *intens)
if( fabs(nray[2]) <0.000001 ) use_yco= 1; if( fabs(nray[2]) <0.000001 ) use_yco= 1;
} }
/* z scalen zodat het volume genormaliseerd is */ /* scale z to make sure we've got a normalized volume */
nray[2]*= lar->sh_zfac; nray[2]*= lar->sh_zfac;
/* nray hoeft niet genormaliseerd */ /* nray does not need normalize */
ladist= lar->sh_zfac*lar->dist; ladist= lar->sh_zfac*lar->dist;
/* oplossen */ /* solve */
a = nray[0] * nray[0] + nray[1] * nray[1] - nray[2]*nray[2]; a = nray[0] * nray[0] + nray[1] * nray[1] - nray[2]*nray[2];
b = nray[0] * npos[0] + nray[1] * npos[1] - nray[2]*npos[2]; b = nray[0] * npos[0] + nray[1] * npos[1] - nray[2]*npos[2];
c = npos[0] * npos[0] + npos[1] * npos[1] - npos[2]*npos[2]; c = npos[0] * npos[0] + npos[1] * npos[1] - npos[2]*npos[2];
@@ -825,27 +824,27 @@ void spotHaloFloat(struct LampRen *lar, float *view, float *intens)
} }
} }
if(snijp==2) { if(snijp==2) {
/* sorteren */ /* sort */
if(t1>t2) { if(t1>t2) {
a= t1; t1= t2; t2= a; a= t1; t1= t2; t2= a;
} }
/* z van snijpunten met diabolo */ /* the z of intersection points with 'diabolo' shape */
p1[2]= npos[2] + t1*nray[2]; p1[2]= npos[2] + t1*nray[2];
p2[2]= npos[2] + t2*nray[2]; p2[2]= npos[2] + t2*nray[2];
/* beide punten evalueren */ /* evaluate both points */
if(p1[2]<=0.0) ok1= 1; if(p1[2]<=0.0) ok1= 1;
if(p2[2]<=0.0 && t1!=t2) ok2= 1; if(p2[2]<=0.0 && t1!=t2) ok2= 1;
/* minstens 1 punt met negatieve z */ /* at least 1 point with negative z */
if(ok1==0 && ok2==0) return; if(ok1==0 && ok2==0) return;
/* snijpunt met -ladist, de bodem van de kegel */ /* intersction point with -ladist, the bottom of the cone */
if(use_yco==0) { if(use_yco==0) {
t3= (-ladist-npos[2])/nray[2]; t3= (-ladist-npos[2])/nray[2];
/* moet 1 van de snijpunten worden vervangen? */ /* does one intersection point has to be replaced? */
if(ok1) { if(ok1) {
if(p1[2]<-ladist) t1= t3; if(p1[2]<-ladist) t1= t3;
} }
@@ -863,7 +862,7 @@ void spotHaloFloat(struct LampRen *lar, float *view, float *intens)
} }
else if(ok1==0 || ok2==0) return; else if(ok1==0 || ok2==0) return;
/* minstens 1 zichtbaar snijpunt */ /* at least 1 visible intersection point */
if(t1<0.0 && t2<0.0) return; if(t1<0.0 && t2<0.0) return;
if(t1<0.0) t1= 0.0; if(t1<0.0) t1= 0.0;
@@ -871,13 +870,12 @@ void spotHaloFloat(struct LampRen *lar, float *view, float *intens)
if(t1==t2) return; if(t1==t2) return;
/* voor zekerheid nog eens sorteren */ /* to be sure, sort again */
if(t1>t2) { if(t1>t2) {
a= t1; t1= t2; t2= a; a= t1; t1= t2; t2= a;
} }
/* t0 berekenen: is de maximale zichtbare z (als halo door vlak */ /* calculate t0: is de maximal visible z (for when halo was intersected with face */
/* doorsneden wordt) */
if(doclip) { if(doclip) {
if(use_yco==0) t0= (maxz-npos[2])/nray[2]; if(use_yco==0) t0= (maxz-npos[2])/nray[2];
else t0= (maxy-npos[1])/nray[1]; else t0= (maxy-npos[1])/nray[1];
@@ -886,7 +884,7 @@ void spotHaloFloat(struct LampRen *lar, float *view, float *intens)
if(t0<t2) t2= t0; if(t0<t2) t2= t0;
} }
/* bereken punten */ /* calculate points */
p1[0]= npos[0] + t1*nray[0]; p1[0]= npos[0] + t1*nray[0];
p1[1]= npos[1] + t1*nray[1]; p1[1]= npos[1] + t1*nray[1];
p1[2]= npos[2] + t1*nray[2]; p1[2]= npos[2] + t1*nray[2];
@@ -895,7 +893,7 @@ void spotHaloFloat(struct LampRen *lar, float *view, float *intens)
p2[2]= npos[2] + t2*nray[2]; p2[2]= npos[2] + t2*nray[2];
/* nu hebben we twee punten, hiermee maken we drie lengtes */ /* now we've got two points, we make three lengths with that */
a= sqrt(p1[0]*p1[0]+p1[1]*p1[1]+p1[2]*p1[2]); a= sqrt(p1[0]*p1[0]+p1[1]*p1[1]+p1[2]*p1[2]);
b= sqrt(p2[0]*p2[0]+p2[1]*p2[1]+p2[2]*p2[2]); b= sqrt(p2[0]*p2[0]+p2[1]*p2[1]+p2[2]*p2[2]);
@@ -909,12 +907,12 @@ void spotHaloFloat(struct LampRen *lar, float *view, float *intens)
*intens= c*( (1.0-a)+(1.0-b) ); *intens= c*( (1.0-a)+(1.0-b) );
/* LET OP: a,b en c NIET op 1.0 clippen, dit geeft kleine /* WATCH IT: do not clip a,b en c at 1.0, this gives nasty little overflows
overflowtjes op de rand (vooral bij smalle halo's) */ at the edges (especially with narrow halos) */
if(*intens<=0.0) return; if(*intens<=0.0) return;
/* zachte gebied */ /* soft area */
/* vervalt omdat t0 nu ook voor p1/p2 wordt gebruikt */ /* not needed because t0 has been used for p1/p2 as well */
/* if(doclip && t0<t2) { */ /* if(doclip && t0<t2) { */
/* *intens *= (t0-t1)/(t2-t1); */ /* *intens *= (t0-t1)/(t2-t1); */
/* } */ /* } */
@@ -925,6 +923,7 @@ void spotHaloFloat(struct LampRen *lar, float *view, float *intens)
/* from shadbuf.c, returns float */ /* from shadbuf.c, returns float */
*intens *= shadow_halo(lar, p1, p2); *intens *= shadow_halo(lar, p1, p2);
} }
/* this was a test, for textured halos! unfortunately i could not get transformations right... (ton) */
/* if(lar->mode & LA_TEXTURE) do_lamphalo_tex(lar, p1, p2, intens); */ /* if(lar->mode & LA_TEXTURE) do_lamphalo_tex(lar, p1, p2, intens); */
} }
@@ -947,7 +946,7 @@ void shadeLampLusFloat()
view= R.view; view= R.view;
ma= R.matren; ma= R.matren;
/* aparte lus */ /* separate loop */
if(ma->mode & MA_ONLYSHADOW) { if(ma->mode & MA_ONLYSHADOW) {
shadfac= ir= 0.0; shadfac= ir= 0.0;
for(a=0; a<R.totlamp; a++) { for(a=0; a<R.totlamp; a++) {
@@ -956,7 +955,7 @@ void shadeLampLusFloat()
if(lar->mode & LA_LAYER) if((lar->lay & R.vlr->lay)==0) continue; if(lar->mode & LA_LAYER) if((lar->lay & R.vlr->lay)==0) continue;
if(lar->shb) { if(lar->shb) {
/* alleen testen binnen spotbundel */ /* only test within spotbundle */
lv[0]= R.co[0]-lar->co[0]; lv[0]= R.co[0]-lar->co[0];
lv[1]= R.co[1]-lar->co[1]; lv[1]= R.co[1]-lar->co[1];
lv[2]= R.co[2]-lar->co[2]; lv[2]= R.co[2]-lar->co[2];
@@ -1049,10 +1048,10 @@ void shadeLampLusFloat()
for(a=0; a<R.totlamp; a++) { for(a=0; a<R.totlamp; a++) {
lar= R.la[a]; lar= R.la[a];
/* test op lamplayer */ /* test for lamplayer */
if(lar->mode & LA_LAYER) if((lar->lay & R.vlr->lay)==0) continue; if(lar->mode & LA_LAYER) if((lar->lay & R.vlr->lay)==0) continue;
/* lampdist berekening */ /* lampdist calculation */
if(lar->type==LA_SUN || lar->type==LA_HEMI) { if(lar->type==LA_SUN || lar->type==LA_HEMI) {
VECCOPY(lv, lar->vec); VECCOPY(lv, lar->vec);
lampdist= 1.0; lampdist= 1.0;
@@ -1066,7 +1065,7 @@ void shadeLampLusFloat()
lv[1]/= ld; lv[1]/= ld;
lv[2]/= ld; lv[2]/= ld;
/* ld wordt verderop nog gebruikt (texco's) */ /* ld is used further on too (texco's) */
if(lar->mode & LA_QUAD) { if(lar->mode & LA_QUAD) {
t= 1.0; t= 1.0;
@@ -1095,7 +1094,7 @@ void shadeLampLusFloat()
if(lar->type==LA_SPOT) { if(lar->type==LA_SPOT) {
/* hier de fie Inp() vertaagt! */ /* using here a function call Inp() slows down! */
if(lar->mode & LA_SQUARE) { if(lar->mode & LA_SQUARE) {
if(lv[0]*lar->vec[0]+lv[1]*lar->vec[1]+lv[2]*lar->vec[2]>0.0) { if(lv[0]*lar->vec[0]+lv[1]*lar->vec[1]+lv[2]*lar->vec[2]>0.0) {
@@ -1123,7 +1122,7 @@ void shadeLampLusFloat()
i= 1.0; i= 1.0;
soft= 1.0; soft= 1.0;
if(t<lar->spotbl && lar->spotbl!=0.0) { if(t<lar->spotbl && lar->spotbl!=0.0) {
/* zachte gebied */ /* soft area */
i= t/lar->spotbl; i= t/lar->spotbl;
t= i*i; t= i*i;
soft= (3.0*t-2.0*t*i); soft= (3.0*t-2.0*t*i);
@@ -1131,13 +1130,12 @@ void shadeLampLusFloat()
} }
if(lar->mode & LA_ONLYSHADOW && lar->shb) { if(lar->mode & LA_ONLYSHADOW && lar->shb) {
if(ma->mode & MA_SHADOW) { if(ma->mode & MA_SHADOW) {
/* inprodukt positief: voorzijde vlak! */ /* dot product positive: front side face! */
inp= vn[0]*lv[0] + vn[1]*lv[1] + vn[2]*lv[2]; inp= vn[0]*lv[0] + vn[1]*lv[1] + vn[2]*lv[2];
if(inp>0.0) { if(inp>0.0) {
/* testshadowbuf==0.0 : 100% schaduw */ /* testshadowbuf==0.0 : 100% shadow */
RE_testshadowbuf(lar->shadowBufOb, lar->shb, inp, shadfacvec); RE_testshadowbuf(lar->shadowBufOb, lar->shb, inp, shadfacvec);
/* testshadowbuf(lar->shb, inp, shadfacvec); */
shadfac = 1.0 - shadfacvec[0]; shadfac = 1.0 - shadfacvec[0];
if(shadfac>0.0) { if(shadfac>0.0) {
@@ -1156,7 +1154,7 @@ void shadeLampLusFloat()
if(lar->mode & LA_ONLYSHADOW) continue; if(lar->mode & LA_ONLYSHADOW) continue;
if(lar->mode & LA_OSATEX) { if(lar->mode & LA_OSATEX) {
R.osatex= 1; /* signaal voor multitex() */ R.osatex= 1; /* signal for multitex() */
O.dxlv[0]= lv[0] - (R.co[0]-lar->co[0]+O.dxco[0])/ld; O.dxlv[0]= lv[0] - (R.co[0]-lar->co[0]+O.dxco[0])/ld;
O.dxlv[1]= lv[1] - (R.co[1]-lar->co[1]+O.dxco[1])/ld; O.dxlv[1]= lv[1] - (R.co[1]-lar->co[1]+O.dxco[1])/ld;
@@ -1169,7 +1167,7 @@ void shadeLampLusFloat()
} }
/* inprodukt en reflectivity*/ /* dot product and reflectivity*/
inp=i= vn[0]*lv[0] + vn[1]*lv[1] + vn[2]*lv[2]; inp=i= vn[0]*lv[0] + vn[1]*lv[1] + vn[2]*lv[2];
if(lar->type==LA_HEMI) { if(lar->type==LA_HEMI) {
i= 0.5*i+0.5; i= 0.5*i+0.5;
@@ -1178,14 +1176,13 @@ void shadeLampLusFloat()
i*= lampdist*ma->ref; i*= lampdist*ma->ref;
} }
/* schaduw en spec */ /* shadow and spec */
if(i> -0.41) { /* beetje willekeurig, beetje getest */ if(i> -0.41) { /* heuristic value... :) */
shadfac= 1.0; shadfac= 1.0;
if(lar->shb) { if(lar->shb) {
if(ma->mode & MA_SHADOW) { if(ma->mode & MA_SHADOW) {
float shadfacvec[3] = {1.0, 1.0, 1.0}; float shadfacvec[3] = {1.0, 1.0, 1.0};
RE_testshadowbuf(lar->shadowBufOb, lar->shb, inp, shadfacvec); RE_testshadowbuf(lar->shadowBufOb, lar->shb, inp, shadfacvec);
/* testshadowbuf(lar->shb, inp, shadfacvec); */
shadfac = shadfacvec[0]; shadfac = shadfacvec[0];
/* shadfac = 1.0; : no shadow */ /* shadfac = 1.0; : no shadow */
@@ -1214,10 +1211,8 @@ void shadeLampLusFloat()
if(lar->type==LA_HEMI) { if(lar->type==LA_HEMI) {
t= 0.5*t+0.5; t= 0.5*t+0.5;
} }
/* let op: shadfac en lampdist uit onderstaande */ /* watch it: shadfac and lampdist used below */
/* no more speclim */
t= ma->spec*RE_Spec(t, ma->har); t= ma->spec*RE_Spec(t, ma->har);
isr+= t*(lar->r * ma->specr); isr+= t*(lar->r * ma->specr);
isg+= t*(lar->g * ma->specg); isg+= t*(lar->g * ma->specg);
@@ -1345,18 +1340,18 @@ void shadeHaloFloat(HaloRen *har,
float dist, float xn, float dist, float xn,
float yn, short flarec) float yn, short flarec)
{ {
/* in col invullen */ /* fill in col */
/* migrate: fill collector */ /* migrate: fill collector */
float t, zn, radist, ringf=0.0, linef=0.0, alpha, si, co, colf[4]; float t, zn, radist, ringf=0.0, linef=0.0, alpha, si, co, colf[4];
int a; int a;
if(R.wrld.mode & WO_MIST) { if(R.wrld.mode & WO_MIST) {
if(har->type & HA_ONLYSKY) { if(har->type & HA_ONLYSKY) {
/* sterren geen mist */ /* stars but no mist */
alpha= har->alfa; alpha= har->alfa;
} }
else { else {
/* een beetje patch... */ /* a but patchy... */
R.zcor= -har->co[2]; R.zcor= -har->co[2];
alpha= mistfactor(har->co)*har->alfa; alpha= mistfactor(har->co)*har->alfa;
} }
@@ -1373,14 +1368,14 @@ void shadeHaloFloat(HaloRen *har,
radist= sqrt(dist); radist= sqrt(dist);
/* let op: hiermee wordt gesjoemeld: flarec wordt op nul gezet in de pixstruct */ /* watch it: not used nicely: flarec is set at zero in pixstruct */
if(flarec) har->pixels+= (int)(har->rad-radist); if(flarec) har->pixels+= (int)(har->rad-radist);
if(har->ringc) { if(har->ringc) {
float *rc, fac; float *rc, fac;
int ofs; int ofs;
/* per ring een alicirc */ /* per ring an antialised circle */
ofs= har->seed; ofs= har->seed;
for(a= har->ringc; a>0; a--, ofs+=2) { for(a= har->ringc; a>0; a--, ofs+=2) {
@@ -1429,7 +1424,7 @@ void shadeHaloFloat(HaloRen *har,
float *rc, fac; float *rc, fac;
int ofs; int ofs;
/* per starpoint een aliline */ /* per starpoint an antialiased line */
ofs= har->seed; ofs= har->seed;
for(a= har->linec; a>0; a--, ofs+=3) { for(a= har->linec; a>0; a--, ofs+=3) {
@@ -1449,7 +1444,7 @@ void shadeHaloFloat(HaloRen *har,
if(har->starpoints) { if(har->starpoints) {
float ster, hoek; float ster, hoek;
/* rotatie */ /* rotation */
hoek= atan2(yn, xn); hoek= atan2(yn, xn);
hoek*= (1.0+0.25*har->starpoints); hoek*= (1.0+0.25*har->starpoints);
@@ -1466,7 +1461,7 @@ void shadeHaloFloat(HaloRen *har,
} }
} }
/* halo wordt doorsneden? */ /* halo being intersected? */
if(har->zs> zz-har->zd) { if(har->zs> zz-har->zd) {
t= ((float)(zz-har->zs))/(float)har->zd; t= ((float)(zz-har->zs))/(float)har->zd;
alpha*= sqrt(sqrt(t)); alpha*= sqrt(sqrt(t));
@@ -1835,7 +1830,7 @@ void shadeSkyPixelFloat(float y)
} }
/* Why are this R. members? */ /* Why are this R. members? because textures need it (ton) */
if(R.inprz>1.0) R.inprz= 1.0; if(R.inprz>1.0) R.inprz= 1.0;
R.inprh= 1.0-R.inprz; R.inprh= 1.0-R.inprz;
@@ -1852,9 +1847,6 @@ void shadeSkyPixelFloat(float y)
} }
collector[3]= RE_UNITY_COLOUR_FLOAT; collector[3]= RE_UNITY_COLOUR_FLOAT;
/* om verkeerde optimalisatie alphaover van flares te voorkomen */
/* ??? seems strange to me... This used to be a 1 when the colours */
/* were chars. might need a separate flag for this... */
} }

View File

@@ -124,11 +124,11 @@ void gamtabdit(unsigned short *in, char *out)
} }
float mistfactor(float *co) /* dist en hoogte, return alpha */ float mistfactor(float *co) /* dist en height, return alpha */
{ {
float fac, hi; float fac, hi;
fac= R.zcor - R.wrld.miststa; /* R.zcor wordt per pixel berekend */ fac= R.zcor - R.wrld.miststa; /* R.zcor is calculated per pixel */
/* fac= -co[2]-R.wrld.miststa; */ /* fac= -co[2]-R.wrld.miststa; */
@@ -145,9 +145,9 @@ float mistfactor(float *co) /* dist en hoogte, return alpha */
} }
else fac= 0.0; else fac= 0.0;
/* de hoogte schakelt de mist af */ /* height switched off mist */
if(R.wrld.misthi!=0.0 && fac!=0.0) { if(R.wrld.misthi!=0.0 && fac!=0.0) {
/* op hoogte misthi is mist volledig weg */ /* at height misthi the mist is completely gone */
hi= R.viewinv[0][2]*co[0]+R.viewinv[1][2]*co[1]+R.viewinv[2][2]*co[2]+R.viewinv[3][2]; hi= R.viewinv[0][2]*co[0]+R.viewinv[1][2]*co[1]+R.viewinv[2][2]*co[2]+R.viewinv[3][2];
@@ -222,7 +222,7 @@ void RE_sky(char *col)
col[1]= 255.0*R.wrld.horg; col[1]= 255.0*R.wrld.horg;
col[2]= 255.0*R.wrld.horb; col[2]= 255.0*R.wrld.horb;
} }
col[3]= 1; /* om verkeerde optimalisatie alphaover van flares te voorkomen */ col[3]= 1; /* to prevent wrong optimalisation alphaover of flares */
} }
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */
@@ -255,7 +255,7 @@ void scanlinesky(char *rect, int y)
*( ( unsigned int *)rect)= col; *( ( unsigned int *)rect)= col;
} }
else { else {
/* voorkomen dat 'col' in afbeelding voorkomt */ /* prevent 'col' to be in the image */
cp1= (char *)rect; cp1= (char *)rect;
if( cp[0]==cp1[0] && cp[1]==cp1[1] && cp[2]==cp1[2] ) { if( cp[0]==cp1[0] && cp[1]==cp1[1] && cp[2]==cp1[2] ) {
@@ -284,7 +284,7 @@ void scanlinesky(char *rect, int y)
return; return;
} }
} }
/* welke scanline/ */ /* which scanline/ */
y= ((y+R.afmy+R.ystart)*R.backbuf->ibuf->y)/(2*R.afmy); y= ((y+R.afmy+R.ystart)*R.backbuf->ibuf->y)/(2*R.afmy);
if(R.flag & R_SEC_FIELD) { if(R.flag & R_SEC_FIELD) {
@@ -298,7 +298,7 @@ void scanlinesky(char *rect, int y)
rt= (R.backbuf->ibuf->rect + y*R.backbuf->ibuf->x); rt= (R.backbuf->ibuf->rect + y*R.backbuf->ibuf->x);
/* op welke plek */ /* at which location */
fac= ((float)R.backbuf->ibuf->x)/(float)(2*R.afmx); fac= ((float)R.backbuf->ibuf->x)/(float)(2*R.afmx);
ofs= (R.afmx+R.xstart)*fac; ofs= (R.afmx+R.xstart)*fac;
rt+= ofs; rt+= ofs;
@@ -423,7 +423,6 @@ void do_lamphalo_tex(LampRen *lar, float *p1, float *p2, float *intens)
totin/= (float)steps; totin/= (float)steps;
*intens *= totin; *intens *= totin;
/* why isn't there a return value here? */
} }
@@ -439,14 +438,14 @@ void spothalo(struct LampRen *lar, float *view, float *intens)
*intens= 0.0; *intens= 0.0;
haint= lar->haint; haint= lar->haint;
VECCOPY(npos, lar->sh_invcampos); /* in initlamp berekend */ VECCOPY(npos, lar->sh_invcampos); /* in initlamp calculated */
/* view roteren */ /* rotate view */
VECCOPY(nray, view); VECCOPY(nray, view);
MTC_Mat3MulVecd(lar->imat, nray); MTC_Mat3MulVecd(lar->imat, nray);
if(R.wrld.mode & WO_MIST) { if(R.wrld.mode & WO_MIST) {
/* een beetje patch... */ /* patchy... */
R.zcor= -lar->co[2]; R.zcor= -lar->co[2];
haint *= mistfactor(lar->co); haint *= mistfactor(lar->co);
if(haint==0.0) { if(haint==0.0) {
@@ -455,8 +454,8 @@ void spothalo(struct LampRen *lar, float *view, float *intens)
} }
/* maxz roteren */ /* rotate maxz */
if(R.co[2]==0) doclip= 0; /* is als halo op sky */ if(R.co[2]==0) doclip= 0; /* for when halo at sky */
else { else {
p1[0]= R.co[0]-lar->co[0]; p1[0]= R.co[0]-lar->co[0];
p1[1]= R.co[1]-lar->co[1]; p1[1]= R.co[1]-lar->co[1];
@@ -469,13 +468,13 @@ void spothalo(struct LampRen *lar, float *view, float *intens)
if( fabs(nray[2]) <0.000001 ) use_yco= 1; if( fabs(nray[2]) <0.000001 ) use_yco= 1;
} }
/* z scalen zodat het volume genormaliseerd is */ /* scale z to make sure volume is normalized */
nray[2]*= lar->sh_zfac; nray[2]*= lar->sh_zfac;
/* nray hoeft niet genormaliseerd */ /* nray does not need normalization */
ladist= lar->sh_zfac*lar->dist; ladist= lar->sh_zfac*lar->dist;
/* oplossen */ /* solve */
a = nray[0] * nray[0] + nray[1] * nray[1] - nray[2]*nray[2]; a = nray[0] * nray[0] + nray[1] * nray[1] - nray[2]*nray[2];
b = nray[0] * npos[0] + nray[1] * npos[1] - nray[2]*npos[2]; b = nray[0] * npos[0] + nray[1] * npos[1] - nray[2]*npos[2];
c = npos[0] * npos[0] + npos[1] * npos[1] - npos[2]*npos[2]; c = npos[0] * npos[0] + npos[1] * npos[1] - npos[2]*npos[2];
@@ -502,27 +501,27 @@ void spothalo(struct LampRen *lar, float *view, float *intens)
} }
} }
if(snijp==2) { if(snijp==2) {
/* sorteren */ /* sort */
if(t1>t2) { if(t1>t2) {
a= t1; t1= t2; t2= a; a= t1; t1= t2; t2= a;
} }
/* z van snijpunten met diabolo */ /* z of intersection points with diabolo */
p1[2]= npos[2] + t1*nray[2]; p1[2]= npos[2] + t1*nray[2];
p2[2]= npos[2] + t2*nray[2]; p2[2]= npos[2] + t2*nray[2];
/* beide punten evalueren */ /* evaluate both points */
if(p1[2]<=0.0) ok1= 1; if(p1[2]<=0.0) ok1= 1;
if(p2[2]<=0.0 && t1!=t2) ok2= 1; if(p2[2]<=0.0 && t1!=t2) ok2= 1;
/* minstens 1 punt met negatieve z */ /* at least 1 point with negative z */
if(ok1==0 && ok2==0) return; if(ok1==0 && ok2==0) return;
/* snijpunt met -ladist, de bodem van de kegel */ /* intersction point with -ladist, the bottom of the cone */
if(use_yco==0) { if(use_yco==0) {
t3= (-ladist-npos[2])/nray[2]; t3= (-ladist-npos[2])/nray[2];
/* moet 1 van de snijpunten worden vervangen? */ /* de we have to replace one of the intersection points? */
if(ok1) { if(ok1) {
if(p1[2]<-ladist) t1= t3; if(p1[2]<-ladist) t1= t3;
} }
@@ -540,7 +539,7 @@ void spothalo(struct LampRen *lar, float *view, float *intens)
} }
else if(ok1==0 || ok2==0) return; else if(ok1==0 || ok2==0) return;
/* minstens 1 zichtbaar snijpunt */ /* at least 1 visible interesction point */
if(t1<0.0 && t2<0.0) return; if(t1<0.0 && t2<0.0) return;
if(t1<0.0) t1= 0.0; if(t1<0.0) t1= 0.0;
@@ -548,12 +547,12 @@ void spothalo(struct LampRen *lar, float *view, float *intens)
if(t1==t2) return; if(t1==t2) return;
/* voor zekerheid nog eens sorteren */ /* sort again to be sure */
if(t1>t2) { if(t1>t2) {
a= t1; t1= t2; t2= a; a= t1; t1= t2; t2= a;
} }
/* t0 berekenen: is de maximale zichtbare z (als halo door vlak doorsneden wordt) */ /* calculate t0: is the maximum visible z (when halo is intersected by face) */
if(doclip) { if(doclip) {
if(use_yco==0) t0= (maxz-npos[2])/nray[2]; if(use_yco==0) t0= (maxz-npos[2])/nray[2];
else t0= (maxy-npos[1])/nray[1]; else t0= (maxy-npos[1])/nray[1];
@@ -562,7 +561,7 @@ void spothalo(struct LampRen *lar, float *view, float *intens)
if(t0<t2) t2= t0; if(t0<t2) t2= t0;
} }
/* bereken punten */ /* calc points */
p1[0]= npos[0] + t1*nray[0]; p1[0]= npos[0] + t1*nray[0];
p1[1]= npos[1] + t1*nray[1]; p1[1]= npos[1] + t1*nray[1];
p1[2]= npos[2] + t1*nray[2]; p1[2]= npos[2] + t1*nray[2];
@@ -571,7 +570,7 @@ void spothalo(struct LampRen *lar, float *view, float *intens)
p2[2]= npos[2] + t2*nray[2]; p2[2]= npos[2] + t2*nray[2];
/* nu hebben we twee punten, hiermee maken we drie lengtes */ /* now we have 2 points, make three lengths with it */
a= sqrt(p1[0]*p1[0]+p1[1]*p1[1]+p1[2]*p1[2]); a= sqrt(p1[0]*p1[0]+p1[1]*p1[1]+p1[2]*p1[2]);
b= sqrt(p2[0]*p2[0]+p2[1]*p2[1]+p2[2]*p2[2]); b= sqrt(p2[0]*p2[0]+p2[1]*p2[1]+p2[2]*p2[2]);
@@ -584,13 +583,13 @@ void spothalo(struct LampRen *lar, float *view, float *intens)
c/= ladist; c/= ladist;
*intens= c*( (1.0-a)+(1.0-b) ); *intens= c*( (1.0-a)+(1.0-b) );
/* LET OP: a,b en c NIET op 1.0 clippen, dit geeft kleine /* WATCH IT: do not clip a,b en c at 1.0, this gives nasty little overflows
overflowtjes op de rand (vooral bij smalle halo's) */ at the edges (especially with narrow halos) */
if(*intens<=0.0) return; if(*intens<=0.0) return;
/* zachte gebied */ /* soft area */
/* vervalt omdat t0 nu ook voor p1/p2 wordt gebruikt */ /* not needed because t0 has been used for p1/p2 as well */
/* if(doclip && t0<t2) { */ /* if(doclip && t0<t2) { */
/* *intens *= (t0-t1)/(t2-t1); */ /* *intens *= (t0-t1)/(t2-t1); */
/* } */ /* } */
@@ -632,8 +631,8 @@ void renderspothalo(unsigned short *col)
colt= i; colt= i;
if(colt>65535) scol[3]= 65535; else scol[3]= colt; if(colt>65535) scol[3]= 65535; else scol[3]= colt;
/* erg vervelend: gammagecorrigeerd renderen EN addalphaADD gaat niet goed samen */ /* really bad: gamma corrected rendering AND addalphaADD doesnt work together */
/* eigenlijk moet er een aparte 'optel' gamma komen */ /* actually we should invent a special add-gamma type */
colt= i*lar->r; colt= i*lar->r;
if(colt>65535) scol[0]= 65535; else scol[0]= colt; if(colt>65535) scol[0]= 65535; else scol[0]= colt;
@@ -673,10 +672,10 @@ void render_lighting_halo(HaloRen *har, float *colf)
for(a=0; a<R.totlamp; a++) { for(a=0; a<R.totlamp; a++) {
lar= R.la[a]; lar= R.la[a];
/* test op lamplayer */ /* test for lamplayer */
if(lar->mode & LA_LAYER) if((lar->lay & har->lay)==0) continue; if(lar->mode & LA_LAYER) if((lar->lay & har->lay)==0) continue;
/* lampdist berekening */ /* lampdist cacluation */
if(lar->type==LA_SUN || lar->type==LA_HEMI) { if(lar->type==LA_SUN || lar->type==LA_HEMI) {
VECCOPY(lv, lar->vec); VECCOPY(lv, lar->vec);
lampdist= 1.0; lampdist= 1.0;
@@ -690,7 +689,7 @@ void render_lighting_halo(HaloRen *har, float *colf)
lv[1]/= ld; lv[1]/= ld;
lv[2]/= ld; lv[2]/= ld;
/* ld wordt verderop nog gebruikt (texco's) */ /* ld is re-used further on (texco's) */
if(lar->mode & LA_QUAD) { if(lar->mode & LA_QUAD) {
t= 1.0; t= 1.0;
@@ -719,8 +718,6 @@ void render_lighting_halo(HaloRen *har, float *colf)
if(lar->type==LA_SPOT) { if(lar->type==LA_SPOT) {
/* hier de fie Inp() vertaagt! */
if(lar->mode & LA_SQUARE) { if(lar->mode & LA_SQUARE) {
if(lv[0]*lar->vec[0]+lv[1]*lar->vec[1]+lv[2]*lar->vec[2]>0.0) { if(lv[0]*lar->vec[0]+lv[1]*lar->vec[1]+lv[2]*lar->vec[2]>0.0) {
float x, lvrot[3]; float x, lvrot[3];
@@ -747,7 +744,7 @@ void render_lighting_halo(HaloRen *har, float *colf)
i= 1.0; i= 1.0;
soft= 1.0; soft= 1.0;
if(t<lar->spotbl && lar->spotbl!=0.0) { if(t<lar->spotbl && lar->spotbl!=0.0) {
/* zachte gebied */ /* soft area */
i= t/lar->spotbl; i= t/lar->spotbl;
t= i*i; t= i*i;
soft= (3.0*t-2.0*t*i); soft= (3.0*t-2.0*t*i);
@@ -755,10 +752,10 @@ void render_lighting_halo(HaloRen *har, float *colf)
} }
if(lar->mode & LA_ONLYSHADOW) { if(lar->mode & LA_ONLYSHADOW) {
/* if(ma->mode & MA_SHADOW) { */ /* if(ma->mode & MA_SHADOW) { */
/* inprodukt positief: voorzijde vlak! */ /* dot product positive: front side face! */
inp= vn[0]*lv[0] + vn[1]*lv[1] + vn[2]*lv[2]; inp= vn[0]*lv[0] + vn[1]*lv[1] + vn[2]*lv[2];
if(inp>0.0) { if(inp>0.0) {
/* testshadowbuf==0.0 : 100% schaduw */ /* testshadowbuf==0.0 : 100% shadow */
shadfac = testshadowbuf(lar->shb, inp); shadfac = testshadowbuf(lar->shb, inp);
if( shadfac>0.0 ) { if( shadfac>0.0 ) {
shadfac*= inp*soft*lar->energy; shadfac*= inp*soft*lar->energy;
@@ -777,7 +774,7 @@ void render_lighting_halo(HaloRen *har, float *colf)
} }
/* inprodukt en reflectivity*/ /* dot product and reflectivity*/
inp= 1.0-fabs(vn[0]*lv[0] + vn[1]*lv[1] + vn[2]*lv[2]); inp= 1.0-fabs(vn[0]*lv[0] + vn[1]*lv[1] + vn[2]*lv[2]);
@@ -793,8 +790,8 @@ void render_lighting_halo(HaloRen *har, float *colf)
/* i*= lampdist*ma->ref; */ /* i*= lampdist*ma->ref; */
} }
/* schaduw */ /* shadow */
if(i> -0.41) { /* beetje willekeurig, beetje getest */ if(i> -0.41) { /* heuristic valua! */
shadfac= 1.0; shadfac= 1.0;
if(lar->shb) { if(lar->shb) {
/* if(ma->mode & MA_SHADOW) { */ /* if(ma->mode & MA_SHADOW) { */
@@ -826,17 +823,17 @@ void render_lighting_halo(HaloRen *har, float *colf)
extern float hashvectf[]; extern float hashvectf[];
void RE_shadehalo(HaloRen *har, char *col, unsigned int zz, float dist, float xn, float yn, short flarec) void RE_shadehalo(HaloRen *har, char *col, unsigned int zz, float dist, float xn, float yn, short flarec)
{ {
/* in col invullen */ /* fill in in col */
float t, zn, radist, ringf=0.0, linef=0.0, alpha, si, co, colf[4]; float t, zn, radist, ringf=0.0, linef=0.0, alpha, si, co, colf[4];
int colt, a; int colt, a;
if(R.wrld.mode & WO_MIST) { if(R.wrld.mode & WO_MIST) {
if(har->type & HA_ONLYSKY) { if(har->type & HA_ONLYSKY) {
/* sterren geen mist */ /* stars have no mist */
alpha= har->alfa; alpha= har->alfa;
} }
else { else {
/* een beetje patch... */ /* patchy... */
R.zcor= -har->co[2]; R.zcor= -har->co[2];
alpha= mistfactor(har->co)*har->alfa; alpha= mistfactor(har->co)*har->alfa;
} }
@@ -856,14 +853,14 @@ void RE_shadehalo(HaloRen *har, char *col, unsigned int zz, float dist, float xn
radist= sqrt(dist); radist= sqrt(dist);
/* let op: hiermee wordt gesjoemeld: flarec wordt op nul gezet in de pixstruct */ /* watch it: abused value: flarec was set to zero in pixstruct */
if(flarec) har->pixels+= (int)(har->rad-radist); if(flarec) har->pixels+= (int)(har->rad-radist);
if(har->ringc) { if(har->ringc) {
float *rc, fac; float *rc, fac;
int ofs; int ofs;
/* per ring een alicirc */ /* per ring an antialised circle */
ofs= har->seed; ofs= har->seed;
for(a= har->ringc; a>0; a--, ofs+=2) { for(a= har->ringc; a>0; a--, ofs+=2) {
@@ -912,7 +909,7 @@ void RE_shadehalo(HaloRen *har, char *col, unsigned int zz, float dist, float xn
float *rc, fac; float *rc, fac;
int ofs; int ofs;
/* per starpoint een aliline */ /* per starpoint an antialaised line */
ofs= har->seed; ofs= har->seed;
for(a= har->linec; a>0; a--, ofs+=3) { for(a= har->linec; a>0; a--, ofs+=3) {
@@ -932,7 +929,7 @@ void RE_shadehalo(HaloRen *har, char *col, unsigned int zz, float dist, float xn
if(har->starpoints) { if(har->starpoints) {
float ster, hoek; float ster, hoek;
/* rotatie */ /* rotation */
hoek= atan2(yn, xn); hoek= atan2(yn, xn);
hoek*= (1.0+0.25*har->starpoints); hoek*= (1.0+0.25*har->starpoints);
@@ -949,7 +946,7 @@ void RE_shadehalo(HaloRen *har, char *col, unsigned int zz, float dist, float xn
} }
} }
/* halo wordt doorsneden? */ /* halo intersected? */
if(har->zs> zz-har->zd) { if(har->zs> zz-har->zd) {
t= ((float)(zz-har->zs))/(float)har->zd; t= ((float)(zz-har->zs))/(float)har->zd;
alpha*= sqrt(sqrt(t)); alpha*= sqrt(sqrt(t));
@@ -1055,7 +1052,7 @@ void scanlinehaloPS(unsigned int *rectz, long *rectdelta, unsigned int *rectt, s
if((a & 255)==0) har= R.bloha[a>>8]; if((a & 255)==0) har= R.bloha[a>>8];
else har++; else har++;
if(!(a%256)&&RE_local_test_break()) break; /* Hos, RPW - fix slow render bug, */ if( !(a % 256) && RE_local_test_break() ) break; /* Hos, RPW - fix slow render bug, */
/* !(loopvar%256) keeps checking for */ /* !(loopvar%256) keeps checking for */
/* ESC too often and bogging down render */ /* ESC too often and bogging down render */
/* (Based on discovery by Rob Haarsma) */ /* (Based on discovery by Rob Haarsma) */
@@ -1079,7 +1076,7 @@ void scanlinehaloPS(unsigned int *rectz, long *rectdelta, unsigned int *rectt, s
ysq= yn*yn; ysq= yn*yn;
for(x=minx; x<=maxx; x++) { for(x=minx; x<=maxx; x++) {
flarec= har->flarec; /* har->pixels mag maar 1 x geteld worden */ flarec= har->flarec; /* har->pixels is inly allowd to count once */
if( IS_A_POINTER_CODE(*rd)) { if( IS_A_POINTER_CODE(*rd)) {
xn= x-har->xs; xn= x-har->xs;
@@ -1164,7 +1161,7 @@ void scanlinehalo(unsigned int *rectz, unsigned int *rectt, short ys)
if((a & 255)==0) har= R.bloha[a>>8]; if((a & 255)==0) har= R.bloha[a>>8];
else har++; else har++;
if(!(a%256)&&RE_local_test_break()) break;/*Hos, RPW, fixes Slow Render Bug*/ if( !(a % 256) && RE_local_test_break() ) break; /* Hos, RPW, fixes Slow Render Bug */
if(ys>har->maxy); if(ys>har->maxy);
else if(ys<har->miny); else if(ys<har->miny);
@@ -1218,7 +1215,7 @@ void halovert()
if((a & 255)==0) har= R.bloha[a>>8]; if((a & 255)==0) har= R.bloha[a>>8];
else har++; else har++;
if(!(a%256)&&RE_local_test_break()) break;/*Hos, RPW, fixes slow render bug */ if( !(a % 256) && RE_local_test_break() ) break; /* Hos, RPW, fixes slow render bug */
if(har->maxy<0); if(har->maxy<0);
else if(R.recty<har->miny); else if(R.recty<har->miny);
@@ -1272,7 +1269,7 @@ void halovert()
rectt+= R.rectx; rectt+= R.rectx;
rectz+= R.rectx; rectz+= R.rectx;
if(!(y%256)&&RE_local_test_break()) break;/*Hos,RPW, Fixes slow render bug */ if( !(y % 256) && RE_local_test_break() ) break; /* Hos,RPW, Fixes slow render bug */
} }
} }
@@ -1395,7 +1392,7 @@ void shadelamplus()
view= R.view; view= R.view;
ma= R.matren; ma= R.matren;
/* aparte lus */ /* separate loop */
if(ma->mode & MA_ONLYSHADOW) { if(ma->mode & MA_ONLYSHADOW) {
shadfac= ir= 0.0; shadfac= ir= 0.0;
for(a=0; a<R.totlamp; a++) { for(a=0; a<R.totlamp; a++) {
@@ -1404,7 +1401,7 @@ void shadelamplus()
if(lar->mode & LA_LAYER) if((lar->lay & R.vlr->lay)==0) continue; if(lar->mode & LA_LAYER) if((lar->lay & R.vlr->lay)==0) continue;
if(lar->shb) { if(lar->shb) {
/* alleen testen binnen spotbundel */ /* only test within spotbundel */
lv[0]= R.co[0]-lar->co[0]; lv[0]= R.co[0]-lar->co[0];
lv[1]= R.co[1]-lar->co[1]; lv[1]= R.co[1]-lar->co[1];
lv[2]= R.co[2]-lar->co[2]; lv[2]= R.co[2]-lar->co[2];
@@ -1508,10 +1505,10 @@ void shadelamplus()
for(a=0; a<R.totlamp; a++) { for(a=0; a<R.totlamp; a++) {
lar= R.la[a]; lar= R.la[a];
/* test op lamplayer */ /* test for lamp layer */
if(lar->mode & LA_LAYER) if((lar->lay & R.vlr->lay)==0) continue; if(lar->mode & LA_LAYER) if((lar->lay & R.vlr->lay)==0) continue;
/* lampdist berekening */ /* lampdist calculation */
if(lar->type==LA_SUN || lar->type==LA_HEMI) { if(lar->type==LA_SUN || lar->type==LA_HEMI) {
VECCOPY(lv, lar->vec); VECCOPY(lv, lar->vec);
lampdist= 1.0; lampdist= 1.0;
@@ -1525,7 +1522,7 @@ void shadelamplus()
lv[1]/= ld; lv[1]/= ld;
lv[2]/= ld; lv[2]/= ld;
/* ld wordt verderop nog gebruikt (texco's) */ /* ld is re-used further on (texco's) */
if(lar->mode & LA_QUAD) { if(lar->mode & LA_QUAD) {
t= 1.0; t= 1.0;
@@ -1553,8 +1550,6 @@ void shadelamplus()
if(lar->mode & LA_TEXTURE) do_lamp_tex(lar, lv); if(lar->mode & LA_TEXTURE) do_lamp_tex(lar, lv);
if(lar->type==LA_SPOT) { if(lar->type==LA_SPOT) {
/* hier de fie Inp() vertaagt! */
if(lar->mode & LA_SQUARE) { if(lar->mode & LA_SQUARE) {
if(lv[0]*lar->vec[0]+lv[1]*lar->vec[1]+lv[2]*lar->vec[2]>0.0) { if(lv[0]*lar->vec[0]+lv[1]*lar->vec[1]+lv[2]*lar->vec[2]>0.0) {
@@ -1582,7 +1577,7 @@ void shadelamplus()
i= 1.0; i= 1.0;
soft= 1.0; soft= 1.0;
if(t<lar->spotbl && lar->spotbl!=0.0) { if(t<lar->spotbl && lar->spotbl!=0.0) {
/* zachte gebied */ /* soft area */
i= t/lar->spotbl; i= t/lar->spotbl;
t= i*i; t= i*i;
soft= (3.0*t-2.0*t*i); soft= (3.0*t-2.0*t*i);
@@ -1590,10 +1585,10 @@ void shadelamplus()
} }
if(lar->mode & LA_ONLYSHADOW && lar->shb) { if(lar->mode & LA_ONLYSHADOW && lar->shb) {
if(ma->mode & MA_SHADOW) { if(ma->mode & MA_SHADOW) {
/* inprodukt positief: voorzijde vlak! */ /* dot product positive: front side face! */
inp= vn[0]*lv[0] + vn[1]*lv[1] + vn[2]*lv[2]; inp= vn[0]*lv[0] + vn[1]*lv[1] + vn[2]*lv[2];
if(inp>0.0) { if(inp>0.0) {
/* testshadowbuf==0.0 : 100% schaduw */ /* testshadowbuf==0.0 : 100% shadow */
shadfac = 1.0 - testshadowbuf(lar->shb, inp); shadfac = 1.0 - testshadowbuf(lar->shb, inp);
if(shadfac>0.0) { if(shadfac>0.0) {
shadfac*= inp*soft*lar->energy; shadfac*= inp*soft*lar->energy;
@@ -1611,7 +1606,7 @@ void shadelamplus()
if(lar->mode & LA_ONLYSHADOW) continue; if(lar->mode & LA_ONLYSHADOW) continue;
if(lar->mode & LA_OSATEX) { if(lar->mode & LA_OSATEX) {
R.osatex= 1; /* signaal voor multitex() */ R.osatex= 1; /* signal for multitex() */
O.dxlv[0]= lv[0] - (R.co[0]-lar->co[0]+O.dxco[0])/ld; O.dxlv[0]= lv[0] - (R.co[0]-lar->co[0]+O.dxco[0])/ld;
O.dxlv[1]= lv[1] - (R.co[1]-lar->co[1]+O.dxco[1])/ld; O.dxlv[1]= lv[1] - (R.co[1]-lar->co[1]+O.dxco[1])/ld;
@@ -1624,7 +1619,7 @@ void shadelamplus()
} }
/* inprodukt en reflectivity*/ /* dot product and reflectivity*/
inp=i= vn[0]*lv[0] + vn[1]*lv[1] + vn[2]*lv[2]; inp=i= vn[0]*lv[0] + vn[1]*lv[1] + vn[2]*lv[2];
if(lar->type==LA_HEMI) { if(lar->type==LA_HEMI) {
i= 0.5*i+0.5; i= 0.5*i+0.5;
@@ -1633,8 +1628,8 @@ void shadelamplus()
i*= lampdist*ma->ref; i*= lampdist*ma->ref;
} }
/* schaduw en spec */ /* shadow and spec */
if(i> -0.41) { /* beetje willekeurig, beetje getest */ if(i> -0.41) { /* heuristic value */
shadfac= 1.0; shadfac= 1.0;
if(lar->shb) { if(lar->shb) {
if(ma->mode & MA_SHADOW) { if(ma->mode & MA_SHADOW) {
@@ -1664,8 +1659,6 @@ void shadelamplus()
if(lar->type==LA_HEMI) { if(lar->type==LA_HEMI) {
t= 0.5*t+0.5; t= 0.5*t+0.5;
} }
/* let op: shadfac en lampdist uit onderstaande */
/* no more speclim */ /* no more speclim */
t= ma->spec*RE_Spec(t, ma->har); t= ma->spec*RE_Spec(t, ma->har);
@@ -1738,7 +1731,7 @@ void shadelamplus()
void shadepixel(float x, float y, int vlaknr) void shadepixel(float x, float y, int vlaknr)
/* x,y: windowcoordinaat van 0 tot rectx,y */ /* x,y: window coordinate from 0 to rectx,y */
{ {
static VlakRen *vlr; static VlakRen *vlr;
static VertRen *v1, *v2, *v3; static VertRen *v1, *v2, *v3;
@@ -1748,7 +1741,7 @@ void shadepixel(float x, float y, int vlaknr)
float u, v, l, dl, hox, hoy, detsh, fac, deler, alpha; float u, v, l, dl, hox, hoy, detsh, fac, deler, alpha;
char *cp1, *cp2, *cp3; char *cp1, *cp2, *cp3;
if(R.vlaknr== -1) { /* doet initrender */ if(R.vlaknr== -1) { /* does initrender */
vlr= R.vlr= 0; vlr= R.vlr= 0;
} }
@@ -1764,7 +1757,7 @@ void shadepixel(float x, float y, int vlaknr)
R.mat= vlr->mat; R.mat= vlr->mat;
R.matren= R.mat->ren; R.matren= R.mat->ren;
if(R.matren==0) { /* tijdelijk voor debug */ if(R.matren==0) { /* for debug */
shortcol[3]= 65535; shortcol[3]= 65535;
shortcol[2]= 0; shortcol[2]= 0;
shortcol[1]= 65535; shortcol[1]= 65535;
@@ -1781,7 +1774,7 @@ void shadepixel(float x, float y, int vlaknr)
v1= vlr->v1; v1= vlr->v1;
dvlak= v1->co[0]*vlr->n[0]+v1->co[1]*vlr->n[1]+v1->co[2]*vlr->n[2]; dvlak= v1->co[0]*vlr->n[0]+v1->co[1]*vlr->n[1]+v1->co[2]*vlr->n[2];
if( (vlr->flag & R_SMOOTH) || (R.matren->texco & NEED_UV)) { /* uv nodig */ if( (vlr->flag & R_SMOOTH) || (R.matren->texco & NEED_UV)) { /* uv needed */
if(vlaknr & 0x800000) { if(vlaknr & 0x800000) {
v2= vlr->v3; v2= vlr->v3;
v3= vlr->v4; v3= vlr->v4;
@@ -1808,7 +1801,7 @@ void shadepixel(float x, float y, int vlaknr)
t00/= detsh; t01/=detsh; t00/= detsh; t01/=detsh;
t10/=detsh; t11/=detsh; t10/=detsh; t11/=detsh;
if(vlr->flag & R_SMOOTH) { /* puno's goedzetten */ if(vlr->flag & R_SMOOTH) { /* adjust punos (vertexnormals) */
if(vlr->puno & ME_FLIPV1) { if(vlr->puno & ME_FLIPV1) {
n1[0]= -v1->n[0]; n1[1]= -v1->n[1]; n1[2]= -v1->n[2]; n1[0]= -v1->n[0]; n1[1]= -v1->n[1]; n1[2]= -v1->n[2];
} else { } else {
@@ -1855,7 +1848,7 @@ void shadepixel(float x, float y, int vlaknr)
} }
} }
/* COXYZ nieuwe methode */ /* COXYZ */
if( (G.special1 & G_HOLO) && ((Camera *)G.scene->camera->data)->flag & CAM_HOLO2) { if( (G.special1 & G_HOLO) && ((Camera *)G.scene->camera->data)->flag & CAM_HOLO2) {
R.view[0]= (x+(R.xstart)+1.0+holoofs); R.view[0]= (x+(R.xstart)+1.0+holoofs);
} }
@@ -1904,7 +1897,7 @@ void shadepixel(float x, float y, int vlaknr)
} }
fac= Normalise(R.view); fac= Normalise(R.view);
R.zcor*= fac; /* voor mist */ R.zcor*= fac; /* for mist */
if(R.osatex) { if(R.osatex) {
if( (R.matren->texco & TEXCO_REFL) ) { if( (R.matren->texco & TEXCO_REFL) ) {
@@ -1913,7 +1906,7 @@ void shadepixel(float x, float y, int vlaknr)
} }
} }
/* UV en TEX*/ /* UV and TEX*/
if( (vlr->flag & R_SMOOTH) || (R.matren->texco & NEED_UV)) { if( (vlr->flag & R_SMOOTH) || (R.matren->texco & NEED_UV)) {
if(vlr->snproj==0) { if(vlr->snproj==0) {
u= (R.co[0]-v3->co[0])*t11-(R.co[1]-v3->co[1])*t10; u= (R.co[0]-v3->co[0])*t11-(R.co[1]-v3->co[1])*t10;
@@ -2085,11 +2078,11 @@ void shadepixel(float x, float y, int vlaknr)
} }
/* hierna klopt de u en v EN O.dxuv en O.dyuv niet meer */ /* after this the u and v AND O.dxuv and O.dyuv are incorrect */
if(R.matren->texco & TEXCO_STICKY) { if(R.matren->texco & TEXCO_STICKY) {
if(v2->sticky) { if(v2->sticky) {
/* opnieuw u en v berekenen */ /* recalc u and v again */
hox= x/Zmulx -1.0; hox= x/Zmulx -1.0;
hoy= y/Zmuly -1.0; hoy= y/Zmuly -1.0;
u= (hox - v3->ho[0]/v3->ho[3])*s11 - (hoy - v3->ho[1]/v3->ho[3])*s10; u= (hox - v3->ho[0]/v3->ho[3])*s11 - (hoy - v3->ho[1]/v3->ho[3])*s10;
@@ -2136,7 +2129,7 @@ void shadepixel(float x, float y, int vlaknr)
} }
else alpha= 1.0; else alpha= 1.0;
/* RAYTRACE (tijdelijk?) UITGESCHAKELD */ /* RAYTRACE WAS HERE! */
if(R.matren->alpha!=1.0 || alpha!=1.0) { if(R.matren->alpha!=1.0 || alpha!=1.0) {
fac= alpha*(R.matren->alpha); fac= alpha*(R.matren->alpha);
@@ -2161,7 +2154,7 @@ void shadepixel(float x, float y, int vlaknr)
} }
if(R.flag & R_LAMPHALO) { if(R.flag & R_LAMPHALO) {
if(vlaknr<=0) { /* bereken viewvec en zet R.co op far */ if(vlaknr<=0) { /* calc view vector and put R.co at far */
if( (G.special1 & G_HOLO) && ((Camera *)G.scene->camera->data)->flag & CAM_HOLO2) { if( (G.special1 & G_HOLO) && ((Camera *)G.scene->camera->data)->flag & CAM_HOLO2) {
R.view[0]= (x+(R.xstart)+1.0+holoofs); R.view[0]= (x+(R.xstart)+1.0+holoofs);
@@ -2270,7 +2263,7 @@ void addps(long *rd, int vlak, unsigned int z, short ronde)
return; return;
} }
/* eerste PS maken */ /* make first PS (pixel struct) */
if((psmteller & 4095)==0) prev= addpsmain(); if((psmteller & 4095)==0) prev= addpsmain();
else prev++; else prev++;
psmteller++; psmteller++;
@@ -2298,7 +2291,7 @@ float count_maskf(unsigned short mask)
void add_filt_mask(unsigned int mask, unsigned short *col, unsigned int *rb1, unsigned int *rb2, unsigned int *rb3) void add_filt_mask(unsigned int mask, unsigned short *col, unsigned int *rb1, unsigned int *rb2, unsigned int *rb3)
{ {
/* bereken de waarde van mask */ /* calc the value of mask */
unsigned int a, maskand, maskshift; unsigned int a, maskand, maskshift;
int j; int j;
unsigned short val, r, g, b, al; unsigned short val, r, g, b, al;
@@ -2353,7 +2346,7 @@ void edge_enhance(void)
int val, y, x, col, *rz, *rz1, *rz2, *rz3; int val, y, x, col, *rz, *rz1, *rz2, *rz3;
char *cp; char *cp;
/* alle getallen in zbuffer 3 naar rechts shiften */ /* shift values in zbuffer 3 to the right */
rz= (int *)R.rectz; rz= (int *)R.rectz;
if(rz==0) return; if(rz==0) return;
@@ -2363,13 +2356,6 @@ void edge_enhance(void)
} }
} }
/* eerste order, werkt toch niet goed!:
val= abs(rz1[0]-rz2[1])+ 2*abs(rz1[1]-rz2[1])+ abs(rz1[2]-rz2[1]);
val+= 2*abs(rz2[0]-rz2[1])+ 2*abs(rz1[2]-rz2[1]);
val+= abs(rz3[0]-rz2[1])+ 2*abs(rz3[1]-rz2[1])+ abs(rz3[2]-rz2[1]);
*rz= val;
*/
rz1= (int *)R.rectz; rz1= (int *)R.rectz;
rz2= rz1+R.rectx; rz2= rz1+R.rectx;
rz3= rz2+R.rectx; rz3= rz2+R.rectx;
@@ -2427,7 +2413,7 @@ void edge_enhance(void)
} }
/* ********************* HOOFDLUSSEN ******************** */ /* ********************* MAINLOOPS ******************** */
extern unsigned short *Acolrow; extern unsigned short *Acolrow;
/* short zbuffermetdehand(); */ /* short zbuffermetdehand(); */
@@ -2488,12 +2474,12 @@ void zbufshadeDA(void) /* Delta Accum Pixel Struct */
rz+= R.rectx; rz+= R.rectx;
} }
} }
/* 1 is voor osa */ /* 1 is for osa */
if(R.r.mode & R_EDGE) edge_enhance(); if(R.r.mode & R_EDGE) edge_enhance();
if(!(v%256)&&RE_local_test_break()) break; /*Hos,RPW, fixes slow render bug*/ if( !(v % 256) && RE_local_test_break()) break; /*Hos,RPW, fixes slow render bug*/
} }
if(R.flag & (R_ZTRA+R_HALO) ) { /* om de juiste zbuffer Z voor transp en halo's terug te halen */ if(R.flag & (R_ZTRA+R_HALO) ) { /* to get back correct values of zbuffer Z for transp and halos */
xd= jit[0][0]; xd= jit[0][0];
yd= jit[0][1]; yd= jit[0][1];
Zjitx= -xd; Zjitx= -xd;
@@ -2510,7 +2496,7 @@ void zbufshadeDA(void) /* Delta Accum Pixel Struct */
fullmask= (1<<R.osa)-1; fullmask= (1<<R.osa)-1;
/* de rowbuf is 4 pixels breder dan het plaatje! */ /* the rowbuf is 4 pixels larger than an image! */
rowbuf1= MEM_callocN(3*(R.rectx+4)*4*sizeof(float), "ZbufshadeDA3"); rowbuf1= MEM_callocN(3*(R.rectx+4)*4*sizeof(float), "ZbufshadeDA3");
rowbuf2= MEM_callocN(3*(R.rectx+4)*4*sizeof(float), "ZbufshadeDA3"); rowbuf2= MEM_callocN(3*(R.rectx+4)*4*sizeof(float), "ZbufshadeDA3");
rowbuf3= MEM_callocN(3*(R.rectx+4)*4*sizeof(float), "ZbufshadeDA3"); rowbuf3= MEM_callocN(3*(R.rectx+4)*4*sizeof(float), "ZbufshadeDA3");
@@ -2571,7 +2557,7 @@ void zbufshadeDA(void) /* Delta Accum Pixel Struct */
colrb= (unsigned short *)(rowbuf3+4); colrb= (unsigned short *)(rowbuf3+4);
/* LET OP: ENDIAN */ /* WATCH IT: ENDIAN */
for(x=0; x<R.rectx; x++,colrt+=4) { for(x=0; x<R.rectx; x++,colrt+=4) {
colrt[0]= ( (char *) (gamtab+colrb[0+MOST_SIG_BYTE]) )[MOST_SIG_BYTE]; colrt[0]= ( (char *) (gamtab+colrb[0+MOST_SIG_BYTE]) )[MOST_SIG_BYTE];
@@ -2597,13 +2583,13 @@ void zbufshadeDA(void) /* Delta Accum Pixel Struct */
} }
if(R.flag & R_HALO) { if(R.flag & R_HALO) {
/* van deze pixels zijn de pixstr al 1 scanline oud */ /* from these pixels the pixstr is 1 scanline old */
scanlinehaloPS(rz-R.rectx, rd-2*R.rectx, ((unsigned int *)colrt)-R.rectx, y-1); scanlinehaloPS(rz-R.rectx, rd-2*R.rectx, ((unsigned int *)colrt)-R.rectx, y-1);
} }
scanlinesky(colrt-4*R.rectx, y-1); scanlinesky(colrt-4*R.rectx, y-1);
/* scanline begint netjes: halo's gebruiken ook textures! */ /* scanline starts nicely: halos use textures as well! */
R.vlaknr= -1; R.vlaknr= -1;
} }
@@ -2623,7 +2609,7 @@ void zbufshadeDA(void) /* Delta Accum Pixel Struct */
} }
rz+= R.rectx; rz+= R.rectx;
} }
if(!(y%256)&&RE_local_test_break()) break; /*Hos,RPW, fixes slow render bug */ if(!(y % 256) && RE_local_test_break()) break; /* Hos,RPW, fixes slow render bug */
} }
if( (R.r.mode & R_EDGE) && RE_local_test_break()==0) { if( (R.r.mode & R_EDGE) && RE_local_test_break()==0) {
@@ -2633,8 +2619,6 @@ void zbufshadeDA(void) /* Delta Accum Pixel Struct */
addalphaOver((char *)rt, (char *)rp); addalphaOver((char *)rt, (char *)rp);
} }
} }
/* hier stond dof */
MEM_freeN(R.rectdaps); MEM_freeN(R.rectdaps);
freeps(); freeps();
@@ -2669,7 +2653,7 @@ void zbufshade(void)
#ifdef BBIG_ENDIAN #ifdef BBIG_ENDIAN
#else #else
charcol++; /* short anders uitlezen */ charcol++; /* short is read different then */
#endif #endif
if(R.flag & R_ZTRA) bgnaccumbuf(); if(R.flag & R_ZTRA) bgnaccumbuf();
@@ -2724,7 +2708,7 @@ void zbufshade(void)
R.rectot); R.rectot);
} }
if(!(y%256)&&RE_local_test_break()) break; /*Hos,RPW, Fixes Slow render bug */ if(!(y % 256) && RE_local_test_break()) break; /*Hos,RPW, Fixes Slow render bug */
} }
if(R.flag & R_ZTRA) endaccumbuf(); if(R.flag & R_ZTRA) endaccumbuf();
@@ -2737,7 +2721,7 @@ void zbufshade(void)
/* ------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------ */
void renderhalo(HaloRen *har) /* postprocess versie */ void renderhalo(HaloRen *har) /* postprocess version */
{ {
float dist, xsq, ysq, xn, yn; float dist, xsq, ysq, xn, yn;
@@ -2787,12 +2771,12 @@ void renderhalo(HaloRen *har) /* postprocess versie */
rectt+= R.rectx; rectt+= R.rectx;
if(!(y%256)&&RE_local_test_break()) break; /* Hos,RPW, fixes slow render bug */ if( !(y % 256) && RE_local_test_break()) break; /* Hos,RPW, fixes slow render bug */
} }
} }
} }
} /* end of void renderhalo(HaloRen *har), postprocess versie */ } /* end of void renderhalo(HaloRen *har), postprocess version */
/* ------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------ */
@@ -2811,13 +2795,13 @@ void RE_renderflare(HaloRen *har)
alfa= har->alfa; alfa= har->alfa;
visifac= R.ycor*(har->pixels); visifac= R.ycor*(har->pixels);
/* alle stralen opgeteld / r^3 == 1.0! */ /* all radials added / r^3 == 1.0! */
visifac /= (har->rad*har->rad*har->rad); visifac /= (har->rad*har->rad*har->rad);
visifac*= visifac; visifac*= visifac;
ma= har->mat; ma= har->mat;
/* eerste halo: gewoon doen */ /* first halo: just do */
har->rad= rad*ma->flaresize*visifac; har->rad= rad*ma->flaresize*visifac;
har->radsq= har->rad*har->rad; har->radsq= har->rad*har->rad;
@@ -2827,7 +2811,7 @@ void RE_renderflare(HaloRen *har)
renderhalo(har); renderhalo(har);
/* volgende halo's: de flares */ /* next halo's: the flares */
rc= hashvectf + ma->seed2; rc= hashvectf + ma->seed2;
for(b=1; b<har->flarec; b++) { for(b=1; b<har->flarec; b++) {
@@ -2876,7 +2860,7 @@ void RE_renderflare(HaloRen *har)
void add_halo_flare(void) void add_halo_flare(void)
{ {
/* extern void RE_projectverto(); */ /* uit zbuf.c */ /* extern void RE_projectverto(); */ /* zbuf.c */
HaloRen *har = NULL; HaloRen *har = NULL;
int a, mode; int a, mode;
@@ -2887,7 +2871,7 @@ void add_halo_flare(void)
R.xend= R.xstart+R.rectx-1; R.xend= R.xstart+R.rectx-1;
R.yend= R.ystart+R.recty-1; R.yend= R.ystart+R.recty-1;
RE_setwindowclip(1,-1); /* geen jit:(-1) */ RE_setwindowclip(1,-1); /* no jit:(-1) */
setzbufvlaggen(RE_projectverto); setzbufvlaggen(RE_projectverto);
for(a=0; a<R.tothalo; a++) { for(a=0; a<R.tothalo; a++) {