Fix portals

- Resetting portalcullsector fixes the major visual glitches

- Using 32 bits for nummasks and i fixes crashes when rendering lots of portals

# Conflicts:
#	src/r_main.c
This commit is contained in:
toaster 2022-03-18 20:44:07 +00:00
parent 5dc9df4c6a
commit 336010e616
4 changed files with 5 additions and 6 deletions

View file

@ -1500,8 +1500,7 @@ static void Mask_Post (maskcount_t* m)
void R_RenderPlayerView(void)
{
player_t * player = &players[displayplayers[viewssnum]];
UINT8 nummasks = 1;
INT32 nummasks = 1;
maskcount_t* masks = malloc(sizeof(maskcount_t));
// if this is display player 1
@ -1572,7 +1571,6 @@ void R_RenderPlayerView(void)
R_ClipSprites(drawsegs, NULL);
ps_sw_spritecliptime = I_GetPreciseTime() - ps_sw_spritecliptime;
// Add skybox portals caused by sky visplanes.
if (cv_skybox.value && player->skybox.viewpoint)
Portal_AddSkyboxPortals(player);

View file

@ -132,6 +132,7 @@ static portal_t* Portal_Add (const INT16 x1, const INT16 x2)
void Portal_Remove (portal_t* portal)
{
portalcullsector = NULL;
portal_base = portal->next;
Z_Free(portal->ceilingclip);
Z_Free(portal->floorclip);

View file

@ -3274,10 +3274,10 @@ static void R_DrawMaskedList (drawnode_t* head)
}
}
void R_DrawMasked(maskcount_t* masks, UINT8 nummasks)
void R_DrawMasked(maskcount_t* masks, INT32 nummasks)
{
drawnode_t *heads; /**< Drawnode lists; as many as number of views/portals. */
SINT8 i;
INT32 i;
heads = calloc(nummasks, sizeof(drawnode_t));

View file

@ -99,7 +99,7 @@ typedef struct
sector_t* viewsector;
} maskcount_t;
void R_DrawMasked(maskcount_t* masks, UINT8 nummasks);
void R_DrawMasked(maskcount_t* masks, INT32 nummasks);
// ----------
// VISSPRITES