mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-11-11 07:11:39 +00:00
Don't prepare shadows of lights that aren't in view.
git-svn-id: https://svn.eduke32.com/eduke32@1292 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
8181b1141d
commit
82605aa44c
2 changed files with 22 additions and 1 deletions
|
@ -156,6 +156,7 @@ typedef struct s_prlight {
|
|||
GLfloat transform[16];
|
||||
float frustum[5 * 4];
|
||||
int32_t rtindex;
|
||||
char isinview;
|
||||
} _prlight;
|
||||
|
||||
extern _prlight staticlights[PR_MAXLIGHTS];
|
||||
|
@ -189,6 +190,7 @@ typedef struct s_prplane {
|
|||
// lights
|
||||
char lights[PR_MAXLIGHTS];
|
||||
char lightcount;
|
||||
char drawn;
|
||||
} _prplane;
|
||||
|
||||
typedef struct s_prsector {
|
||||
|
|
|
@ -703,6 +703,8 @@ void polymer_drawrooms(int32_t daposx, int32_t daposy, int32_t da
|
|||
while (i < numsectors)
|
||||
{
|
||||
prsectors[i]->controlstate = 0;
|
||||
prsectors[i]->ceil.drawn = 0;
|
||||
prsectors[i]->floor.drawn = 0;
|
||||
prsectors[i]->wallsproffset = 0.0f;
|
||||
prsectors[i]->floorsproffset = 0.0f;
|
||||
i++;
|
||||
|
@ -711,6 +713,9 @@ void polymer_drawrooms(int32_t daposx, int32_t daposy, int32_t da
|
|||
while (i < numwalls)
|
||||
{
|
||||
prwalls[i]->controlstate = 0;
|
||||
prwalls[i]->wall.drawn = 0;
|
||||
prwalls[i]->over.drawn = 0;
|
||||
prwalls[i]->mask.drawn = 0;
|
||||
i++;
|
||||
}
|
||||
|
||||
|
@ -1070,6 +1075,8 @@ void polymer_addlight(_prlight light)
|
|||
prlights[lightcount].rtindex = -1;
|
||||
}
|
||||
|
||||
prlights[lightcount].isinview = 0;
|
||||
|
||||
polymer_culllight(lightcount);
|
||||
|
||||
lightcount++;
|
||||
|
@ -1460,6 +1467,8 @@ static void polymer_drawplane(_prplane* plane)
|
|||
if (plane->indices)
|
||||
bglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0);
|
||||
}
|
||||
|
||||
plane->drawn = 1;
|
||||
}
|
||||
|
||||
static void polymer_inb4mirror(GLfloat* buffer, GLfloat* plane)
|
||||
|
@ -3766,10 +3775,14 @@ static void polymer_culllight(char lightindex)
|
|||
if (polymer_planeinlight(&s->floor, light)) {
|
||||
s->floor.lights[s->floor.lightcount] = lightindex;
|
||||
s->floor.lightcount++;
|
||||
if (s->floor.drawn)
|
||||
light->isinview = 1;
|
||||
}
|
||||
if (polymer_planeinlight(&s->ceil, light)) {
|
||||
s->ceil.lights[s->ceil.lightcount] = lightindex;
|
||||
s->ceil.lightcount++;
|
||||
if (s->ceil.drawn)
|
||||
light->isinview = 1;
|
||||
}
|
||||
|
||||
i = 0;
|
||||
|
@ -3780,14 +3793,20 @@ static void polymer_culllight(char lightindex)
|
|||
if (polymer_planeinlight(&w->wall, light)) {
|
||||
w->wall.lights[w->wall.lightcount] = lightindex;
|
||||
w->wall.lightcount++;
|
||||
if (w->wall.drawn)
|
||||
light->isinview = 1;
|
||||
}
|
||||
if (polymer_planeinlight(&w->over, light)) {
|
||||
w->over.lights[w->over.lightcount] = lightindex;
|
||||
w->over.lightcount++;
|
||||
if (w->over.drawn)
|
||||
light->isinview = 1;
|
||||
}
|
||||
if (polymer_planeinlight(&w->mask, light)) {
|
||||
w->mask.lights[w->mask.lightcount] = lightindex;
|
||||
w->mask.lightcount++;
|
||||
if (w->mask.drawn)
|
||||
light->isinview = 1;
|
||||
|
||||
if ((wall[sec->wallptr + i].nextsector != -1) &&
|
||||
(!cullingstate[wall[sec->wallptr + i].nextsector])) {
|
||||
|
@ -3828,7 +3847,7 @@ static void polymer_prepareshadows(void)
|
|||
|
||||
while ((i < lightcount) && (j < 4))
|
||||
{
|
||||
if (prlights[i].radius)
|
||||
if (prlights[i].radius && prlights[i].isinview)
|
||||
{
|
||||
prlights[i].rtindex = j + 1;
|
||||
|
||||
|
|
Loading…
Reference in a new issue