Move processed into render_seg_map
This commit is contained in:
parent
c495f48ccd
commit
2ddbdd6f11
|
@ -24,14 +24,14 @@ struct render_state_t
|
||||||
};
|
};
|
||||||
std::vector<distant_object> objects;
|
std::vector<distant_object> objects;
|
||||||
uint16_t Seg_depth; //depth for this seg in Render_list
|
uint16_t Seg_depth; //depth for this seg in Render_list
|
||||||
|
bool processed; //whether this entry has been processed
|
||||||
per_segment_state_t() :
|
per_segment_state_t() :
|
||||||
Seg_depth(0)
|
Seg_depth(0), processed(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
unsigned N_render_segs;
|
unsigned N_render_segs;
|
||||||
array<segnum_t, MAX_RENDER_SEGS> Render_list;
|
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<short, MAX_SEGMENTS> render_pos; //where in render_list does this segment appear?
|
||||||
array<rect, MAX_RENDER_SEGS> render_windows;
|
array<rect, MAX_RENDER_SEGS> render_windows;
|
||||||
std::unordered_map<segnum_t, per_segment_state_t> render_seg_map;
|
std::unordered_map<segnum_t, per_segment_state_t> render_seg_map;
|
||||||
|
|
|
@ -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
|
// -- 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)
|
#if defined(DXX_BUILD_DESCENT_II)
|
||||||
void update_rendered_data(int window_num, const vobjptr_t viewer, int rear_view_flag)
|
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;
|
int l;
|
||||||
|
|
||||||
rstate.render_pos.fill(-1);
|
rstate.render_pos.fill(-1);
|
||||||
rstate.processed = {};
|
|
||||||
|
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
memset(visited2, 0, sizeof(visited2[0])*(Highest_segment_index+1));
|
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;
|
int rotated;
|
||||||
array<sidenum_t, MAX_SIDES_PER_SEGMENT> child_list; //list of ordered sides to process
|
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];
|
auto segnum = rstate.Render_list[scnt];
|
||||||
rect *check_w = &rstate.render_windows[scnt];
|
rect *check_w = &rstate.render_windows[scnt];
|
||||||
if (segnum == segment_none) continue;
|
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);
|
auto seg = vsegptridx(segnum);
|
||||||
rotated=0;
|
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;
|
//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_list[lcnt] = segment_none;
|
||||||
rstate.render_windows[rp] = *new_w; //get updated window
|
rstate.render_windows[rp] = *new_w; //get updated window
|
||||||
rstate.processed[rp] = false; //force reprocess
|
|
||||||
goto no_add;
|
goto no_add;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue