Fix 3D floor sides not rendering properly if a light list was involved
- Feb 24, 2024
-
-
Lactozilla authored
-
Lactozilla authored
Normally, when rendering a 'masked column', the variables sprtopscreen (and sometimes sprbotscreen) are used to define the screen space bounds of the column. R_DrawMaskedColumn and R_DrawFlippedMaskedColumn use these variables to determine where to start rendering the column's posts. Rendering a 3D floor side when a light list is involved requires cutting it vertically. Part of this process involves setting windowtop and windowbottom, which are what R_DrawMaskedColumn and R_DrawFlippedMaskedColumn use instead to define the bounds in screen space of the column. To draw the columns between the 3D floor's vertical boundaries, the functions R_DrawRepeatMaskedColumn or R_DrawRepeatFlippedMaskedColumn are used to repeatedly call R_DrawMaskedColumn or R_DrawFlippedMaskedColumn respectively. The problem is that R_DrawRepeatMaskedColumn and R_DrawRepeatFlippedMaskedColumn assume that sprtopscreen and sprbotscreen are what define the vertical positions of the column, and the consequence is, after the first time R_DrawRepeatMaskedColumn or R_DrawRepeatFlippedMaskedColumn are called for a column, no more columns are rendered, since sprtopscreen is not reset. This issue was fixed by making R_RenderThickSideRange use R_DrawMaskedColumn and R_DrawFlippedMaskedColumn if there is a lightlist, or R_DrawRepeatMaskedColumn and R_DrawRepeatFlippedMaskedColumn if there is no lightlist.
-