Few fixes for the visibility checks.

git-svn-id: https://svn.eduke32.com/eduke32@1328 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
plagman 2009-04-16 06:31:19 +00:00
parent 1889e9151b
commit 6dba1ba1ed

View file

@ -1101,8 +1101,11 @@ static void polymer_displayrooms(int16_t dacursectnum)
(wallvisible(sec->wallptr + i)) && (wallvisible(sec->wallptr + i)) &&
(polymer_planeinfrustum(&prwalls[sec->wallptr + i]->mask, frustum))) (polymer_planeinfrustum(&prwalls[sec->wallptr + i]->mask, frustum)))
{ {
if (prwalls[sec->wallptr + i]->mask.vertcount == 4) if ((prwalls[sec->wallptr + i]->mask.vertcount == 4) &&
!(prwalls[sec->wallptr + i]->underover & 4) &&
!(prwalls[sec->wallptr + i]->underover & 8))
{ {
// early exit for closed sectors
_prwall *w; _prwall *w;
w = prwalls[sec->wallptr + i]; w = prwalls[sec->wallptr + i];
@ -1128,45 +1131,55 @@ static void polymer_displayrooms(int16_t dacursectnum)
mirrorcount++; mirrorcount++;
} }
if (doquery && (!drawingstate[wall[sec->wallptr + i].nextsector])) if (!(wall[sec->wallptr + i].cstat & 32)) {
{ if (doquery && (!drawingstate[wall[sec->wallptr + i].nextsector]))
float pos[3], sqdist; {
int32_t oldoverridematerial; float pos[3], sqdist;
int32_t oldoverridematerial;
pos[0] = globalposy; pos[0] = globalposy;
pos[1] = -(float)(globalposz) / 16.0f; pos[1] = -(float)(globalposz) / 16.0f;
pos[2] = -globalposx; pos[2] = -globalposx;
sqdist = prwalls[sec->wallptr + i]->mask.plane[0] * pos[0] + sqdist = prwalls[sec->wallptr + i]->mask.plane[0] * pos[0] +
prwalls[sec->wallptr + i]->mask.plane[1] * pos[1] + prwalls[sec->wallptr + i]->mask.plane[1] * pos[1] +
prwalls[sec->wallptr + i]->mask.plane[2] * pos[2] + prwalls[sec->wallptr + i]->mask.plane[2] * pos[2] +
prwalls[sec->wallptr + i]->mask.plane[3]; prwalls[sec->wallptr + i]->mask.plane[3];
// hack to avoid occlusion querying portals that are too close to the viewpoint // hack to avoid occlusion querying portals that are too close to the viewpoint
// this is needed because of the near z-clipping plane; // this is needed because of the near z-clipping plane;
if (sqdist < 100) if (sqdist < 100)
queryid[sec->wallptr + i] = 0xFFFFFFFF; queryid[sec->wallptr + i] = 0xFFFFFFFF;
else { else {
bglColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); _prwall *w;
bglDepthMask(GL_FALSE);
bglGenQueriesARB(1, &queryid[sec->wallptr + i]); w = prwalls[sec->wallptr + i];
bglBeginQueryARB(GL_SAMPLES_PASSED_ARB, queryid[sec->wallptr + i]);
oldoverridematerial = overridematerial; bglColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
overridematerial = 0; bglDepthMask(GL_FALSE);
polymer_drawplane(&prwalls[sec->wallptr + i]->mask); bglGenQueriesARB(1, &queryid[sec->wallptr + i]);
bglBeginQueryARB(GL_SAMPLES_PASSED_ARB, queryid[sec->wallptr + i]);
overridematerial = oldoverridematerial; oldoverridematerial = overridematerial;
overridematerial = 0;
bglEndQueryARB(GL_SAMPLES_PASSED_ARB); if ((w->underover & 4) && (w->underover & 1))
polymer_drawplane(&w->wall);
polymer_drawplane(&w->mask);
if ((w->underover & 8) && (w->underover & 2))
polymer_drawplane(&w->over);
bglDepthMask(GL_TRUE); overridematerial = oldoverridematerial;
bglColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
} bglEndQueryARB(GL_SAMPLES_PASSED_ARB);
} else
queryid[sec->wallptr + i] = 1; bglDepthMask(GL_TRUE);
bglColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
}
} else
queryid[sec->wallptr + i] = 1;
}
} }
i++; i++;