From 37ea829b2fb89568879386976cf87b68bd3b5b61 Mon Sep 17 00:00:00 2001 From: Alug Date: Sun, 8 Jun 2025 22:16:30 +0200 Subject: [PATCH] fix the horrible ffloorclip clearing loops if yall ever decide to get rid of the static screensize buffer, the compiler will just straight up never optimize those loops and it will turn some maps into absolute cache miss hell, using std::fill only cause it looks fancy lmao --- src/r_plane.cpp | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/src/r_plane.cpp b/src/r_plane.cpp index ec3001b2e..cd0bd462d 100644 --- a/src/r_plane.cpp +++ b/src/r_plane.cpp @@ -265,18 +265,16 @@ static void R_MapTiltedPlane(drawspandata_t *ds, void(*spanfunc)(drawspandata_t* spanfunc(ds); } -void R_ClearFFloorClips (void) +void R_ClearFFloorClips(void) { - INT32 i, p; + INT32 p; // opening / clipping determination - for (i = 0; i < viewwidth; i++) + for (p = 0; p < MAXFFLOORS; p++) { - for (p = 0; p < MAXFFLOORS; p++) - { - ffloor[p].f_clip[i] = (INT16)viewheight; - ffloor[p].c_clip[i] = -1; - } + visffloor_t *fffloor = &ffloor[p]; + std::fill(fffloor->f_clip, fffloor->f_clip + viewwidth, static_cast(viewheight)); + std::fill(fffloor->c_clip, fffloor->c_clip + viewwidth, static_cast(-1)); } numffloors = 0; @@ -288,20 +286,14 @@ void R_ClearFFloorClips (void) // void R_ClearPlanes(void) { - INT32 i, p; + INT32 i; // opening / clipping determination - for (i = 0; i < viewwidth; i++) - { - floorclip[i] = (INT16)viewheight; - ceilingclip[i] = -1; - frontscale[i] = INT32_MAX; - for (p = 0; p < MAXFFLOORS; p++) - { - ffloor[p].f_clip[i] = (INT16)viewheight; - ffloor[p].c_clip[i] = -1; - } - } + std::fill(floorclip, floorclip + viewwidth, static_cast(viewheight)); + std::fill(ceilingclip, ceilingclip + viewwidth, static_cast(-1)); + std::fill(frontscale, frontscale + viewwidth, INT32_MAX); + + R_ClearFFloorClips(); for (i = 0; i < MAXVISPLANES; i++) for (*freehead = visplanes[i], visplanes[i] = NULL;