Pass gr_bitblt_find_transparent_area arg by &

This commit is contained in:
Kp 2014-12-02 03:35:01 +00:00
parent c990701d87
commit 3097a5b247
3 changed files with 17 additions and 18 deletions

View file

@ -505,18 +505,18 @@ void show_fullscr(grs_bitmap &bm)
}
// Find transparent area in bitmap
void gr_bitblt_find_transparent_area(grs_bitmap *bm, unsigned &minx, unsigned &miny, unsigned &maxx, unsigned &maxy)
void gr_bitblt_find_transparent_area(const grs_bitmap &bm, unsigned &minx, unsigned &miny, unsigned &maxx, unsigned &maxy)
{
using std::advance;
using std::min;
using std::max;
if (!(bm->bm_flags&BM_FLAG_TRANSPARENT))
if (!(bm.bm_flags&BM_FLAG_TRANSPARENT))
return;
minx = bm->bm_w - 1;
minx = bm.bm_w - 1;
maxx = 0;
miny = bm->bm_h - 1;
miny = bm.bm_h - 1;
maxy = 0;
unsigned i = 0, count = 0;
@ -530,28 +530,28 @@ void gr_bitblt_find_transparent_area(grs_bitmap *bm, unsigned &minx, unsigned &m
}
};
// decode the bitmap
if (bm->bm_flags & BM_FLAG_RLE){
if (bm.bm_flags & BM_FLAG_RLE){
unsigned data_offset;
data_offset = 1;
if (bm->bm_flags & BM_FLAG_RLE_BIG)
if (bm.bm_flags & BM_FLAG_RLE_BIG)
data_offset = 2;
auto sbits = &bm->bm_data[4 + (bm->bm_h * data_offset)];
for (unsigned y = 0; y < bm->bm_h; ++y)
auto sbits = &bm.get_bitmap_data()[4 + (bm.bm_h * data_offset)];
for (unsigned y = 0; y < bm.bm_h; ++y)
{
array<ubyte, 4096> buf;
gr_rle_decode({sbits, begin(buf)}, rle_end(*bm, buf));
advance(sbits, bm->bm_data[4+i] | (data_offset == 2 ? static_cast<unsigned>(bm->bm_data[5+i]) << 8 : 0));
gr_rle_decode({sbits, begin(buf)}, rle_end(bm, buf));
advance(sbits, bm.bm_data[4+i] | (data_offset == 2 ? static_cast<unsigned>(bm.bm_data[5+i]) << 8 : 0));
i += data_offset;
for (unsigned x = 0; x < bm->bm_w; ++x)
for (unsigned x = 0; x < bm.bm_w; ++x)
check(x, y, buf[x]);
}
}
else
{
for (unsigned y = 0; y < bm->bm_h; ++y)
for (unsigned x = 0; x < bm->bm_w; ++x)
check(x, y, bm->bm_data[i++]);
for (unsigned y = 0; y < bm.bm_h; ++y)
for (unsigned x = 0; x < bm.bm_w; ++x)
check(x, y, bm.bm_data[i++]);
}
Assert (count);
}

View file

@ -316,7 +316,7 @@ void gr_ubitmap(grs_bitmap &bm);
void show_fullscr(grs_bitmap &bm);
// Find transparent area in bitmap
void gr_bitblt_find_transparent_area(grs_bitmap *bm, unsigned &minx, unsigned &miny, unsigned &maxx, unsigned &maxy);
void gr_bitblt_find_transparent_area(const grs_bitmap &bm, unsigned &minx, unsigned &miny, unsigned &maxx, unsigned &maxy);
// bitmap function with transparency
void gr_bitmapm(unsigned x, unsigned y, const grs_bitmap &bm);

View file

@ -210,16 +210,15 @@ void init_cockpit()
case CM_REAR_VIEW:
{
unsigned x1 = 0, y1 = 0, x2 = SWIDTH, y2 = (SHEIGHT*2)/3;
grs_bitmap *bm;
int mode = PlayerCfg.CockpitMode[1];
#if defined(DXX_BUILD_DESCENT_II)
mode += (HIRESMODE?(Num_cockpits/2):0);
#endif
PIGGY_PAGE_IN(cockpit_bitmap[mode]);
bm=&GameBitmaps[cockpit_bitmap[mode].index];
auto &bm = GameBitmaps[cockpit_bitmap[mode].index];
gr_bitblt_find_transparent_area(bm, x1, y1, x2, y2);
game_init_render_sub_buffers(x1*((float)SWIDTH/bm->bm_w), y1*((float)SHEIGHT/bm->bm_h), (x2-x1+1)*((float)SWIDTH/bm->bm_w), (y2-y1+2)*((float)SHEIGHT/bm->bm_h));
game_init_render_sub_buffers(x1*((float)SWIDTH/bm.bm_w), y1*((float)SHEIGHT/bm.bm_h), (x2-x1+1)*((float)SWIDTH/bm.bm_w), (y2-y1+2)*((float)SHEIGHT/bm.bm_h));
break;
}