From d3071d1e50f261440d52aca22101b53051b29924 Mon Sep 17 00:00:00 2001 From: rdb Date: Sat, 16 Apr 2016 14:19:54 +0200 Subject: [PATCH] Use a bitmask for storing clear-active flags --- panda/src/display/drawableRegion.I | 18 +++++++++--------- panda/src/display/drawableRegion.cxx | 23 ++++++++++------------- panda/src/display/drawableRegion.h | 2 +- 3 files changed, 20 insertions(+), 23 deletions(-) diff --git a/panda/src/display/drawableRegion.I b/panda/src/display/drawableRegion.I index b7bf511df6..677a345683 100644 --- a/panda/src/display/drawableRegion.I +++ b/panda/src/display/drawableRegion.I @@ -17,10 +17,10 @@ INLINE DrawableRegion:: DrawableRegion() : _screenshot_buffer_type(RenderBuffer::T_front), - _draw_buffer_type(RenderBuffer::T_back) + _draw_buffer_type(RenderBuffer::T_back), + _clear_mask(0) { - for (int i=0; i= 0)&&(n < RTP_COUNT)); - _clear_active[n] = clear_active; + nassertv(n >= 0 && n < RTP_COUNT); + if (clear_active) { + _clear_mask |= 1 << n; + } else { + _clear_mask &= ~(1 << n); + } update_pixel_factor(); } @@ -37,8 +41,8 @@ set_clear_active(int n, bool clear_active) { */ bool DrawableRegion:: get_clear_active(int n) const { - nassertr((n >= 0)&&(n < RTP_COUNT), false); - return _clear_active[n]; + nassertr(n >= 0 && n < RTP_COUNT, false); + return (_clear_mask & (1 << n)) != 0; } /** @@ -66,9 +70,7 @@ get_clear_value(int n) const { */ void DrawableRegion:: disable_clears() { - for (int i = 0; i < RTP_COUNT; ++i) { - _clear_active[i] = false; - } + _clear_mask = 0; update_pixel_factor(); } @@ -79,12 +81,7 @@ disable_clears() { */ bool DrawableRegion:: is_any_clear_active() const { - for (int i = 0; i < RTP_COUNT; ++i) { - if (get_clear_active(i)) { - return true; - } - } - return false; + return (_clear_mask != 0); } /** diff --git a/panda/src/display/drawableRegion.h b/panda/src/display/drawableRegion.h index 10fafcf687..b5bb9bfd14 100644 --- a/panda/src/display/drawableRegion.h +++ b/panda/src/display/drawableRegion.h @@ -109,9 +109,9 @@ protected: protected: int _screenshot_buffer_type; int _draw_buffer_type; + int _clear_mask; private: - bool _clear_active[RTP_COUNT]; LColor _clear_value[RTP_COUNT]; PN_stdfloat _pixel_zoom;