Move render_windows to per_segment_state_t::render_window

This commit is contained in:
Kp 2014-12-13 16:54:16 +00:00
parent 6b56a3020a
commit 69bc81681a
2 changed files with 14 additions and 11 deletions

View file

@ -25,6 +25,7 @@ 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
rect render_window;
per_segment_state_t() :
Seg_depth(0), processed(false)
{
@ -33,7 +34,6 @@ struct render_state_t
unsigned N_render_segs;
array<segnum_t, MAX_RENDER_SEGS> Render_list;
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;
render_state_t() :
N_render_segs(0)

View file

@ -1351,7 +1351,7 @@ static void build_segment_list(render_state_t &rstate, visited_twobit_array_t &v
rstate.render_pos[start_seg_num] = 0;
{
auto &rsm_start_seg = rstate.render_seg_map[start_seg_num];
auto &rw = rstate.render_windows[0];
auto &rw = rsm_start_seg.render_window;
rw.left = rw.top = 0;
rw.right = grd_curcanv->cv_bitmap.bm_w-1;
rw.bot = grd_curcanv->cv_bitmap.bm_h-1;
@ -1373,7 +1373,7 @@ static void build_segment_list(render_state_t &rstate, visited_twobit_array_t &v
auto &processed = srsm.processed;
if (processed)
continue;
const auto &check_w = rstate.render_windows[scnt];
const auto &check_w = srsm.render_window;
processed = true;
@ -1457,7 +1457,7 @@ static void build_segment_list(render_state_t &rstate, visited_twobit_array_t &v
//see if this seg already visited, and if so, does current window
//expand the old window?
if (rp != -1) {
auto &old_w = rstate.render_windows[rp];
auto &old_w = rstate.render_seg_map[rstate.Render_list[rp]].render_window;
if (nw.left < old_w.left ||
nw.top < old_w.top ||
nw.right > old_w.right ||
@ -1480,8 +1480,11 @@ static void build_segment_list(render_state_t &rstate, visited_twobit_array_t &v
}
rstate.render_pos[ch] = lcnt;
rstate.Render_list[lcnt] = ch;
rstate.render_seg_map[ch].Seg_depth = l;
rstate.render_windows[lcnt] = nw;
{
auto &chrsm = rstate.render_seg_map[ch];
chrsm.Seg_depth = l;
chrsm.render_window = nw;
}
lcnt++;
if (lcnt >= MAX_RENDER_SEGS) {goto done_list;}
visited[ch] = 1;
@ -1587,7 +1590,7 @@ void render_mine(segnum_t start_seg_num,fix eye_offset, window_rendered_data &wi
for (uint_fast32_t i = first_terminal_seg; i < rstate.N_render_segs; i++) {
if (rstate.Render_list[i] != segment_none) {
const auto &rw = rstate.render_windows[i];
const auto &rw = rstate.render_seg_map[rstate.Render_list[i]].render_window;
#ifndef NDEBUG
if (rw.left == -1 || rw.top == -1 || rw.right == -1 || rw.bot == -1)
Int3();
@ -1612,7 +1615,7 @@ void render_mine(segnum_t start_seg_num,fix eye_offset, window_rendered_data &wi
//set global render window vars
{
const auto &rw = rstate.render_windows[nn];
const auto &rw = srsm.render_window;
Window_clip_left = rw.left;
Window_clip_top = rw.top;
Window_clip_right = rw.right;
@ -1659,7 +1662,7 @@ void render_mine(segnum_t start_seg_num,fix eye_offset, window_rendered_data &wi
//set global render window vars
{
const auto &rw = rstate.render_windows[nn];
const auto &rw = srsm.render_window;
Window_clip_left = rw.left;
Window_clip_top = rw.top;
Window_clip_right = rw.right;
@ -1718,7 +1721,7 @@ void render_mine(segnum_t start_seg_num,fix eye_offset, window_rendered_data &wi
//set global render window vars
{
const auto &rw = rstate.render_windows[nn];
const auto &rw = srsm.render_window;
Window_clip_left = rw.left;
Window_clip_top = rw.top;
Window_clip_right = rw.right;
@ -1765,7 +1768,7 @@ void render_mine(segnum_t start_seg_num,fix eye_offset, window_rendered_data &wi
//set global render window vars
{
const auto &rw = rstate.render_windows[nn];
const auto &rw = srsm.render_window;
Window_clip_left = rw.left;
Window_clip_top = rw.top;
Window_clip_right = rw.right;