mirror of
https://github.com/ZDoom/raze-gles.git
synced 2025-01-11 18:50:46 +00:00
Delay between occlusion queries for visible sectors (controlled by the value of pr_occlusionculling).
git-svn-id: https://svn.eduke32.com/eduke32@686 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
e2a1a89eba
commit
1d320f6eec
3 changed files with 72 additions and 60 deletions
|
@ -2,8 +2,6 @@
|
||||||
// TODO :
|
// TODO :
|
||||||
// - CORE STUFF
|
// - CORE STUFF
|
||||||
// o put all the sector/wall geometry in VBOs
|
// o put all the sector/wall geometry in VBOs
|
||||||
// o optimize the update[sector|wall] functions to diff the changes
|
|
||||||
// o make occlusion queries every n frames (cvar)
|
|
||||||
// o there's still a texture alignment problem with slopes (waterfall in launch facility)
|
// o there's still a texture alignment problem with slopes (waterfall in launch facility)
|
||||||
// o there's also the texture alignment problem Hunter reported (san andreas fault)
|
// o there's also the texture alignment problem Hunter reported (san andreas fault)
|
||||||
// o also sliding doors are still fucked up sometimes (like under the bar in E1L2)
|
// o also sliding doors are still fucked up sometimes (like under the bar in E1L2)
|
||||||
|
@ -93,7 +91,8 @@ typedef struct s_prwall {
|
||||||
// attributes
|
// attributes
|
||||||
GLfloat wallcolor[4], overcolor[4];
|
GLfloat wallcolor[4], overcolor[4];
|
||||||
GLfloat wallglpic, overglpic, wallfbglpic, overfbglpic;
|
GLfloat wallglpic, overglpic, wallfbglpic, overfbglpic;
|
||||||
// build wall data
|
// build wall data# ifdef POLYMER_C
|
||||||
|
|
||||||
short cstat, nwallcstat;
|
short cstat, nwallcstat;
|
||||||
short picnum, overpicnum, nwallpicnum;
|
short picnum, overpicnum, nwallpicnum;
|
||||||
signed char shade;
|
signed char shade;
|
||||||
|
@ -122,31 +121,36 @@ int polymer_init(void);
|
||||||
void polymer_glinit(void);
|
void polymer_glinit(void);
|
||||||
void polymer_loadboard(void);
|
void polymer_loadboard(void);
|
||||||
void polymer_drawrooms(int daposx, int daposy, int daposz, short daang, int dahoriz, short dacursectnum);
|
void polymer_drawrooms(int daposx, int daposy, int daposz, short daang, int dahoriz, short dacursectnum);
|
||||||
void polymer_pokesector(short sectnum);
|
|
||||||
void polymer_drawmasks(void);
|
void polymer_drawmasks(void);
|
||||||
void polymer_rotatesprite(int sx, int sy, int z, short a, short picnum, signed char dashade, char dapalnum, char dastat, int cx1, int cy1, int cx2, int cy2);
|
void polymer_rotatesprite(int sx, int sy, int z, short a, short picnum, signed char dashade, char dapalnum, char dastat, int cx1, int cy1, int cx2, int cy2);
|
||||||
void polymer_drawmaskwall(int damaskwallcnt);
|
void polymer_drawmaskwall(int damaskwallcnt);
|
||||||
void polymer_drawsprite(int snum);
|
void polymer_drawsprite(int snum);
|
||||||
|
|
||||||
|
# ifdef POLYMER_C
|
||||||
|
|
||||||
// SECTORS
|
// SECTORS
|
||||||
int polymer_initsector(short sectnum);
|
static int polymer_initsector(short sectnum);
|
||||||
int polymer_updatesector(short sectnum);
|
static int polymer_updatesector(short sectnum);
|
||||||
void PR_CALLBACK polymer_tesscombine(GLdouble v[3], GLdouble *data[4], GLfloat weight[4], GLdouble **out);
|
void PR_CALLBACK polymer_tesscombine(GLdouble v[3], GLdouble *data[4], GLfloat weight[4], GLdouble **out);
|
||||||
void PR_CALLBACK polymer_tesserror(GLenum error);
|
void PR_CALLBACK polymer_tesserror(GLenum error);
|
||||||
void PR_CALLBACK polymer_tessedgeflag(GLenum error);
|
void PR_CALLBACK polymer_tessedgeflag(GLenum error);
|
||||||
void PR_CALLBACK polymer_tessvertex(void* vertex, void* sector);
|
void PR_CALLBACK polymer_tessvertex(void* vertex, void* sector);
|
||||||
int polymer_buildfloor(short sectnum);
|
static int polymer_buildfloor(short sectnum);
|
||||||
void polymer_drawsector(short sectnum);
|
static void polymer_drawsector(short sectnum);
|
||||||
// WALLS
|
// WALLS
|
||||||
int polymer_initwall(short wallnum);
|
static int polymer_initwall(short wallnum);
|
||||||
void polymer_updatewall(short wallnum);
|
static void polymer_updatewall(short wallnum);
|
||||||
void polymer_drawwall(short wallnum);
|
static void polymer_drawwall(short wallnum);
|
||||||
// HSR
|
// HSR
|
||||||
void polymer_extractfrustum(GLdouble* modelview, GLdouble* projection);
|
static void polymer_pokesector(short sectnum);
|
||||||
int polymer_portalinfrustum(short wallnum);
|
static void polymer_extractfrustum(GLdouble* modelview, GLdouble* projection);
|
||||||
|
static int polymer_portalinfrustum(short wallnum);
|
||||||
// SKIES
|
// SKIES
|
||||||
void polymer_initskybox(void);
|
static void polymer_initskybox(void);
|
||||||
void polymer_getsky(void);
|
static void polymer_getsky(void);
|
||||||
void polymer_drawskyquad(int p1, int p2, GLfloat height);
|
static void polymer_drawskyquad(int p1, int p2, GLfloat height);
|
||||||
void polymer_drawartsky(short tilenum);
|
static void polymer_drawartsky(short tilenum);
|
||||||
|
|
||||||
|
# endif
|
||||||
|
|
||||||
#endif // !_polymer_h_
|
#endif // !_polymer_h_
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
// blah
|
// blah
|
||||||
#ifdef POLYMOST
|
#ifdef POLYMOST
|
||||||
|
|
||||||
|
#define POLYMER_C
|
||||||
#include "polymer.h"
|
#include "polymer.h"
|
||||||
|
|
||||||
// CVARS
|
// CVARS
|
||||||
|
@ -48,6 +50,7 @@ int front;
|
||||||
int back;
|
int back;
|
||||||
int firstback;
|
int firstback;
|
||||||
short sectorqueue[MAXSECTORS];
|
short sectorqueue[MAXSECTORS];
|
||||||
|
short querydelay[MAXSECTORS];
|
||||||
|
|
||||||
GLdouble modelviewmatrix[16];
|
GLdouble modelviewmatrix[16];
|
||||||
GLdouble spritemodelview[16];
|
GLdouble spritemodelview[16];
|
||||||
|
@ -338,7 +341,7 @@ void polymer_drawrooms(int daposx, int daposy, int daposz, short
|
||||||
|
|
||||||
while (front != back)
|
while (front != back)
|
||||||
{
|
{
|
||||||
if ((front >= firstback) && (pr_occlusionculling))
|
if ((front >= firstback) && (pr_occlusionculling) && (!querydelay[sectorqueue[front] + 1]))
|
||||||
{
|
{
|
||||||
bglGetQueryObjectivARB(sectorqueue[front] + 1,
|
bglGetQueryObjectivARB(sectorqueue[front] + 1,
|
||||||
GL_QUERY_RESULT_ARB,
|
GL_QUERY_RESULT_ARB,
|
||||||
|
@ -348,7 +351,12 @@ void polymer_drawrooms(int daposx, int daposy, int daposz, short
|
||||||
front++;
|
front++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
querydelay[sectorqueue[front] + 1] = pr_occlusionculling;
|
||||||
}
|
}
|
||||||
|
else if ((front >= firstback) && (pr_occlusionculling) && (querydelay[sectorqueue[front] + 1]))
|
||||||
|
querydelay[sectorqueue[front] + 1]--;
|
||||||
|
|
||||||
polymer_pokesector(sectorqueue[front]);
|
polymer_pokesector(sectorqueue[front]);
|
||||||
polymer_drawsector(sectorqueue[front]);
|
polymer_drawsector(sectorqueue[front]);
|
||||||
|
|
||||||
|
@ -370,7 +378,7 @@ void polymer_drawrooms(int daposx, int daposy, int daposz, short
|
||||||
sectorqueue[back++] = wal->nextsector;
|
sectorqueue[back++] = wal->nextsector;
|
||||||
prsectors[wal->nextsector]->drawingstate = 1;
|
prsectors[wal->nextsector]->drawingstate = 1;
|
||||||
|
|
||||||
if (pr_occlusionculling)
|
if (pr_occlusionculling && !querydelay[wal->nextsector + 1])
|
||||||
{
|
{
|
||||||
nextsec = §or[wal->nextsector];
|
nextsec = §or[wal->nextsector];
|
||||||
nextwal = &wall[nextsec->wallptr];
|
nextwal = &wall[nextsec->wallptr];
|
||||||
|
@ -434,33 +442,6 @@ void polymer_drawrooms(int daposx, int daposy, int daposz, short
|
||||||
if (pr_verbosity >= 3) OSD_Printf("PR : Rooms drawn.\n");
|
if (pr_verbosity >= 3) OSD_Printf("PR : Rooms drawn.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void polymer_pokesector(short sectnum)
|
|
||||||
{
|
|
||||||
sectortype *sec;
|
|
||||||
_prsector *s;
|
|
||||||
walltype *wal;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
sec = §or[sectnum];
|
|
||||||
s = prsectors[sectnum];
|
|
||||||
wal = &wall[sec->wallptr];
|
|
||||||
|
|
||||||
if (!s->controlstate)
|
|
||||||
polymer_updatesector(sectnum);
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
while (i < sec->wallnum)
|
|
||||||
{
|
|
||||||
if ((wal->nextsector != -1) && (!prsectors[wal->nextsector]->controlstate))
|
|
||||||
polymer_updatesector(wal->nextsector);
|
|
||||||
if (!prwalls[sec->wallptr + i]->controlstate)
|
|
||||||
polymer_updatewall(sec->wallptr + i);
|
|
||||||
|
|
||||||
i++;
|
|
||||||
wal = &wall[sec->wallptr + i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void polymer_drawmasks(void)
|
void polymer_drawmasks(void)
|
||||||
{
|
{
|
||||||
bglEnable(GL_ALPHA_TEST);
|
bglEnable(GL_ALPHA_TEST);
|
||||||
|
@ -633,7 +614,7 @@ void polymer_drawsprite(int snum)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SECTORS
|
// SECTORS
|
||||||
int polymer_initsector(short sectnum)
|
static int polymer_initsector(short sectnum)
|
||||||
{
|
{
|
||||||
sectortype *sec;
|
sectortype *sec;
|
||||||
_prsector* s;
|
_prsector* s;
|
||||||
|
@ -666,7 +647,7 @@ int polymer_initsector(short sectnum)
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int polymer_updatesector(short sectnum)
|
static int polymer_updatesector(short sectnum)
|
||||||
{
|
{
|
||||||
_prsector* s;
|
_prsector* s;
|
||||||
sectortype *sec;
|
sectortype *sec;
|
||||||
|
@ -949,7 +930,7 @@ void PR_CALLBACK polymer_tessvertex(void* vertex, void* sector)
|
||||||
s->curindice++;
|
s->curindice++;
|
||||||
}
|
}
|
||||||
|
|
||||||
int polymer_buildfloor(short sectnum)
|
static int polymer_buildfloor(short sectnum)
|
||||||
{
|
{
|
||||||
// This function tesselates the floor/ceiling of a sector and stores the triangles in a display list.
|
// This function tesselates the floor/ceiling of a sector and stores the triangles in a display list.
|
||||||
_prsector* s;
|
_prsector* s;
|
||||||
|
@ -1010,7 +991,7 @@ int polymer_buildfloor(short sectnum)
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void polymer_drawsector(short sectnum)
|
static void polymer_drawsector(short sectnum)
|
||||||
{
|
{
|
||||||
sectortype *sec;
|
sectortype *sec;
|
||||||
walltype *wal;
|
walltype *wal;
|
||||||
|
@ -1073,7 +1054,7 @@ void polymer_drawsector(short sectnum)
|
||||||
}
|
}
|
||||||
|
|
||||||
// WALLS
|
// WALLS
|
||||||
int polymer_initwall(short wallnum)
|
static int polymer_initwall(short wallnum)
|
||||||
{
|
{
|
||||||
_prwall *w;
|
_prwall *w;
|
||||||
|
|
||||||
|
@ -1095,7 +1076,7 @@ int polymer_initwall(short wallnum)
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void polymer_updatewall(short wallnum)
|
static void polymer_updatewall(short wallnum)
|
||||||
{
|
{
|
||||||
short nwallnum, nnwallnum, curpicnum, wallpicnum, walloverpicnum, nwallpicnum;
|
short nwallnum, nnwallnum, curpicnum, wallpicnum, walloverpicnum, nwallpicnum;
|
||||||
char curxpanning, curypanning;
|
char curxpanning, curypanning;
|
||||||
|
@ -1417,7 +1398,7 @@ void polymer_updatewall(short wallnum)
|
||||||
if (pr_verbosity >= 3) OSD_Printf("PR : Updated wall %i.\n", wallnum);
|
if (pr_verbosity >= 3) OSD_Printf("PR : Updated wall %i.\n", wallnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
void polymer_drawwall(short wallnum)
|
static void polymer_drawwall(short wallnum)
|
||||||
{
|
{
|
||||||
_prwall *w;
|
_prwall *w;
|
||||||
|
|
||||||
|
@ -1473,7 +1454,34 @@ void polymer_drawwall(short wallnum)
|
||||||
}
|
}
|
||||||
|
|
||||||
// HSR
|
// HSR
|
||||||
void polymer_extractfrustum(GLdouble* modelview, GLdouble* projection)
|
static void polymer_pokesector(short sectnum)
|
||||||
|
{
|
||||||
|
sectortype *sec;
|
||||||
|
_prsector *s;
|
||||||
|
walltype *wal;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
sec = §or[sectnum];
|
||||||
|
s = prsectors[sectnum];
|
||||||
|
wal = &wall[sec->wallptr];
|
||||||
|
|
||||||
|
if (!s->controlstate)
|
||||||
|
polymer_updatesector(sectnum);
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while (i < sec->wallnum)
|
||||||
|
{
|
||||||
|
if ((wal->nextsector != -1) && (!prsectors[wal->nextsector]->controlstate))
|
||||||
|
polymer_updatesector(wal->nextsector);
|
||||||
|
if (!prwalls[sec->wallptr + i]->controlstate)
|
||||||
|
polymer_updatewall(sec->wallptr + i);
|
||||||
|
|
||||||
|
i++;
|
||||||
|
wal = &wall[sec->wallptr + i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void polymer_extractfrustum(GLdouble* modelview, GLdouble* projection)
|
||||||
{
|
{
|
||||||
GLdouble matrix[16];
|
GLdouble matrix[16];
|
||||||
int i;
|
int i;
|
||||||
|
@ -1500,7 +1508,7 @@ void polymer_extractfrustum(GLdouble* modelview, GLdouble* projec
|
||||||
if (pr_verbosity >= 3) OSD_Printf("PR : Frustum extracted.\n");
|
if (pr_verbosity >= 3) OSD_Printf("PR : Frustum extracted.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
int polymer_portalinfrustum(short wallnum)
|
static int polymer_portalinfrustum(short wallnum)
|
||||||
{
|
{
|
||||||
int i, j, k;
|
int i, j, k;
|
||||||
float sqdist;
|
float sqdist;
|
||||||
|
@ -1531,7 +1539,7 @@ int polymer_portalinfrustum(short wallnum)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SKIES
|
// SKIES
|
||||||
void polymer_initskybox(void)
|
static void polymer_initskybox(void)
|
||||||
{
|
{
|
||||||
GLfloat halfsqrt2 = 0.70710678f;
|
GLfloat halfsqrt2 = 0.70710678f;
|
||||||
|
|
||||||
|
@ -1554,7 +1562,7 @@ void polymer_initskybox(void)
|
||||||
skybox[14] = -1.0; skybox[15] = -1.0; // 7*/
|
skybox[14] = -1.0; skybox[15] = -1.0; // 7*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void polymer_getsky(void)
|
static void polymer_getsky(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -1570,7 +1578,7 @@ void polymer_getsky(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void polymer_drawskyquad(int p1, int p2, GLfloat height)
|
static void polymer_drawskyquad(int p1, int p2, GLfloat height)
|
||||||
{
|
{
|
||||||
bglBegin(GL_QUADS);
|
bglBegin(GL_QUADS);
|
||||||
bglTexCoord2f(0.0f, 0.0f);
|
bglTexCoord2f(0.0f, 0.0f);
|
||||||
|
@ -1588,7 +1596,7 @@ void polymer_drawskyquad(int p1, int p2, GLfloat height)
|
||||||
bglEnd();
|
bglEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
void polymer_drawartsky(short tilenum)
|
static void polymer_drawartsky(short tilenum)
|
||||||
{
|
{
|
||||||
pthtyp* pth;
|
pthtyp* pth;
|
||||||
GLuint glpics[5];
|
GLuint glpics[5];
|
||||||
|
|
|
@ -695,7 +695,7 @@ cvar[] =
|
||||||
{ "r_anamorphic", "r_anamorphic: enable/disable widescreen mode", (void*)&glwidescreen, CVAR_BOOL, 0, 0, 1 },
|
{ "r_anamorphic", "r_anamorphic: enable/disable widescreen mode", (void*)&glwidescreen, CVAR_BOOL, 0, 0, 1 },
|
||||||
{ "r_projectionhack", "r_projectionhack: enable/disable projection hack", (void*)&glprojectionhacks, CVAR_BOOL, 0, 0, 1 },
|
{ "r_projectionhack", "r_projectionhack: enable/disable projection hack", (void*)&glprojectionhacks, CVAR_BOOL, 0, 0, 1 },
|
||||||
// polymer cvars
|
// polymer cvars
|
||||||
{ "pr_occlusionculling", "pr_occlusionculling: insert description that noone will ever read", (void*)&pr_occlusionculling, CVAR_INT, 0, 0, 1 },
|
{ "pr_occlusionculling", "pr_occlusionculling: insert description that noone will ever read", (void*)&pr_occlusionculling, CVAR_INT, 0, 0, 512 },
|
||||||
{ "pr_fov", "pr_fov: sets the field of vision in build angle", (void*)&pr_fov, CVAR_INT, 0, 0, 1023},
|
{ "pr_fov", "pr_fov: sets the field of vision in build angle", (void*)&pr_fov, CVAR_INT, 0, 0, 1023},
|
||||||
{ "pr_showportals", "pr_showportals: toggles frustum culling (recommended)", (void*)&pr_showportals, CVAR_INT, 0, 0, 1 },
|
{ "pr_showportals", "pr_showportals: toggles frustum culling (recommended)", (void*)&pr_showportals, CVAR_INT, 0, 0, 1 },
|
||||||
{ "pr_verbosity", "pr_verbosity: verbosity level of the polymer renderer", (void*)&pr_verbosity, CVAR_INT, 0, 0, 3 },
|
{ "pr_verbosity", "pr_verbosity: verbosity level of the polymer renderer", (void*)&pr_verbosity, CVAR_INT, 0, 0, 3 },
|
||||||
|
|
Loading…
Reference in a new issue