Skip to content
Snippets Groups Projects

Fix 3D floor sides not rendering properly if a light list was involved

Merged Lactozilla requested to merge fix-1207 into next
  1. Feb 24, 2024
    • Lactozilla's avatar
    • Lactozilla's avatar
      Fix a regression where 3D floor sides could not render properly · 66234d09
      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.
      66234d09
Loading