Move processed into render_seg_map

This commit is contained in:
Kp 2014-11-23 21:53:45 +00:00
parent c495f48ccd
commit 2ddbdd6f11
2 changed files with 11 additions and 10 deletions

View file

@ -24,14 +24,14 @@ struct render_state_t
};
std::vector<distant_object> objects;
uint16_t Seg_depth; //depth for this seg in Render_list
bool processed; //whether this entry has been processed
per_segment_state_t() :
Seg_depth(0)
Seg_depth(0), processed(false)
{
}
};
unsigned N_render_segs;
array<segnum_t, MAX_RENDER_SEGS> Render_list;
array<bool, MAX_RENDER_SEGS> processed; //whether each entry has been processed
array<short, MAX_SEGMENTS> render_pos; //where in render_list does this segment appear?
array<rect, MAX_RENDER_SEGS> render_windows;
std::unordered_map<segnum_t, per_segment_state_t> render_seg_map;

View file

@ -1318,7 +1318,7 @@ void render_frame(fix eye_offset, int window_num)
// -- Moved from here by MK, 05/17/95, wrong if multiple renders/frame! FrameCount++; //we have rendered a frame
}
int first_terminal_seg;
static int first_terminal_seg;
#if defined(DXX_BUILD_DESCENT_II)
void update_rendered_data(int window_num, const vobjptr_t viewer, int rear_view_flag)
@ -1338,7 +1338,6 @@ static void build_segment_list(render_state_t &rstate, visited_twobit_array_t &v
int l;
rstate.render_pos.fill(-1);
rstate.processed = {};
#ifndef NDEBUG
memset(visited2, 0, sizeof(visited2[0])*(Highest_segment_index+1));
@ -1365,15 +1364,17 @@ static void build_segment_list(render_state_t &rstate, visited_twobit_array_t &v
int rotated;
array<sidenum_t, MAX_SIDES_PER_SEGMENT> child_list; //list of ordered sides to process
if (rstate.processed[scnt])
continue;
rstate.processed[scnt] = true;
auto segnum = rstate.Render_list[scnt];
rect *check_w = &rstate.render_windows[scnt];
if (segnum == segment_none) continue;
auto &srsm = rstate.render_seg_map[segnum];
auto &processed = srsm.processed;
if (processed)
continue;
processed = true;
auto seg = vsegptridx(segnum);
rotated=0;
@ -1465,9 +1466,9 @@ static void build_segment_list(render_state_t &rstate, visited_twobit_array_t &v
{
//no_render_flag[lcnt] = 1;
rstate.render_seg_map[rstate.Render_list[lcnt]].processed = false; //force reprocess
rstate.Render_list[lcnt] = segment_none;
rstate.render_windows[rp] = *new_w; //get updated window
rstate.processed[rp] = false; //force reprocess
goto no_add;
}
}