Esempio n. 1
0
void tileutils_EncodeShadowRun(Pixel32 **inBuf, int *pos, int width, Pixel16 **outBufPtr)
{
	Pixel16			pix16;
	unsigned char	alpha;
	int				runLen      = 0;
	Pixel16	*       headerPtr   = *outBufPtr;
	(*outBufPtr)++;

	RGB32Info(**inBuf, &pix16, &alpha);
	Pixel32			pix32       = (**inBuf) & k_32_BIT_RGB_MASK;
	while (pix32 == k_32_BIT_SHADOW_PIXEL && (*pos < width)) {

		(*inBuf)++;

		(*pos)++;

		runLen++;

		RGB32Info(**inBuf, &pix16, &alpha);
		pix32 = (**inBuf) & k_32_BIT_RGB_MASK;
	}

    Pixel16         footer      = static_cast<Pixel16>(k_TILE_SHADOW_RUN_ID << 8 | runLen);

	if (*pos >= width) footer |= k_TILE_EOLN_ID << 8;

	*headerPtr = footer;
}
Esempio n. 2
0
void spriteutils_EncodeShadowRun(Pixel32 **inBuf, sint32 *pos, sint32 width, Pixel16 **outBufPtr)
{
	Pixel16         pix16;
	uint8           alpha;
	sint32          runLen = 0;
	Pixel16         footer=0;
	Pixel16         shadowPixel;

	if (g_is565Format) shadowPixel = k_SHADOW_PIXEL_565;
	else shadowPixel = k_SHADOW_PIXEL_555;

	RGB32Info(**inBuf, &pix16, &alpha);
	while (pix16 == shadowPixel && (*pos < width)) {

		(*inBuf)++;


		(*pos)++;


		runLen++;

		RGB32Info(**inBuf, &pix16, &alpha);
	}


	footer = (Pixel16)(k_SHADOW_RUN_ID << 8 | runLen);


	if (*pos >= width) footer |= k_EOLN_ID << 8;


	**outBufPtr = footer;
	(*outBufPtr)++;
}
Esempio n. 3
0
void spriteutils_EncodeCopyRun(Pixel32 **inBuf, sint32 *pos, sint32 width, Pixel16 **outBufPtr)
{
	Pixel16         pix16;
	uint8           alpha;
	sint32          runLen = 0;
	Pixel16         footer=0;
	Pixel16         *headerPtr;
	Pixel16         shadowPixel;

	if (g_is565Format) {
		shadowPixel = k_SHADOW_PIXEL_565;
	} else {
		shadowPixel = k_SHADOW_PIXEL_555;
	}

	headerPtr = *outBufPtr;
	(*outBufPtr)++;

	RGB32Info(**inBuf, &pix16, &alpha);

	while (pix16 != shadowPixel && alpha == k_ALL_ALPHA && (*pos < width)) {


		if (pix16 == 0x0000) pix16 = 0x0001;


		**outBufPtr = pix16;


		(*outBufPtr)++;


		(*inBuf)++;


		(*pos)++;


		runLen++;

		RGB32Info(**inBuf, &pix16, &alpha);
	}


	footer = (Pixel16) (k_COPY_RUN_ID << 8 | runLen);


	if (*pos >= width) footer |= k_EOLN_ID << 8;

	*headerPtr = footer;
}
Esempio n. 4
0
char tileutils_EncodeScanline(Pixel32 *scanline, int width, Pixel16 **outBufPtr)
{
	Pixel16			pix16;
	Pixel32			pix32;
	Pixel32	*       scanPtr    = scanline;
	unsigned char	alpha;
	int				pos         = 0;
	char			empty = FALSE;

	while (scanPtr < (scanline + width)) {
		pix32 = *scanPtr;

		RGB32Info(pix32, &pix16, &alpha);
		pix32 = pix32 & 0x00FFFFFF;

		switch (pix32) {
		case k_32_BIT_SKIP_PIXEL :
			empty = tileutils_EncodeSkipRun(&scanPtr, &pos, width, outBufPtr);
			break;
		case k_32_BIT_COLORIZE_PIXEL :
			tileutils_EncodeColorizeRun(&scanPtr, &pos, width, outBufPtr);
			break;
		case k_32_BIT_SHADOW_PIXEL :
			tileutils_EncodeShadowRun(&scanPtr, &pos, width, outBufPtr);
			break;
		default:
			tileutils_EncodeCopyRun(&scanPtr, &pos, width, outBufPtr);
		}
	}

	return empty;
}
Esempio n. 5
0
char spriteutils_EncodeScanlineWshadow(Pixel32 *scanline, sint32 width, Pixel16 **outBufPtr)
{
	Pixel16         pix16;
	Pixel32         pix32;
	Pixel32         *scanPtr = scanline;
	uint8           alpha;
	sint32          pos;
	Pixel16         *startPtr;
	BOOL            empty = FALSE;
	Pixel16         shadowPixel;

	if (g_is565Format) {
		shadowPixel = k_SHADOW_PIXEL_565;
	} else {
		shadowPixel = k_SHADOW_PIXEL_555;
	}


	pos = 0;


	startPtr = *outBufPtr;



	while (scanPtr < (scanline + width)) {
		pix32 = *scanPtr;

		empty = FALSE;

		RGB32Info(pix32, &pix16, &alpha);

		if ( (pix16 == k_CHROMAKEY_PIXEL  && alpha == k_NO_ALPHA) ||  (pix16 == k_SHADOWBACKGD_PIXEL) )
		{

			empty = spriteutils_EncodeChromakeyWshadowRun(&scanPtr, &pos, width, outBufPtr);
		}
		else
		if (pix16 == shadowPixel) {

			spriteutils_EncodeShadowRun(&scanPtr, &pos, width, outBufPtr);
		}
		else
		if (alpha != k_NO_ALPHA && alpha != k_ALL_ALPHA) {

			spriteutils_EncodeFeatheredRun(&scanPtr, &pos, width, outBufPtr);
		}
		else {

			if (alpha == k_ALL_ALPHA)
				spriteutils_EncodeCopyRun(&scanPtr, &pos, width, outBufPtr);
			else {
				printf("\nError in bitmap data.  Pixel with no associated alpha.\n");
				exit(-1);
			}
		}
	}

	return empty;
}
Esempio n. 6
0
void spriteutils_EncodeFeatheredRun(Pixel32 **inBuf, sint32 *pos, sint32 width, Pixel16 **outBufPtr)
{
	Pixel16         pix16;
	Pixel16         footer=0;
	uint8           alpha;

	RGB32Info(**inBuf, &pix16, &alpha);


	if (pix16 == 0x0000) pix16 = 0x0001;

	(*inBuf)++;
	(*pos)++;

	footer = (k_FEATHERED_RUN_ID << 8) | alpha;


	if (*pos >= width)
		footer |= k_EOLN_ID << 8;


	**outBufPtr = footer;
	(*outBufPtr)++;


	**outBufPtr = pix16;
	(*outBufPtr)++;

}
Esempio n. 7
0
char spriteutils_EncodeChromakeyWshadowRun(Pixel32 **inBuf, sint32 *pos, sint32 width, Pixel16 **outBufPtr)
{
	Pixel16         pix16;
	uint8           alpha;
	sint32          runLen = 0;
	Pixel16         footer=0;

	RGB32Info(**inBuf, &pix16, &alpha);
	while ( ((pix16 == k_CHROMAKEY_PIXEL && alpha == k_NO_ALPHA) ||  (pix16 == k_SHADOWBACKGD_PIXEL))  && (*pos < width) ) {

		(*inBuf)++;


		(*pos)++;


		runLen++;

		RGB32Info(**inBuf, &pix16, &alpha);
	}


	if (runLen < width) {

		footer = (Pixel16)(k_CHROMAKEY_RUN_ID << 8 | runLen);


		if (*pos >= width) footer |= k_EOLN_ID << 8;


		**outBufPtr = footer;
		(*outBufPtr)++;
	} else {

		return TRUE;
	}

	return FALSE;
}
Esempio n. 8
0
char tileutils_EncodeSkipRun(Pixel32 **inBuf, int *pos, int width, Pixel16 **outBufPtr)
{
	Pixel16			pix16;
	unsigned char	alpha;
	int				runLen = 0;

	RGB32Info(**inBuf, &pix16, &alpha);
	Pixel32			pix32   = (**inBuf) & k_32_BIT_RGB_MASK;

	while (pix32 == k_32_BIT_SKIP_PIXEL && (*pos < width)) {

		(*inBuf)++;

		(*pos)++;

		runLen++;

		RGB32Info(**inBuf, &pix16, &alpha);
		pix32 = (**inBuf) & k_32_BIT_RGB_MASK;
	}

	if (runLen < width) {

		Pixel16			footer = static_cast<Pixel16>(k_TILE_SKIP_RUN_ID << 8 | runLen);

		if (*pos >= width) footer |= k_EOLN_ID << 8;

		**outBufPtr = footer;
		(*outBufPtr)++;
	    return FALSE;
	} else {

		return TRUE;
	}

}