viewx/viewy also need to be stored/restored.
This commit is contained in:
parent
0d77e8afaf
commit
d2692ddd24
|
@ -31,6 +31,7 @@ sector_t *backsector;
|
||||||
// very ugly realloc() of drawsegs at run-time, I upped it to 512
|
// very ugly realloc() of drawsegs at run-time, I upped it to 512
|
||||||
// instead of 256.. and someone managed to send me a level with
|
// instead of 256.. and someone managed to send me a level with
|
||||||
// 896 drawsegs! So too bad here's a limit removal a-la-Boom
|
// 896 drawsegs! So too bad here's a limit removal a-la-Boom
|
||||||
|
drawseg_t *curdrawsegs = NULL;
|
||||||
drawseg_t *drawsegs = NULL;
|
drawseg_t *drawsegs = NULL;
|
||||||
drawseg_t *ds_p = NULL;
|
drawseg_t *ds_p = NULL;
|
||||||
|
|
||||||
|
@ -1377,13 +1378,5 @@ void R_RenderBSPNode(INT32 bspnum)
|
||||||
bspnum = bsp->children[side^1];
|
bspnum = bsp->children[side^1];
|
||||||
}
|
}
|
||||||
|
|
||||||
// PORTAL CULLING
|
|
||||||
if (portalcullsector) {
|
|
||||||
sector_t *sect = subsectors[bspnum & ~NF_SUBSECTOR].sector;
|
|
||||||
if (sect != portalcullsector)
|
|
||||||
return;
|
|
||||||
portalcullsector = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
R_Subsector(bspnum == -1 ? 0 : bspnum & ~NF_SUBSECTOR);
|
R_Subsector(bspnum == -1 ? 0 : bspnum & ~NF_SUBSECTOR);
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,7 @@ extern boolean portalline; // is curline a portal seg?
|
||||||
|
|
||||||
extern INT32 checkcoord[12][4];
|
extern INT32 checkcoord[12][4];
|
||||||
|
|
||||||
|
extern drawseg_t *curdrawsegs;
|
||||||
extern drawseg_t *drawsegs;
|
extern drawseg_t *drawsegs;
|
||||||
extern drawseg_t *ds_p;
|
extern drawseg_t *ds_p;
|
||||||
extern INT32 doorclosed;
|
extern INT32 doorclosed;
|
||||||
|
|
|
@ -1056,7 +1056,11 @@ void R_RenderPlayerView(player_t *player)
|
||||||
|
|
||||||
masks[nummasks - 1].drawsegs[0] = 0;
|
masks[nummasks - 1].drawsegs[0] = 0;
|
||||||
masks[nummasks - 1].vissprites[0] = 0;
|
masks[nummasks - 1].vissprites[0] = 0;
|
||||||
|
masks[nummasks - 1].viewx = viewx;
|
||||||
|
masks[nummasks - 1].viewy = viewy;
|
||||||
masks[nummasks - 1].viewz = viewz;
|
masks[nummasks - 1].viewz = viewz;
|
||||||
|
masks[nummasks - 1].viewsector = viewsector;
|
||||||
|
curdrawsegs = ds_p;
|
||||||
R_RenderBSPNode((INT32)numnodes - 1);
|
R_RenderBSPNode((INT32)numnodes - 1);
|
||||||
masks[nummasks - 1].drawsegs[1] = ds_p - drawsegs;
|
masks[nummasks - 1].drawsegs[1] = ds_p - drawsegs;
|
||||||
masks[nummasks - 1].vissprites[1] = visspritecount;
|
masks[nummasks - 1].vissprites[1] = visspritecount;
|
||||||
|
@ -1103,7 +1107,12 @@ void R_RenderPlayerView(player_t *player)
|
||||||
|
|
||||||
masks[nummasks - 1].drawsegs[0] = ds_p - drawsegs;
|
masks[nummasks - 1].drawsegs[0] = ds_p - drawsegs;
|
||||||
masks[nummasks - 1].vissprites[0] = visspritecount;
|
masks[nummasks - 1].vissprites[0] = visspritecount;
|
||||||
|
masks[nummasks - 1].viewx = viewx;
|
||||||
|
masks[nummasks - 1].viewy = viewy;
|
||||||
masks[nummasks - 1].viewz = viewz;
|
masks[nummasks - 1].viewz = viewz;
|
||||||
|
masks[nummasks - 1].viewsector = viewsector;
|
||||||
|
curdrawsegs = ds_p;
|
||||||
|
|
||||||
R_RenderBSPNode((INT32)numnodes - 1);
|
R_RenderBSPNode((INT32)numnodes - 1);
|
||||||
masks[nummasks - 1].drawsegs[1] = ds_p - drawsegs;
|
masks[nummasks - 1].drawsegs[1] = ds_p - drawsegs;
|
||||||
masks[nummasks - 1].vissprites[1] = visspritecount;
|
masks[nummasks - 1].vissprites[1] = visspritecount;
|
||||||
|
|
|
@ -1738,6 +1738,7 @@ void R_StoreWallRange(INT32 start, INT32 stop)
|
||||||
|
|
||||||
if (ds_p == drawsegs+maxdrawsegs)
|
if (ds_p == drawsegs+maxdrawsegs)
|
||||||
{
|
{
|
||||||
|
size_t curpos = curdrawsegs - drawsegs;
|
||||||
size_t pos = ds_p - drawsegs;
|
size_t pos = ds_p - drawsegs;
|
||||||
size_t newmax = maxdrawsegs ? maxdrawsegs*2 : 128;
|
size_t newmax = maxdrawsegs ? maxdrawsegs*2 : 128;
|
||||||
if (firstseg)
|
if (firstseg)
|
||||||
|
@ -1745,6 +1746,7 @@ void R_StoreWallRange(INT32 start, INT32 stop)
|
||||||
drawsegs = Z_Realloc(drawsegs, newmax*sizeof (*drawsegs), PU_STATIC, NULL);
|
drawsegs = Z_Realloc(drawsegs, newmax*sizeof (*drawsegs), PU_STATIC, NULL);
|
||||||
ds_p = drawsegs + pos;
|
ds_p = drawsegs + pos;
|
||||||
maxdrawsegs = newmax;
|
maxdrawsegs = newmax;
|
||||||
|
curdrawsegs = drawsegs + curpos;
|
||||||
if (firstseg)
|
if (firstseg)
|
||||||
firstseg = drawsegs + (size_t)firstseg;
|
firstseg = drawsegs + (size_t)firstseg;
|
||||||
}
|
}
|
||||||
|
@ -1794,7 +1796,7 @@ void R_StoreWallRange(INT32 start, INT32 stop)
|
||||||
// borrowed fix from *cough* zdoom *cough*
|
// borrowed fix from *cough* zdoom *cough*
|
||||||
// [RH] We also need to adjust the openings pointers that
|
// [RH] We also need to adjust the openings pointers that
|
||||||
// were already stored in drawsegs.
|
// were already stored in drawsegs.
|
||||||
for (ds = drawsegs; ds < ds_p; ds++)
|
for (ds = curdrawsegs; ds < ds_p; ds++)
|
||||||
{
|
{
|
||||||
#define ADJUST(p) if (ds->p + ds->x1 >= oldopenings && ds->p + ds->x1 <= oldlast) ds->p = ds->p - oldopenings + openings;
|
#define ADJUST(p) if (ds->p + ds->x1 >= oldopenings && ds->p + ds->x1 <= oldlast) ds->p = ds->p - oldopenings + openings;
|
||||||
ADJUST(maskedtexturecol);
|
ADJUST(maskedtexturecol);
|
||||||
|
|
|
@ -2454,7 +2454,12 @@ void R_DrawMasked(maskcount_t* masks, UINT8 nummasks)
|
||||||
for (i = 0; i < nummasks; i++)
|
for (i = 0; i < nummasks; i++)
|
||||||
{
|
{
|
||||||
heads[i].next = heads[i].prev = &heads[i];
|
heads[i].next = heads[i].prev = &heads[i];
|
||||||
|
|
||||||
|
viewx = masks[i].viewx;
|
||||||
|
viewy = masks[i].viewy;
|
||||||
viewz = masks[i].viewz;
|
viewz = masks[i].viewz;
|
||||||
|
viewsector = masks[i].viewsector;
|
||||||
|
|
||||||
R_CreateDrawNodes(&masks[i], &heads[i], false);
|
R_CreateDrawNodes(&masks[i], &heads[i], false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2463,7 +2468,10 @@ void R_DrawMasked(maskcount_t* masks, UINT8 nummasks)
|
||||||
|
|
||||||
for (; nummasks > 0; nummasks--)
|
for (; nummasks > 0; nummasks--)
|
||||||
{
|
{
|
||||||
|
viewx = masks[nummasks - 1].viewx;
|
||||||
|
viewy = masks[nummasks - 1].viewy;
|
||||||
viewz = masks[nummasks - 1].viewz;
|
viewz = masks[nummasks - 1].viewz;
|
||||||
|
viewsector = masks[nummasks - 1].viewsector;
|
||||||
|
|
||||||
R_DrawMaskedList(&heads[nummasks - 1]);
|
R_DrawMaskedList(&heads[nummasks - 1]);
|
||||||
R_ClearDrawNodes(&heads[nummasks - 1]);
|
R_ClearDrawNodes(&heads[nummasks - 1]);
|
||||||
|
|
|
@ -65,7 +65,8 @@ typedef struct
|
||||||
{
|
{
|
||||||
size_t drawsegs[2];
|
size_t drawsegs[2];
|
||||||
size_t vissprites[2];
|
size_t vissprites[2];
|
||||||
fixed_t viewz; /**< View z stored at the time of the BSP traversal for the view/portal. Masked sorting/drawing needs it. */
|
fixed_t viewx, viewy, viewz; /**< View z stored at the time of the BSP traversal for the view/portal. Masked sorting/drawing needs it. */
|
||||||
|
sector_t* viewsector;
|
||||||
} maskcount_t;
|
} maskcount_t;
|
||||||
|
|
||||||
void R_DrawMasked(maskcount_t* masks, UINT8 nummasks);
|
void R_DrawMasked(maskcount_t* masks, UINT8 nummasks);
|
||||||
|
|
Loading…
Reference in New Issue