mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-24 02:30:46 +00:00
Move fog calc routines into polymost.c, declare in engine_priv.h.
git-svn-id: https://svn.eduke32.com/eduke32@3303 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
5bda3a6ebf
commit
28695e1d97
5 changed files with 106 additions and 97 deletions
|
@ -120,102 +120,6 @@ extern int32_t drawingskybox;
|
|||
|
||||
extern double gyxscale, gxyaspect, ghalfx, grhalfxdown10;
|
||||
|
||||
// For GL_EXP2 fog:
|
||||
#define FOGSCALE 0.0000768
|
||||
// For GL_LINEAR fog:
|
||||
#define FOGDISTCONST 150
|
||||
#define FULLVIS_BEGIN 2.9e38
|
||||
#define FULLVIS_END 3.0e38
|
||||
|
||||
extern char nofog; // in windows/SDL layers
|
||||
extern float fogresult, fogresult2, fogcol[4], fogtable[4*MAXPALOOKUPS];
|
||||
extern int32_t g_visibility;
|
||||
|
||||
static inline void fogcalc(int32_t shade, int32_t vis, int32_t pal)
|
||||
{
|
||||
Bmemcpy(fogcol, &fogtable[pal<<2], sizeof(fogcol));
|
||||
|
||||
if (r_usenewshading==2)
|
||||
{
|
||||
float combvis = (float)(g_visibility * (uint8_t)(vis+16));
|
||||
|
||||
bglFogi(GL_FOG_MODE, GL_LINEAR);
|
||||
|
||||
if (combvis == 0)
|
||||
{
|
||||
fogresult = FULLVIS_BEGIN;
|
||||
fogresult2 = FULLVIS_END;
|
||||
return;
|
||||
}
|
||||
|
||||
fogresult = -(FOGDISTCONST * shade)/combvis;
|
||||
fogresult2 = (FOGDISTCONST * (numshades-1-shade))/combvis;
|
||||
}
|
||||
else
|
||||
{
|
||||
float f;
|
||||
|
||||
bglFogi(GL_FOG_MODE, GL_EXP2);
|
||||
|
||||
if (r_usenewshading==1)
|
||||
{
|
||||
f = 0.9f * shade;
|
||||
f = (vis > 239) ? (float)(gvisibility*((vis-240+f))) :
|
||||
(float)(gvisibility*(vis+16+f));
|
||||
}
|
||||
else
|
||||
{
|
||||
f = (shade < 0) ? shade * 3.5f : shade * .66f;
|
||||
f = (vis > 239) ? (float)(gvisibility*((vis-240+f)/(klabs(vis-256)))) :
|
||||
(float)(gvisibility*(vis+16+f));
|
||||
}
|
||||
|
||||
if (f < 0.001f)
|
||||
f = 0.001f;
|
||||
else if (f > 100.0f)
|
||||
f = 100.0f;
|
||||
|
||||
fogresult = f;
|
||||
}
|
||||
}
|
||||
|
||||
static inline void calc_and_apply_fog(int32_t shade, int32_t vis, int32_t pal)
|
||||
{
|
||||
if (!nofog)
|
||||
{
|
||||
fogcalc(shade, vis, pal);
|
||||
bglFogfv(GL_FOG_COLOR, fogcol);
|
||||
|
||||
if (r_usenewshading==2)
|
||||
{
|
||||
bglFogf(GL_FOG_START, fogresult);
|
||||
bglFogf(GL_FOG_END, fogresult2);
|
||||
}
|
||||
else
|
||||
{
|
||||
bglFogf(GL_FOG_DENSITY, fogresult);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static inline void calc_and_apply_fog_factor(int32_t shade, int32_t vis, int32_t pal, float factor)
|
||||
{
|
||||
if (!nofog)
|
||||
{
|
||||
fogcalc(shade, vis, pal);
|
||||
bglFogfv(GL_FOG_COLOR, fogcol);
|
||||
|
||||
if (r_usenewshading==2)
|
||||
{
|
||||
bglFogf(GL_FOG_START, FULLVIS_BEGIN);
|
||||
bglFogf(GL_FOG_END, FULLVIS_END);
|
||||
}
|
||||
else
|
||||
{
|
||||
bglFogf(GL_FOG_DENSITY, fogresult*factor);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -716,6 +716,10 @@ CDECLENDSET 6
|
|||
ALIGN 16
|
||||
vlineasm1nonpow2:
|
||||
CDECLBEGINSET 6
|
||||
; NOTE: this seems to be not debuggable with valgrind --smc-check=all,
|
||||
; a crash reading the dummy address 0xbeeff0XX appears, as if only the
|
||||
; low byte has been written into.
|
||||
; (Valgrind bug?)
|
||||
mov dword [np2_do_palookup+2], ebx
|
||||
push ebp
|
||||
mov ebp, edx ; ebp: vertical place
|
||||
|
|
|
@ -44,7 +44,7 @@
|
|||
#include "engine_priv.h"
|
||||
|
||||
#define CACHEAGETIME 16
|
||||
// #define CLASSIC_NONPOW2_YSIZE_WALLS
|
||||
//#define CLASSIC_NONPOW2_YSIZE_WALLS
|
||||
#define CLASSIC_NONPOW2_YSIZE_SPRITES
|
||||
|
||||
#if !defined DEBUG_MAIN_ARRAYS
|
||||
|
|
|
@ -74,7 +74,13 @@ extern int16_t p2[MAXWALLSB];
|
|||
extern int16_t numscans, numbunches;
|
||||
|
||||
#ifdef USE_OPENGL
|
||||
|
||||
// For GL_EXP2 fog:
|
||||
#define FOGSCALE 0.0000768
|
||||
|
||||
extern palette_t palookupfog[MAXPALOOKUPS];
|
||||
void calc_and_apply_fog(int32_t shade, int32_t vis, int32_t pal);
|
||||
void calc_and_apply_fog_factor(int32_t shade, int32_t vis, int32_t pal, float factor);
|
||||
#endif
|
||||
|
||||
// int32_t wallmost(int16_t *mostbuf, int32_t w, int32_t sectnum, char dastat);
|
||||
|
|
|
@ -835,6 +835,101 @@ void polymost_glinit()
|
|||
// Blseek(cachefilehandle, 0, BSEEK_SET);
|
||||
}
|
||||
|
||||
////////// VISIBILITY FOG ROUTINES //////////
|
||||
extern char nofog; // in windows/SDL layers
|
||||
|
||||
// For GL_LINEAR fog:
|
||||
#define FOGDISTCONST 150
|
||||
#define FULLVIS_BEGIN 2.9e38
|
||||
#define FULLVIS_END 3.0e38
|
||||
|
||||
static inline void fogcalc(int32_t shade, int32_t vis, int32_t pal)
|
||||
{
|
||||
Bmemcpy(fogcol, &fogtable[pal<<2], sizeof(fogcol));
|
||||
|
||||
if (r_usenewshading==2)
|
||||
{
|
||||
float combvis = (float)(g_visibility * (uint8_t)(vis+16));
|
||||
|
||||
bglFogi(GL_FOG_MODE, GL_LINEAR);
|
||||
|
||||
if (combvis == 0)
|
||||
{
|
||||
fogresult = FULLVIS_BEGIN;
|
||||
fogresult2 = FULLVIS_END;
|
||||
return;
|
||||
}
|
||||
|
||||
fogresult = -(FOGDISTCONST * shade)/combvis;
|
||||
fogresult2 = (FOGDISTCONST * (numshades-1-shade))/combvis;
|
||||
}
|
||||
else
|
||||
{
|
||||
float f;
|
||||
|
||||
bglFogi(GL_FOG_MODE, GL_EXP2);
|
||||
|
||||
if (r_usenewshading==1)
|
||||
{
|
||||
f = 0.9f * shade;
|
||||
f = (vis > 239) ? (float)(gvisibility*((vis-240+f))) :
|
||||
(float)(gvisibility*(vis+16+f));
|
||||
}
|
||||
else
|
||||
{
|
||||
f = (shade < 0) ? shade * 3.5f : shade * .66f;
|
||||
f = (vis > 239) ? (float)(gvisibility*((vis-240+f)/(klabs(vis-256)))) :
|
||||
(float)(gvisibility*(vis+16+f));
|
||||
}
|
||||
|
||||
if (f < 0.001f)
|
||||
f = 0.001f;
|
||||
else if (f > 100.0f)
|
||||
f = 100.0f;
|
||||
|
||||
fogresult = f;
|
||||
}
|
||||
}
|
||||
|
||||
void calc_and_apply_fog(int32_t shade, int32_t vis, int32_t pal)
|
||||
{
|
||||
if (!nofog)
|
||||
{
|
||||
fogcalc(shade, vis, pal);
|
||||
bglFogfv(GL_FOG_COLOR, fogcol);
|
||||
|
||||
if (r_usenewshading==2)
|
||||
{
|
||||
bglFogf(GL_FOG_START, fogresult);
|
||||
bglFogf(GL_FOG_END, fogresult2);
|
||||
}
|
||||
else
|
||||
{
|
||||
bglFogf(GL_FOG_DENSITY, fogresult);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void calc_and_apply_fog_factor(int32_t shade, int32_t vis, int32_t pal, float factor)
|
||||
{
|
||||
if (!nofog)
|
||||
{
|
||||
fogcalc(shade, vis, pal);
|
||||
bglFogfv(GL_FOG_COLOR, fogcol);
|
||||
|
||||
if (r_usenewshading==2)
|
||||
{
|
||||
bglFogf(GL_FOG_START, FULLVIS_BEGIN);
|
||||
bglFogf(GL_FOG_END, FULLVIS_END);
|
||||
}
|
||||
else
|
||||
{
|
||||
bglFogf(GL_FOG_DENSITY, fogresult*factor);
|
||||
}
|
||||
}
|
||||
}
|
||||
////////////////////
|
||||
|
||||
void invalidatecache(void)
|
||||
{
|
||||
#ifdef DEBUGGINGAIDS
|
||||
|
|
Loading…
Reference in a new issue