Smooth sky scrolling by Manoel Kasimier

This commit is contained in:
eukos 2015-09-06 19:16:52 +02:00
parent b43eb0cc59
commit a4653b07a1
7 changed files with 133 additions and 432 deletions

View file

@ -891,10 +891,9 @@ Draw_Init
=============== ===============
*/ */
byte menumap[256][16]; // Used for menu backgrounds and simple colormod
byte menumap[256][16]; // Used for menu backgrounds and simple colormod byte gelmap[256]; // Unused id effect TO be used somehow. made redundant by menumap
byte gelmap[256]; // Unused id effect TO be used somehow. made redundant by menumap byte remapmap[256]; // For translating an old palette to new on load
byte remapmap[256]; // For translating an old palette to new on load
int translate_bsp; int translate_bsp;
int translate_mdl; int translate_mdl;
@ -906,9 +905,8 @@ byte coltranslate[256]; // TranslateToCustomPal - used for taking one palette t
pixel_t addTable[256][256]; // Additive blending effect pixel_t addTable[256][256]; // Additive blending effect
pixel_t mulTable[256][256]; // Multiply blending effect (for colormod) pixel_t mulTable[256][256]; // Multiply blending effect (for colormod)
pixel_t transTable[256][256]; // Alpha blending by 33% and 66% pixel_t transTable[256][256]; // Alpha blending by 33% and 66%
//pixel_t alphaTable[256][256]; // Alpha blending by row
pixel_t waterTable[256][256]; // Not cached to disk - for wateralpha only (THIS IS A STUPID but only sensible way to go for this) pixel_t waterTable[256][256]; // Not cached to disk - for wateralpha only (THIS IS A STUPID but only sensible way to go for this)
int smoothtable[32768][3]; // a table for smoothing out things.... :( int smoothtable[32768][3]; // a table for smoothing out things.... :(
int noisetable[512][5]; // a table for table int noisetable[512][5]; // a table for table
int wootel[32][32][32]; // alternate kernel blend int wootel[32][32][32]; // alternate kernel blend
@ -922,72 +920,54 @@ void InitGel (byte *palette)
for (i=0 ; i<256 ; i++) for (i=0 ; i<256 ; i++)
{ {
// r = (palette[i*3]>>4);
r = (palette[i*3] + palette[i*3+1] + palette[i*3+2])/(16*3); r = (palette[i*3] + palette[i*3+1] + palette[i*3+2])/(16*3);
gelmap[i] = /* 64 */ 0 + r; gelmap[i] = 0 + r;
} }
} }
// Gamepad notes:
// AUX29 - dpad up
// AUX32 - dpad left
// AUX30 - dpad right
// AUX31 - dpad down
extern cvar_t *temp2;
void InitWootel (void) void InitWootel (void)
{ {
int i; int i;
int r; int r;
int ordered = 0;
float ay, ae; float ay, ae;
int result; int result;
int range = 32; int range = 32;
float spread = 1024; float spread = 1024;
//float spread = temp2->value;
for (i=1 ; i<range; i++) for (i=1 ; i<range; i++)
{ {
ae = i / range; ae = i / range;
for (r=0; r<32; r++){ for (r=0; r<32; r++)
ay = (RandomRange(0,spread)); {
ay = (RandomRange(0,spread));
result = (float)ay; result = (float)ay;
//if (result > 512) result = 512; wootel[i][r][0] = result;
//if (result < 0) result = 0;
wootel[i][r][0] = result;
} }
} }
} }
void InitNoise (void) void InitNoise (void)
{ {
int i; int i;
int r; int r;
float ay, ae; float ay, ae;
int result; int result;
int range = 64; int range = 64;
float spread = 1024; float spread = 1024;
//float spread = temp2->value;
for (i=1 ; i<range; i++) for (i=1 ; i<range; i++)
{ {
ae = i / range; ae = i / range;
for (r=0; r<6; r++){ for (r=0; r<6; r++)
ay = (RandomRange(0,spread)); {
ay = (RandomRange(0,spread));
result = (float)ay; result = (float)ay;
//if (result > 512) result = 512; noisetable[i][r] = result;
//if (result < 0) result = 0;
noisetable[i][r] = result;
//noisetable[i][r] = (float)(range * ay);
} }
} }
for (r=0; r<6; r++){ for (r=0; r<6; r++)
noisetable[0][r] = 0; //yeah.... 0 noisetable[0][r] = 0;
//noisetable[64][r] = 64; //yeah...SIXTY FOUR
}
} }
extern cvar_t *temp3; extern cvar_t *temp3;
@ -1000,34 +980,33 @@ void InitOrder (void)
int result; int result;
int range = 64; int range = 64;
float spread = 1024; float spread = 1024;
//float spread = temp2->value;
for (i=1 ; i<range; i++) for (i=1 ; i<range; i++)
{ {
ae = i / range; ae = i / range;
t = (i & 1) << 1; t = (i & 1) << 1;
for (r=0; r<6; r++){ for (r=0; r<6; r++)
{
int eep, erp; int eep, erp;
erp = (int)(range / (r + 1)); erp = (int)(range / (r + 1));
for (eep=0; eep<1024; eep+=erp) for (eep=0; eep<1024; eep+=erp)
{ {
ay = 2048; ay = 2048;
if ((i & 1) != t) if ((i & 1) != t)
ay -= 768; ay -= 768;
}
result = (float)ay;
noisetable[i][r] = result;
} }
result = (float)ay;
noisetable[i][r] = result;
}
} }
for (r=0; r<6; r++){ for (r=0; r<6; r++)
noisetable[0][r] = 0; //yeah.... 0 noisetable[0][r] = 0;
}
} }
@ -1039,32 +1018,28 @@ void InitSimple (void)
int result; int result;
int range = 64; int range = 64;
float spread = 1024; float spread = 1024;
//float spread = temp2->value;
for (i=1 ; i<range; i++) for (i=1 ; i<range; i++)
{ {
ae = i / range; ae = i / range;
for (r=0; r<6; r++){ for (r=0; r<6; r++)
int ef; {
if (r == 0 || r == 2 || r == 4 || r == 6) int ef;
ef = 1024;
else
ef = 512;
ay = ef;
result = (float)ay; if (r == 0 || r == 2 || r == 4 || r == 6)
//if (result > 512) result = 512; ef = 1024;
//if (result < 0) result = 0; else
noisetable[i][r] = result; ef = 512;
//noisetable[i][r] = (float)(range * ay); ay = ef;
result = (float)ay;
noisetable[i][r] = result;
} }
} }
for (r=0; r<6; r++){ for (r=0; r<6; r++)
noisetable[0][r] = 0; //yeah.... 0 noisetable[0][r] = 0;
//noisetable[64][r] = 64; //yeah...SIXTY FOUR
}
} }
// leilei - smooth table for some 'smooth' things... like model shading // leilei - smooth table for some 'smooth' things... like model shading
@ -1078,14 +1053,12 @@ void InitSmooth (void)
float noiiz; float noiiz;
int range = 64; int range = 64;
InitNoise(); InitNoise();
// InitOrder();
// InitSimple();
for (i=0 ; i<32768; i+=range) for (i=0 ; i<32768; i+=range)
{ {
for (r=0; r<range; r++){ for (r=0; r<range; r++){
for (k=0; k<6; k++){ for (k=0; k<6; k++)
smoothtable[i+r][k] = MID(1024, i + 512 - (noisetable[r][k]),16000); smoothtable[i+r][k] = MID(1024, i + 512 - (noisetable[r][k]),16000);
}
} }
} }
@ -1108,36 +1081,32 @@ void InitRemap (byte *palette)
float s; float s;
for (i=0 ; i<255 ; i++) for (i=0 ; i<255 ; i++)
{ {
r = palette[i*3]; r = palette[i*3];
g = palette[i*3+1]; g = palette[i*3+1];
b = palette[i*3+2]; b = palette[i*3+2];
if (r < 0) r = 0;
if (g < 0) g = 0; if (r < 0) r = 0;
if (b < 0) b = 0; if (g < 0) g = 0;
if (b < 0) b = 0;
#ifdef EGAHACK #ifdef EGAHACK
s = (r * 0.33333) + (g * 0.33333) + (b * 0.33333); s = (r * 0.33333) + (g * 0.33333) + (b * 0.33333);
r = s + (r - s) * sat; r = s + (r - s) * sat;
g = s + (g - s) * sat; g = s + (g - s) * sat;
b = s + (b - s) * sat; b = s + (b - s) * sat;
#endif #endif
if (r > 255) r = 255; if (r > 255) r = 255;
if (g > 255) g = 255; if (g > 255) g = 255;
if (b > 255) b = 255; if (b > 255) b = 255;
coltranslate[i] = BestColor(r,g,b, 0, 254); coltranslate[i] = BestColor(r,g,b, 0, 254);
remapmap [i] = BestColor(r,g,b, 0, 256-host_fullbrights); // no fullbrights... remapmap[i] = BestColor(r,g,b, 0, 256-host_fullbrights); // no fullbrights...
} }
coltranslate[256] = 256; coltranslate[256] = 256;
coltranslate[255] = 255; // null is null coltranslate[255] = 255; // null is null
rmap_ready = 1; rmap_ready = 1;
} }
// makes a little remap table for our new palette to use // makes a little remap table for our new palette to use
void InitRemapEGA (byte *palette) void InitRemapEGA (byte *palette)
{ {

View file

@ -173,7 +173,6 @@ void D_PolysetUpdateTables (void);
// these are currently for internal use only, and should not be used by drivers // these are currently for internal use only, and should not be used by drivers
extern int r_skydirect; extern int r_skydirect;
extern byte *r_skysource;
// transparency types for D_DrawRect () // transparency types for D_DrawRect ()
#define DR_SOLID 0 #define DR_SOLID 0
@ -210,8 +209,6 @@ extern drawsurf_t r_drawsurf;
void R_DrawSurface (void); void R_DrawSurface (void);
void R_DrawSurface32 (void); void R_DrawSurface32 (void);
void R_GenTile (msurface_t *psurf, void *pdest);
// !!! if this is changed, it must be changed in d_ifacea.h too !!! // !!! if this is changed, it must be changed in d_ifacea.h too !!!
#define TURB_TEX_SIZE 64 // base turbulent texture size #define TURB_TEX_SIZE 64 // base turbulent texture size

View file

@ -141,9 +141,6 @@ extern void TransformVector (vec3_t in, vec3_t out);
extern void SetUpForLineScan(fixed8_t startvertu, fixed8_t startvertv, extern void SetUpForLineScan(fixed8_t startvertu, fixed8_t startvertv,
fixed8_t endvertu, fixed8_t endvertv); fixed8_t endvertu, fixed8_t endvertv);
extern int r_skymade;
extern void R_MakeSky (void);
extern int ubasestep, errorterm, erroradjustup, erroradjustdown; extern int ubasestep, errorterm, erroradjustup, erroradjustdown;
// flags in finalvert_t.flags // flags in finalvert_t.flags

View file

@ -240,11 +240,6 @@ void D_DrawSurfaces (void)
if (s->flags & SURF_DRAWSKY) if (s->flags & SURF_DRAWSKY)
{ {
if (!r_skymade)
{
R_MakeSky ();
}
D_DrawSkyScans8 (s->spans); D_DrawSkyScans8 (s->spans);
D_DrawZSpans (s->spans); D_DrawZSpans (s->spans);
} }

View file

@ -1,4 +1,5 @@
/* /*
Copyright (C) Manoel Kasimier
Copyright (C) 1996-1997 Id Software, Inc. Copyright (C) 1996-1997 Id Software, Inc.
This program is free software; you can redistribute it and/or This program is free software; you can redistribute it and/or
@ -27,60 +28,38 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define SKY_SPAN_MAX (1 << SKY_SPAN_SHIFT) #define SKY_SPAN_MAX (1 << SKY_SPAN_SHIFT)
extern qboolean r_dowarp; extern qboolean r_dowarp;
static float timespeed1, timespeed2;
extern byte *skyunderlay, *skyoverlay;
/* /*
================= =================
D_Sky_uv_To_st D_Sky_uv_To_st
================= =================
*/ */
void D_Sky_uv_To_st (int u, int v, fixed16_t *s, fixed16_t *t, fixed16_t *s2, fixed16_t *t2)
void D_Sky_uv_To_st (int u, int v, fixed16_t *s, fixed16_t *t)
{ {
float wu, wv, temp; float wu, wv;
vec3_t end; vec3_t end;
if (r_refdef.vrect.width >= r_refdef.vrect.height) wu = (u - xcenter) / xscale;
temp = (float)r_refdef.vrect.width; wv = (ycenter - v) / yscale;
else
temp = (float)r_refdef.vrect.height;
// leilei - sky fix for low detail end[0] = vpn[0] + wu*vright[0] + wv*vup[0];
if(r_docrap == 1) end[1] = vpn[1] + wu*vright[1] + wv*vup[1];
{ end[2] = vpn[2] + wu*vright[2] + wv*vup[2];
wu = 8192.0 * (float)(u-((int)vid.maxlowwidth>>1)) / temp;
wv = 8192.0 * (float)(((int)vid.maxlowheight>>1)-v) / temp;
}
else if(r_docrap > 1)
{
wu = 8192.0 * (float)(u-((int)vid.maxwarpwidth>>1)) / temp;
wv = 8192.0 * (float)(((int)vid.maxwarpheight>>1)-v) / temp;
}
else if(r_dowarp)
{
wu = 8192.0 * (float)(u-((int)320>>1)) / temp;
wv = 8192.0 * (float)(((int)200>>1)-v) / temp;
}
else
{
wu = 8192.0 * (float)(u-((int)vid.width>>1)) / temp;
wv = 8192.0 * (float)(((int)vid.height>>1)-v) / temp;
}
end[0] = 4096*vpn[0] + wu*vright[0] + wv*vup[0];
end[1] = 4096*vpn[1] + wu*vright[1] + wv*vup[1];
end[2] = 4096*vpn[2] + wu*vright[2] + wv*vup[2];
end[2] *= 3; end[2] *= 3;
VectorNormalize (end); VectorNormalize (end);
*s = (int)((timespeed1 + 6*(SKYSIZE/2-1)*end[0]) * 0x10000);
temp = skytime*skyspeed; // TODO: add D_SetupFrame & set this there *t = (int)((timespeed1 + 6*(SKYSIZE/2-1)*end[1]) * 0x10000);
*s = (int)((temp + 6*(SKYSIZE/2-1)*end[0]) * 0x10000); *s2 = (int)((timespeed2 + 6*(SKYSIZE/2-1)*end[0]) * 0x10000);
*t = (int)((temp + 6*(SKYSIZE/2-1)*end[1]) * 0x10000); *t2 = (int)((timespeed2 + 6*(SKYSIZE/2-1)*end[1]) * 0x10000);
} }
unsigned char D_DrawSkyPixelOpaque (unsigned char pixel1, unsigned char pixel2)
{
return pixel2 ? pixel2 : pixel1;
}
/* /*
================= =================
@ -89,25 +68,28 @@ D_DrawSkyScans8
*/ */
void D_DrawSkyScans8 (espan_t *pspan) void D_DrawSkyScans8 (espan_t *pspan)
{ {
int count, spancount, u, v; int count, spancount, u, v;
unsigned char *pdest; unsigned char *pdest;
fixed16_t s, t, snext, tnext, sstep, tstep; fixed16_t s, t, snext, tnext, sstep, tstep;
int spancountminus1; int spancountminus1;
sstep = 0; // keep compiler happy fixed16_t s2, t2, snext2, tnext2, sstep2, tstep2;
tstep = 0; // ditto timespeed1=skytime*skyspeed;//*4; // Fightoon modification
timespeed2=timespeed1*2.0;//*-1; // Fightoon modification
sstep2 = 0;
tstep2 = 0;
sstep = 0; // keep compiler happy
tstep = 0; // ditto
do do
{ {
pdest = (unsigned char *)((byte *)d_viewbuffer + pdest = (unsigned char *)((byte *)d_viewbuffer + (screenwidth * pspan->v) + pspan->u);
(screenwidth * pspan->v) + pspan->u);
count = pspan->count; count = pspan->count;
// calculate the initial s & t
u = pspan->u; u = pspan->u;
v = pspan->v; v = pspan->v;
D_Sky_uv_To_st (u, v, &s, &t); D_Sky_uv_To_st (u, v, &s, &t, &s2, &t2);
do do
{ {
@ -119,45 +101,51 @@ void D_DrawSkyScans8 (espan_t *pspan)
count -= spancount; count -= spancount;
if (count) if (count)
{ {
u += spancount; u += spancount;
// calculate s and t at far end of span, // calculate s and t at far end of span,
// calculate s and t steps across span by shifting // calculate s and t steps across span by shifting
D_Sky_uv_To_st (u, v, &snext, &tnext); D_Sky_uv_To_st (u, v, &snext, &tnext, &snext2, &tnext2);
sstep = (snext - s) >> SKY_SPAN_SHIFT; sstep = (snext - s) >> SKY_SPAN_SHIFT;
tstep = (tnext - t) >> SKY_SPAN_SHIFT; tstep = (tnext - t) >> SKY_SPAN_SHIFT;
sstep2 = (snext2 - s2) >> SKY_SPAN_SHIFT;
tstep2 = (tnext2 - t2) >> SKY_SPAN_SHIFT;
} }
else else
{ {
// calculate s and t at last pixel in span, // calculate s and t at last pixel in span,
// calculate s and t steps across span by division // calculate s and t steps across span by division
spancountminus1 = (float)(spancount - 1); spancountminus1 = (float)(spancount - 1);
if (spancountminus1 > 0) if (spancountminus1 > 0)
{ {
u += spancountminus1; u += spancountminus1;
D_Sky_uv_To_st (u, v, &snext, &tnext); D_Sky_uv_To_st (u, v, &snext, &tnext, &snext2, &tnext2);
sstep = (snext - s) / spancountminus1; sstep = (snext - s) / spancountminus1;
tstep = (tnext - t) / spancountminus1; tstep = (tnext - t) / spancountminus1;
sstep2 = (snext2 - s2) / spancountminus1;
tstep2 = (tnext2 - t2) / spancountminus1;
} }
} }
do do
{ {
*pdest++ = r_skysource[((t & R_SKY_TMASK) >> 8) + *pdest++ = D_DrawSkyPixelOpaque(skyunderlay[((t & R_SKY_TMASK) >> 8) + ((s & R_SKY_SMASK) >> 16)],
((s & R_SKY_SMASK) >> 16)]; skyoverlay [((t2 & R_SKY_TMASK) >> 8) + ((s2 & R_SKY_SMASK) >> 16)]);
s += sstep; s += sstep;
t += tstep; t += tstep;
} while (--spancount > 0); s2 += sstep2;
t2 += tstep2;
s = snext; } while (--spancount > 0);
t = tnext;
s = snext;
t = tnext;
s2 = snext2;
t2 = tnext2;
} while (count > 0); } while (count > 0);
} while ((pspan = pspan->pnext) != NULL); } while ((pspan = pspan->pnext) != NULL);
} }

View file

@ -31,20 +31,10 @@ float skyspeed, skyspeed2;
float skytime; float skytime;
byte *r_skysource; byte *r_skysource;
;
int r_skymade;
int r_skydirect; // not used? int r_skydirect; // not used?
byte *skyunderlay, *skyoverlay;
// TODO: clean up these routines
byte bottomsky[128*131];
byte bottommask[128*131];
byte newsky[128*256]; // newsky and topsky both pack in here, 128 bytes
// of newsky on the left of each scan, 128 bytes
// of topsky on the right, because the low-level
// drawers need 256-byte scan widths
/* /*
============= =============
@ -55,204 +45,10 @@ A sky texture is 256*128, with the right side being a masked overlay
*/ */
void R_InitSky (texture_t *mt) void R_InitSky (texture_t *mt)
{ {
int i, j; skyoverlay = (byte *)mt + mt->offsets[0];
byte *src; skyunderlay = skyoverlay+128;
src = (byte *)mt + mt->offsets[0];
for (i=0 ; i<128 ; i++)
{
for (j=0 ; j<128 ; j++)
{
newsky[(i*256) + j + 128] = src[i*256 + j + 128];
}
}
for (i=0 ; i<128 ; i++)
{
for (j=0 ; j<131 ; j++)
{
if (src[i*256 + (j & 0x7F)])
{
bottomsky[(i*131) + j] = src[i*256 + (j & 0x7F)];
bottommask[(i*131) + j] = 0;
}
else
{
bottomsky[(i*131) + j] = 0;
bottommask[(i*131) + j] = 0xff;
}
}
}
r_skysource = newsky;
} }
/*
=================
R_MakeSky
=================
*/
void R_MakeSky (void)
{
int x, y;
int ofs, baseofs;
int xshift, yshift;
unsigned *pnewsky;
static int xlast = -1, ylast = -1;
xshift = skytime*skyspeed;
yshift = skytime*skyspeed;
if ((xshift == xlast) && (yshift == ylast))
return;
xlast = xshift;
ylast = yshift;
pnewsky = (unsigned *)&newsky[0];
for (y=0 ; y<SKYSIZE ; y++)
{
baseofs = ((y+yshift) & SKYMASK) * 131;
// FIXME: clean this up
#if UNALIGNED_OK
for (x=0 ; x<SKYSIZE ; x += 4)
{
ofs = baseofs + ((x+xshift) & SKYMASK);
// PORT: unaligned dword access to bottommask and bottomsky
*pnewsky = (*(pnewsky + (128 / sizeof (unsigned))) &
*(unsigned *)&bottommask[ofs]) |
*(unsigned *)&bottomsky[ofs];
pnewsky++;
}
#else
for (x=0 ; x<SKYSIZE ; x++)
{
ofs = baseofs + ((x+xshift) & SKYMASK);
*(byte *)pnewsky = (*((byte *)pnewsky + 128) &
*(byte *)&bottommask[ofs]) |
*(byte *)&bottomsky[ofs];
pnewsky = (unsigned *)((byte *)pnewsky + 1);
}
#endif
pnewsky += 128 / sizeof (unsigned);
}
r_skymade = 1;
}
/*
=================
R_GenSkyTile
=================
*/
void R_GenSkyTile (void *pdest)
{
int x, y;
int ofs, baseofs;
int xshift, yshift;
unsigned *pnewsky;
unsigned *pd;
xshift = skytime*skyspeed;
yshift = skytime*skyspeed;
pnewsky = (unsigned *)&newsky[0];
pd = (unsigned *)pdest;
for (y=0 ; y<SKYSIZE ; y++)
{
baseofs = ((y+yshift) & SKYMASK) * 131;
// FIXME: clean this up
#if UNALIGNED_OK
for (x=0 ; x<SKYSIZE ; x += 4)
{
ofs = baseofs + ((x+xshift) & SKYMASK);
// PORT: unaligned dword access to bottommask and bottomsky
*pd = (*(pnewsky + (128 / sizeof (unsigned))) &
*(unsigned *)&bottommask[ofs]) |
*(unsigned *)&bottomsky[ofs];
pnewsky++;
pd++;
}
#else
for (x=0 ; x<SKYSIZE ; x++)
{
ofs = baseofs + ((x+xshift) & SKYMASK);
*(byte *)pd = (*((byte *)pnewsky + 128) &
*(byte *)&bottommask[ofs]) |
*(byte *)&bottomsky[ofs];
pnewsky = (unsigned *)((byte *)pnewsky + 1);
pd = (unsigned *)((byte *)pd + 1);
}
#endif
pnewsky += 128 / sizeof (unsigned);
}
}
/*
=================
R_GenSkyTile16
=================
*/
void R_GenSkyTile16 (void *pdest)
{
int x, y;
int ofs, baseofs;
int xshift, yshift;
byte *pnewsky;
unsigned short *pd;
xshift = skytime * skyspeed;
yshift = skytime * skyspeed;
pnewsky = (byte *)&newsky[0];
pd = (unsigned short *)pdest;
for (y=0 ; y<SKYSIZE ; y++)
{
baseofs = ((y+yshift) & SKYMASK) * 131;
// FIXME: clean this up
// FIXME: do faster unaligned version?
for (x=0 ; x<SKYSIZE ; x++)
{
ofs = baseofs + ((x+xshift) & SKYMASK);
*pd = d_8to16table[(*(pnewsky + 128) &
*(byte *)&bottommask[ofs]) |
*(byte *)&bottomsky[ofs]];
pnewsky++;
pd++;
}
pnewsky += TILE_SIZE;
}
}
/* /*
============= =============
R_SetSkyFrame R_SetSkyFrame
@ -273,8 +69,6 @@ void R_SetSkyFrame (void)
skytime = cl.time - ((int)(cl.time / temp) * temp); skytime = cl.time - ((int)(cl.time / temp) * temp);
r_skymade = 0;
} }

View file

@ -3484,45 +3484,6 @@ void R_GenTurbTile16 (pixel_t *pbasetex, void *pdest)
} }
} }
/*
================
R_GenTile
================
*/
void R_GenTile (msurface_t *psurf, void *pdest)
{
if (psurf->flags & SURF_DRAWTURB)
{
if (r_pixbytes == 1)
{
R_GenTurbTile ((pixel_t *)
((byte *)psurf->texinfo->texture + psurf->texinfo->texture->offsets[0]), pdest);
}
else
{
R_GenTurbTile16 ((pixel_t *)
((byte *)psurf->texinfo->texture + psurf->texinfo->texture->offsets[0]), pdest);
}
}
else if (psurf->flags & SURF_DRAWSKY)
{
if (r_pixbytes == 1)
{
R_GenSkyTile (pdest);
}
else
{
R_GenSkyTile16 (pdest);
}
}
else
{
Sys_Error ("Unknown tile type");
}
}
/* /*
================ ================
R_BuildSurfaceDisplayList R_BuildSurfaceDisplayList