diff options
Diffstat (limited to 'src/emu/tilemap.cpp')
| -rw-r--r-- | src/emu/tilemap.cpp | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/src/emu/tilemap.cpp b/src/emu/tilemap.cpp index fcafd93c56f..39575ed5bc8 100644 --- a/src/emu/tilemap.cpp +++ b/src/emu/tilemap.cpp @@ -1012,27 +1012,35 @@ void tilemap_t::draw_common(screen_device &screen, _BitmapClass &dest, const rec u32 const yextent = visarea.bottom() + visarea.top() + 1; // y0 + y1 + 1 for calculating vertical centre as (y0 + y1 + 1) >> 1 // cache row/colscroll - std::vector<s32> rowscroll(m_scrollrows); - std::vector<s32> colscroll(m_scrollcols); - bool skip_rowscroll = true; - bool skip_colscroll = true; + std::vector<s32> rowscroll; + rowscroll.reserve(m_scrollrows); + + s32 scroll0 = effective_rowscroll(0, xextent); + rowscroll.push_back(scroll0); - for (int i = 0, scroll = 0; i < m_scrollrows; i++) + for (int i = 1; i < m_scrollrows; i++) { - s32 prev = scroll; - scroll = rowscroll[i] = effective_rowscroll(i, xextent); + s32 scroll = effective_rowscroll(i, xextent); + rowscroll.push_back(scroll); - if (i > 0 && scroll != prev) + if (scroll != scroll0) skip_rowscroll = false; } - for (int i = 0, scroll = 0; i < m_scrollcols; i++) + bool skip_colscroll = true; + std::vector<s32> colscroll; + colscroll.reserve(m_scrollcols); + + scroll0 = effective_colscroll(0, yextent); + colscroll.push_back(scroll0); + + for (int i = 1; i < m_scrollcols; i++) { - s32 prev = scroll; - scroll = colscroll[i] = effective_colscroll(i, yextent); + s32 scroll = effective_colscroll(i, yextent); + colscroll.push_back(scroll); - if (i > 0 && scroll != prev) + if (scroll != scroll0) skip_colscroll = false; } |
