Use a bitmask for storing clear-active flags

This commit is contained in:
rdb 2016-04-16 14:19:54 +02:00
parent 2b7ef9c787
commit d3071d1e50
3 changed files with 20 additions and 23 deletions

View File

@ -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<RTP_COUNT; i++) {
_clear_active[i] = false;
for (int i = 0; i < RTP_COUNT; ++i) {
_clear_value[i] = LColor(0.0f, 0.0f, 0.0f, 0.0f);
}
_clear_value[RTP_depth] = LColor(1.0f,1.0f,1.0f,1.0f);
@ -35,11 +35,11 @@ INLINE DrawableRegion::
DrawableRegion(const DrawableRegion &copy) :
_screenshot_buffer_type(copy._screenshot_buffer_type),
_draw_buffer_type(copy._draw_buffer_type),
_clear_mask(copy._clear_mask),
_pixel_zoom(copy._pixel_zoom),
_pixel_factor(copy._pixel_factor)
{
for (int i=0; i<RTP_COUNT; i++) {
_clear_active[i] = copy._clear_active[i];
for (int i = 0; i < RTP_COUNT; ++i) {
_clear_value[i] = copy._clear_value[i];
}
}
@ -51,8 +51,8 @@ INLINE void DrawableRegion::
operator = (const DrawableRegion &copy) {
_screenshot_buffer_type = copy._screenshot_buffer_type;
_draw_buffer_type = copy._draw_buffer_type;
for (int i=0; i<RTP_COUNT; i++) {
_clear_active[i] = copy._clear_active[i];
_clear_mask = copy._clear_mask;
for (int i = 0; i < RTP_COUNT; ++i) {
_clear_value[i] = copy._clear_value[i];
}
_pixel_zoom = copy._pixel_zoom;
@ -64,8 +64,8 @@ operator = (const DrawableRegion &copy) {
*/
INLINE void DrawableRegion::
copy_clear_settings(const DrawableRegion &copy) {
for (int i=0; i<RTP_COUNT; i++) {
_clear_active[i] = copy._clear_active[i];
_clear_mask = copy._clear_mask;
for (int i = 0; i < RTP_COUNT; ++i) {
_clear_value[i] = copy._clear_value[i];
}
update_pixel_factor();

View File

@ -27,8 +27,12 @@ DrawableRegion::
*/
void DrawableRegion::
set_clear_active(int n, bool clear_active) {
nassertv((n >= 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);
}
/**

View File

@ -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;