Texture filtering and 24 bit lightmaps work again, minor cleanups

This commit is contained in:
Marco Vicari 2016-02-20 11:50:46 +01:00
parent d0ac39bba4
commit 911190a5bb
8 changed files with 114 additions and 315 deletions

View file

@ -1103,7 +1103,6 @@ extern int inthedos;
void FogTableRefresh (void);
extern cvar_t *r_tranquality;
cvar_t *engoo_lookuppalette;
#ifdef _WIN32
extern unsigned char vid_curpal[256*3];

View file

@ -227,13 +227,7 @@ float AdaptFovx (float fov_x, float width, float height)
if (fov_x < 1 || fov_x > 179)
fov_x = 90; // fallback to 90 if we fail...
// Sys_Error ("Bad fov: %f", fov_x);
#ifndef _WIN32
if (vid.aspect > 1.10f)
return fov_x; // there's no such thing as a widescreen dos machine
#endif
// if (!scr_fov_adapt.value)
// return fov_x;
if ((x = height / width) == 0.75)
return fov_x;
a = atan((0.75 - ferv)/ x * tan(fov_x / 360 * M_PI));
@ -418,69 +412,6 @@ void SCR_StretchRefresh (void)
return; // don't even try
if (!scalefactorv)
return; // don't even try
/*
screenfake = 0;
if (screenfake == 1){
vid.vconwidth = 320;
vid.vconheight = 200;
scalefactor = vid.width / vid.vconwidth;
scalefactorv = vid.height / vid.vconheight;
yeahimconsoled = 1;
sb_scaled = 1;
menu_scaled = 1;
console_scaled = 1; // currently bugged
vid.recalc_refdef = 1; // yeah
return;
}
if (screenfake == 2){
vid.vconwidth = 320;
vid.vconheight = 400;
scalefactor = vid.width / vid.vconwidth;
scalefactorv = vid.height / vid.vconheight;
yeahimconsoled = 1;
sb_scaled = 1;
menu_scaled = 1;
console_scaled = 1; // currently bugged
vid.recalc_refdef = 1; // yeah
return;
}
if (screenfake == 3){
vid.vconwidth = 360;
vid.vconheight = 480;
scalefactor = vid.width / vid.vconwidth;
scalefactorv = vid.height / vid.vconheight;
yeahimconsoled = 1;
sb_scaled = 1;
menu_scaled = 1;
console_scaled = 1; // currently bugged
vid.recalc_refdef = 1; // yeah
return;
}
if (screenfake == 4){
vid.vconwidth = 640;
vid.vconheight = 400;
scalefactor = vid.width / vid.vconwidth;
scalefactorv = vid.height / vid.vconheight;
yeahimconsoled = 1;
sb_scaled = 1;
menu_scaled = 1;
console_scaled = 1; // currently bugged
vid.recalc_refdef = 1; // yeah
return;
}
*/
if (scalefactorv < 1){
vid.vconheight = vid.height;
@ -560,8 +491,8 @@ static void SCR_CalcRefdef (void)
// bound field of view
if (scr_fov->value < 10)
Cvar_Set (scr_fov, "10");
else if (scr_fov->value > 110)
Cvar_Set (scr_fov, "110");
else if (scr_fov->value > 179)
Cvar_Set (scr_fov, "179");
vid.recalc_refdef = 0;
@ -1134,8 +1065,6 @@ int oldtranquality;
int dyncolor;
extern unsigned int shadowhack;
void R_ApplyFog (void);
void R_ApplyDof (void);
/*
==================

View file

@ -160,7 +160,7 @@ void D_SetupFrame (void);
void D_StartParticles (void);
void D_TurnZOn (void);
void D_WarpScreen (void);
void D_CrapScreen (void);
void D_LowResScreen (void);
void D_FillRect (vrect_t *vrect, int color);
void D_DrawRect (void);

View file

@ -52,13 +52,11 @@ void (*d_fogspans) (espan_t *pspan); // leilei - alternate fogging method (to g
D_Init
===============
*/
extern cvar_t *engoo_lookuppalette;
void D_Init (void)
{
d_subdiv16 = Cvar_Get ("d_subdiv16", "1", CVAR_ORIGINAL);
d_mipcap = Cvar_Get ("d_mipcap", "0", CVAR_ORIGINAL);
d_mipscale = Cvar_Get ("d_mipscale", "1", CVAR_ORIGINAL);
engoo_lookuppalette = Cvar_Get ("engoo_lookuppalette", "0", CVAR_ORIGINAL);
d_mipdetail = Cvar_Get ("d_mipdetail", "0", CVAR_ARCHIVE | CVAR_ORIGINAL); // leilei - mip detail cvar (combines mipcap and mipscale)
r_wateralpha = Cvar_Get ("r_wateralpha", "1", CVAR_ARCHIVE | CVAR_ORIGINAL); // leilei - water translucency
r_drawpolys = false;
@ -175,8 +173,7 @@ void D_SetupFrame (void)
for (i=0 ; i<(NUM_MIPS-1) ; i++)
d_scalemip[i] = basemip[i] * d_mipscale->value;
}
#if id386
{
if (r_filter->value == 1) // Fabien Sanglard's Kernel Filtering
{
if (d_subdiv16->value)
@ -222,32 +219,14 @@ void D_SetupFrame (void)
if (coloredlights == 2)
d_drawspans = D_DrawSpans16_C_Dither;
else
if (foguse)
#ifdef id386fog
d_drawspans = D_DrawSpans16_C;
#else
d_drawspans = D_DrawSpans16_C;
#endif
else
d_drawspans = D_DrawSpans16;
d_drawspans = D_DrawSpans16_C;
else
if (foguse)
d_drawspans = D_DrawSpans16_C;
else
d_drawspans = D_DrawSpans8;
}
}
#else
if (d_subdiv16->value == 1)
d_drawspans = D_DrawSpans16_C;
// else if (d_subdiv16->value == 2)
// d_drawspans = D_DrawSpans32_C;
// else if (d_subdiv16->value == 3)
// d_drawspans = D_DrawSpans16_C_III;
else
d_drawspans = D_DrawSpans8;
#endif
d_aflatcolor = 0;
}

View file

@ -227,11 +227,11 @@ void D_WarpScreen (void)
/*
=============
D_CrapScreen
D_LowResScreen
=============
*/
void D_CrapScreen (void)
void D_LowResScreen (void)
{
int w, h;
int u,v;
@ -278,59 +278,6 @@ void D_CrapScreen (void)
}
}
}
extern cvar_t *temp2;
// This is the MH version THANKS MH!!!
void D_CrapScreenMH (void)
{
int w, h;
int u,v;
byte *dest;
int *turb;
byte *rowptr[MAXHEIGHT+(AMP2*2)];
int column[MAXWIDTH+(AMP2*2)];
float wratio, hratio;
w = r_refdef.vrect.width;
h = r_refdef.vrect.height;
wratio = w / (float)scr_vrect.width;
hratio = h / (float)scr_vrect.height;
for (v=0 ; v<scr_vrect.height+AMP2*2 ; v++)
{
rowptr[v] = d_viewbuffer + (r_refdef.vrect.y * screenwidth) +
(screenwidth * (int)((float)v * hratio * h / (h + AMP2 * 2)));
}
for (u=0 ; u<scr_vrect.width+AMP2*2 ; u++)
{
column[u] = r_refdef.vrect.x +
(int)((float)u * wratio * w / (w + AMP2 * 2));
}
turb = atableofnothingtable;
dest = vid.buffer + scr_vrect.y * vid.rowbytes + scr_vrect.x;
for (v = 0; v < scr_vrect.height; v++, dest += vid.rowbytes)
{
byte *myrow = rowptr[v];
int *mycol = column;
int *mycolf = column;
byte *mydest = dest;
for (u = 0; u < scr_vrect.width; u += 4, mycol += 4, mydest += 4)
{
mydest[0] = myrow[mycol[0]];
mydest[1] = myrow[mycol[1]];
mydest[2] = myrow[mycol[2]];
mydest[3] = myrow[mycol[3]];
}
}
}
#if !id386
/*
@ -353,15 +300,6 @@ void D_DrawTurbulent8Span (void)
}
//
// if (foguse) // leilei - fogged case
// *pdest++ = (byte*)foggmap[pbase[(s >> 16) + (t >> 16) * cachewidth] + (forg >> 2 & 0xFF00)];
// else
// *pdest++ = pbase[(s >> 16) + (t >> 16) * cachewidth];
//
#endif // !id386
int ferg;
void D_DrawTurbulent8Span_Fog (void)
@ -1584,8 +1522,7 @@ void D_DrawDeferredSpans8_C (espan_t *pspan)
#endif
extern cvar_t *temp2;
// leilei experiment
void D_DrawSpans8_C_FilterAlter (espan_t *pspan)
{

View file

@ -1408,124 +1408,114 @@ void D_DrawSprite (int isthisaparticle)
D_SpriteScanRightEdge ();
if (isthisaparticle){
if (isthisaparticle == 2){
alfer = currentflare->alpha;
pacolor = currentflare->color;
if (isthisaparticle)
{
if (isthisaparticle == 2)
{
alfer = currentflare->alpha;
pacolor = currentflare->color;
}
else if (isthisaparticle){
alfer = currentparticle->alpha;
pacolor = currentparticle->color;
else if (isthisaparticle)
{
alfer = currentparticle->alpha;
pacolor = currentparticle->color;
}
if (flared && alfer < 0.08f)
return; // try not to draw totally faded flares.
if (alfer < 0.01f && !isfading)
alfer = 1;
if (alfer < 0.005f && isfading)
return;
if (isthisaparticle == 2){
if (r_filter->value)
D_SpriteDrawSpans_Blend_C_Filter (sprite_spans, 5);
else
D_SpriteDrawSpans_Blend_C (sprite_spans, 5);
return;
}
// only do one type for flares
if (r_filter->value){
if (currentparticle->blend == 1) // additeev
D_SpriteDrawSpans_Blend_C_Filter (sprite_spans, 1);
if (alfer < 0.01f && !isfading)
alfer = 1;
if (alfer < 0.005f && isfading)
return;
else if (currentparticle->blend == 4) // gelmapped
D_SpriteDrawSpans_Blend_C_Filter (sprite_spans, 4);
else if (currentparticle->blend == 5) // additive glow flare
D_SpriteDrawSpans_Blend_C_Filter (sprite_spans, 5);
else if (currentparticle->blend == 6) // multiplicatev
D_SpriteDrawSpans_Blend_C_Filter (sprite_spans, 6);
else if (currentparticle->blend == 8) // additive bt colorable like flare
D_SpriteDrawSpans_Blend_C_Filter (sprite_spans, 8);
else if (currentparticle->blend == 9) // alpha bt colorable like flare
D_SpriteDrawSpans_Blend_C_Filter (sprite_spans, 9);
else if (currentparticle->blend == 10) // alpha
D_SpriteDrawSpans_Blend_C_Filter (sprite_spans, 10);
else if (currentparticle->blend == 3) // particle color only
D_SpriteDrawSpans_Blend_C_Filter (sprite_spans, 3);
else if (alfer < 1)
D_SpriteDrawSpans_Blend_C_Filter (sprite_spans, 2);
else
D_SpriteDrawSpans_C_Filter (sprite_spans);
}
else
// only do one type for flares
if (isthisaparticle == 2)
{
if (currentparticle->blend == 1)
D_SpriteDrawSpans_Blend_C (sprite_spans, 1);
else if (currentparticle->blend == 4) // gelmapped
D_SpriteDrawSpans_Blend_C (sprite_spans, 4);
else if (currentparticle->blend == 3)
D_SpriteDrawSpans_Blend_C (sprite_spans, 3);
else if (currentparticle->blend == 5)
D_SpriteDrawSpans_Blend_C (sprite_spans, 5);
else if (currentparticle->blend == 6)
D_SpriteDrawSpans_Blend_C (sprite_spans, 6);
else if (currentparticle->blend == 8) // additive bt colorable like flare
D_SpriteDrawSpans_Blend_C (sprite_spans, 8);
else if (currentparticle->blend == 9) // alpha bt colorable like flare
D_SpriteDrawSpans_Blend_C (sprite_spans, 9);
else if (currentparticle->blend == 10) // alpha
D_SpriteDrawSpans_Blend_C (sprite_spans, 10);
else if (alfer < 1)
D_SpriteDrawSpans_Blend_C (sprite_spans, 2);
else
#if !id386
D_SpriteDrawSpans_C (sprite_spans);
#else
D_SpriteDrawSpans (sprite_spans);
#endif
if (r_filter->value)
D_SpriteDrawSpans_Blend_C_Filter (sprite_spans, 5);
else
D_SpriteDrawSpans_Blend_C (sprite_spans, 5);
return;
}
//return;
if (r_filter->value)
{
if (currentparticle->blend == 1) // additeev
D_SpriteDrawSpans_Blend_C_Filter (sprite_spans, 1);
else if (currentparticle->blend == 4) // gelmapped
D_SpriteDrawSpans_Blend_C_Filter (sprite_spans, 4);
else if (currentparticle->blend == 5) // additive glow flare
D_SpriteDrawSpans_Blend_C_Filter (sprite_spans, 5);
else if (currentparticle->blend == 6) // multiplicatev
D_SpriteDrawSpans_Blend_C_Filter (sprite_spans, 6);
else if (currentparticle->blend == 8) // additive bt colorable like flare
D_SpriteDrawSpans_Blend_C_Filter (sprite_spans, 8);
else if (currentparticle->blend == 9) // alpha bt colorable like flare
D_SpriteDrawSpans_Blend_C_Filter (sprite_spans, 9);
else if (currentparticle->blend == 10) // alpha
D_SpriteDrawSpans_Blend_C_Filter (sprite_spans, 10);
else if (currentparticle->blend == 3) // particle color only
D_SpriteDrawSpans_Blend_C_Filter (sprite_spans, 3);
else if (alfer < 1)
D_SpriteDrawSpans_Blend_C_Filter (sprite_spans, 2);
else
D_SpriteDrawSpans_C_Filter (sprite_spans);
}
else
{
if (currentparticle->blend == 1)
D_SpriteDrawSpans_Blend_C (sprite_spans, 1);
else if (currentparticle->blend == 4) // gelmapped
D_SpriteDrawSpans_Blend_C (sprite_spans, 4);
else if (currentparticle->blend == 3)
D_SpriteDrawSpans_Blend_C (sprite_spans, 3);
else if (currentparticle->blend == 5)
D_SpriteDrawSpans_Blend_C (sprite_spans, 5);
else if (currentparticle->blend == 6)
D_SpriteDrawSpans_Blend_C (sprite_spans, 6);
else if (currentparticle->blend == 8) // additive bt colorable like flare
D_SpriteDrawSpans_Blend_C (sprite_spans, 8);
else if (currentparticle->blend == 9) // alpha bt colorable like flare
D_SpriteDrawSpans_Blend_C (sprite_spans, 9);
else if (currentparticle->blend == 10) // alpha
D_SpriteDrawSpans_Blend_C (sprite_spans, 10);
else if (alfer < 1)
D_SpriteDrawSpans_Blend_C (sprite_spans, 2);
else
D_SpriteDrawSpans_C (sprite_spans);
}
}
else
{
flared = 0; // no it is not a flare. also these frys are not ok.
alfer = currententity->alpha;
if (alfer < 0.01f)
alfer = 1;
else
alfer = 0;
if (r_filter->value){
if (currententity->effects & EF_ADDITIVE)
D_SpriteDrawSpans_Blend_C_Filter (sprite_spans, 1);
else if (alfer < 1)
D_SpriteDrawSpans_Blend_C_Filter (sprite_spans, 1);
else
D_SpriteDrawSpans_C_Filter (sprite_spans);
}
else
alfer = currententity->alpha;
if (alfer < 0.01f)
alfer = 1;
else
alfer = 0;
{
if (currententity->effects & EF_ADDITIVE)
D_SpriteDrawSpans_Blend_C (sprite_spans, 1);
else if (alfer < 1)
D_SpriteDrawSpans_Blend_C (sprite_spans, 1);
else
#if !id386
D_SpriteDrawSpans_C (sprite_spans);
#else
D_SpriteDrawSpans (sprite_spans);
#endif
}
if (r_filter->value)
{
if (currententity->effects & EF_ADDITIVE)
D_SpriteDrawSpans_Blend_C_Filter (sprite_spans, 1);
else if (alfer < 1)
D_SpriteDrawSpans_Blend_C_Filter (sprite_spans, 1);
else
D_SpriteDrawSpans_C_Filter (sprite_spans);
}
else
{
if (currententity->effects & EF_ADDITIVE)
D_SpriteDrawSpans_Blend_C (sprite_spans, 1);
else if (alfer < 1)
D_SpriteDrawSpans_Blend_C (sprite_spans, 1);
else
D_SpriteDrawSpans_C (sprite_spans);
}
}
}

View file

@ -1828,7 +1828,7 @@ void R_RenderView_ (void)
else
{
if (amilow)
D_CrapScreen ();
D_LowResScreen ();
}
if (r_viewleaf->contents <= CONTENTS_WATER)
@ -2002,46 +2002,3 @@ void R_ApplyFog(void)
// }
}
}
extern byte transTable[256][256];
extern byte addTable[256][256];
extern cvar_t *temp3;
void R_ApplyDorf (void)
{
int w, h;
int u,v;
byte *dest;
int *turb;
byte *rowptr[MAXHEIGHT+(AMP2*2)];
int column[MAXWIDTH+(AMP2*2)];
float wratio, hratio;
w = r_refdef.vrect.width / 2;
h = r_refdef.vrect.height;
dest = vid.buffer + scr_vrect.y * vid.rowbytes + scr_vrect.x;
for (v = 0; v < scr_vrect.height; v++, dest += vid.rowbytes)
{
int *mycol = dest;
int *mycolf = dest;
byte *mydest = dest;
for (u = 0; u < scr_vrect.width; u += 4, mycol += 4, mydest += 4)
{
if (mydest > 208){
mydest[0] = mydest[0];
mydest[1] = mydest[0];
mydest[2] = mydest[0];
mydest[3] = mydest[0];
}
}
}
}

8
server/README Normal file
View file

@ -0,0 +1,8 @@
This is a very basic scratch codebase for NGUNIX.
It's been tested with more modern QuakeC compilers but it should compile fine under qcc.
There are a number of new familar extensions noted in defs.qc that the engine supports. Note that the client has to have a valid model assigned to it for movement to work properly.
As long as you don't make use of any of the non-standard engine extensions your compiled progs will work just fine under DOS/WinQuake as well.
I couldn't really come up with any examples as of now, so this base is literally the bare-bones required for it to be running in first-person... not even lightstyles are defined.
Marco Hladik