scummvm/backends/PalmOS/Src/arm/proc3.cpp
Eugene Sandulenko 6b4484472b Remove trailing whitespaces.
svn-id: r18604
2005-07-30 21:11:48 +00:00

126 lines
3 KiB
C++

#include "native.h"
#include "endianutils.h"
#define MAIN_TYPE CostumeProc3Type
#include "macros.h"
#define MSETPTR(type, member) v1.member = _GETPTR(v1comp, V1CodecType, member, type);
#define MSET32(type, member) v1.member = _GET32(v1comp, V1CodecType, member, type);
#define MSET8(type, member) v1.member = _GET8(v1comp, V1CodecType, member, type);
UInt32 CostumeRenderer_proc3(void *userData68KP) {
// import variables
V1Type v1;
SETPTRV (V1CodecType * , v1, v1comp )
SETPTR (const byte * ,_srcptr )
SET32 (int ,_height )
SET8 (byte ,_scaleIndexX )
SET8 (byte ,_scaleIndexY )
SET8 (byte ,_scaleX )
SET8 (byte ,_scaleY )
SET32 (int32 ,_numStrips )
SET32 (int ,_out_pitch )
SET32 (int ,_out_w )
SET32 (int ,_out_h )
SETPTR (byte * ,_shadow_table )
SETPTR (byte * ,_palette )
SET8 (byte ,_shadow_mode )
MSETPTR (const byte * ,scaletable )
MSET8 (byte ,mask )
MSET8 (byte ,shr )
MSET8 (byte ,repcolor )
MSET8 (byte ,replen )
MSET32 (int ,scaleXstep )
MSET32 (int ,x )
MSET32 (int ,y )
MSET32 (int ,scaleXindex )
MSET32 (int ,scaleYindex )
MSET32 (int ,skip_width )
MSETPTR (byte * ,destptr )
MSETPTR (byte * ,mask_ptr )
// end of import
const byte *mask, *src;
byte *dst;
byte len, maskbit;
int y;
uint color, height, pcolor;
const byte *scaleytab;
bool masked;
y = v1.y;
src = _srcptr;
dst = v1.destptr;
len = v1.replen;
color = v1.repcolor;
height = _height;
scaleytab = &v1.scaletable[_scaleIndexY];
maskbit = revBitMask(v1.x & 7);
mask = v1.mask_ptr + v1.x / 8;
if (len)
goto StartPos;
do {
len = *src++;
color = len >> v1.shr;
len &= v1.mask;
if (!len)
len = *src++;
do {
if (_scaleY == 255 || *scaleytab++ < _scaleY) {
masked = (y < 0 || y >= _out_h) || (v1.mask_ptr && (mask[0] & maskbit));
if (color && !masked) {
// FIXME: Fully implement _shadow_mode.in Sam & Max
// For now, it's enough for transparency.
if (_shadow_mode & 0x20) {
pcolor = _shadow_table[*dst];
} else {
pcolor = _palette[color];
if (pcolor == 13 && _shadow_table)
pcolor = _shadow_table[*dst];
}
*dst = pcolor;
}
dst += _out_w;
mask += _numStrips;
y++;
}
if (!--height) {
if (!--v1.skip_width)
//return _scaleIndexX;
goto end_jump;
height = _height;
y = v1.y;
scaleytab = &v1.scaletable[_scaleIndexY];
if (_scaleX == 255 || v1.scaletable[_scaleIndexX] < _scaleX) {
v1.x += v1.scaleXstep;
if (v1.x < 0 || v1.x >= _out_w)
//return _scaleIndexX;
goto end_jump;
maskbit = revBitMask(v1.x & 7);
v1.destptr += v1.scaleXstep;
}
_scaleIndexX += v1.scaleXstep;
dst = v1.destptr;
mask = v1.mask_ptr + v1.x / 8;
}
StartPos:;
} while (--len);
} while (1);
end_jump:
// v1comp->x = ByteSwap32(v1.x);
// v1comp->destptr = (byte *)ByteSwap32(v1.destptr);
return _scaleIndexX;
}