Example #1
0
void drawputpixel( int x, int y, U8 r, U8 g, U8 b )
{
	if( EGL_GET_TARGET_SURFACE()->bpp == 32 )
		putpixel32( x, y, MAKE_RGB888( r, g, b ) );
	else
		putpixel16( x, y, MAKE_RGB565( r, g, b ) );
}
Example #2
0
void
sysvid_setPalette(img_color_t *pal, U16 n)
{
  U16 i;

  for (i = 0; i < n; i++) {
    palette[i] = MAKE_RGB565(pal[i].r, pal[i].g, pal[i].b);
  }
}
SURFACE* LoadSurfaceInfoFromRGB(U8* bmpdata, U8 bpp, U32 w, U32 h, U32 bmpdatasize, U8* pal)
{
	SURFACE *surface = NULL;
	long i;
	U32  j;
	if (!((bpp == 24) || (bpp == 8) || (bpp == 4))) {
		return 0;
	}
	if ((bpp == 8) || (bpp == 4))
	{
		if (!(surface = create_surface(w, h, bpp)))
		{
			return 0;
		}
		U32 ibpl = (bmpfh.bfSize - bmpfh.bfOffBits) / h;
		surface->pitch = ibpl;
		if (bpp == 8)
		{
			for (i = 0; i < h; i++)
			{
				memcpy(surface->pixels + i*ibpl, bmpdata + (h - 1 - i)*ibpl, surface->w);
			}
			surface->pal->nColors = 256;
			memcpy(surface->pal->colors, pal, 256 * 4);
		}
		else
		{
			for (i = 0; i < h; i++)
			{
				memcpy(surface->pixels + i*ibpl, bmpdata + (h - 1 - i)*ibpl, surface->w / 2);
			}
			surface->pal->nColors = 16;
			memcpy(surface->pal->colors, pal, 16 * 4);
		}

		return surface;
	}
	// 180 x 120 x 3 (bpp = 24)///////
	else if (bpp == 24)
	{
		U32 screenbpp = 16;
		if (!(surface = create_surface(w, h, screenbpp)))
		{
			return 0;
		}

		if (screenbpp == 32)//screen: 4byte(1byte reserved) per pixel
		{
			U32 ibpl;
			U32* rgb32;
			ibpl = ((w * 3) + 3) & 0xfffffffc;
			rgb32 = (U32*)surface->pixels;
			bmpdata += ((h - 1)*ibpl);
			for (i = 0; i < h; i++)
			{
				for (j = 0; j < w; j++)
				{
					rgb32[j] = MAKE_RGB888(bmpdata[j * 3 + 2], bmpdata[j * 3 + 1], bmpdata[j * 3 + 0]);
				}
				bmpdata -= ibpl; //4byte align
				rgb32 += (surface->pitch / 4);
			}
			surface->pixtype = PIX_FMT_RGB888;
		}
		else // convert to rgb888 to rgb565
		{
			U32 ibpl;
			U16* rgb565data;
			ibpl = ((w * 3) + 3) & 0xfffffffc;
			rgb565data = (U16*)surface->pixels;

			bmpdata += ((h - 1)*ibpl);
			for (i = 0; i < h; i++)
			{
				for (j = 0; j < w; j++)
				{
					rgb565data[j] = MAKE_RGB565(bmpdata[j * 3 + 2], bmpdata[j * 3 + 1], bmpdata[j * 3 + 0]);
				}
				bmpdata -= ibpl; //4byte align
				rgb565data += (surface->pitch / 2);
			}
			surface->pixtype = PIX_FMT_RGB565;
		}

	}
	return surface;
}
Example #4
0
void r_draw_roundrect(int x0, int y0, int w, int h, int corner ,EGL_COLOR c)
{
	int startaddr;
	int bpl;
	register int i;
	int dx, dy;
	int Xcenter, Ycenter, X2center, Y2center;
	int x = 0;
	int rightInc = 6;
	int d, diagonalInc;
	int k;

	SURFACE* surf = EGL_GET_TARGET_SURFACE();
	bpl = surf->pitch;
	startaddr = ( U32 )surf->pixels;
	if ( w == 0 || h == 0 )
		return;

	if ( corner != 0 )
	{
		d = w < h ? w : h;
		--corner;
		if ( corner != 0 && corner + 2 >= d )
		{
			if ( corner + 2 == d )  --corner;
			else corner = 0;
		}
	}
	d = 3 - ( corner << 1 );
	diagonalInc = 10 - ( corner << 2 );
	/*Rectangles*/
	dx = w - ( corner << 1 );
	Xcenter = x0 + corner;
	dy = h - ( corner << 1 );
	Ycenter = y0 + corner;
	/*Centers*/
	X2center = Xcenter + dx - 1;
	Y2center = Ycenter + dy - 1;
	i = dx;
	if( surf->bpp == 16 )
	{
		int color ;
		U8 r,g,b;
		EXTRACT_RGB(c,r,g,b);
		color = MAKE_RGB565(r,g,b);
		k = 0;
		switch( i % 4 )
		{
			do
			{
		case 0:
			putpixel16( Xcenter + k, y0, color );
			putpixel16( Xcenter + k, y0 + h - 1, color );
			k++;
		case 3:
			putpixel16( Xcenter + k, y0, color );
			putpixel16( Xcenter + k, y0 + h - 1, color );
			k++;
		case 2:
			putpixel16( Xcenter + k, y0, color );
			putpixel16( Xcenter + k, y0 + h - 1, color );
			k++;
		case 1:
			putpixel16( Xcenter + k, y0, color );
			putpixel16( Xcenter + k, y0 + h - 1, color );
			k++;
			}
			while( ( i -= 4 ) > 0 );
		}
		if ( h < 3 )  return;
		k = 0;
		i = dy;
		switch( i % 4 )
		{
			do
			{
		case 0:
			putpixel16( x0, Ycenter + k, color );
			putpixel16( x0 + w - 1, Ycenter + k, color );
			k++;
		case 3:
			putpixel16( x0, Ycenter + k, color );
			putpixel16( x0 + w - 1, Ycenter + k, color );
			k++;
		case 2:
			putpixel16( x0, Ycenter + k, color );
			putpixel16( x0 + w - 1, Ycenter + k, color );
			k++;
		case 1:
			putpixel16( x0, Ycenter + k, color );
			putpixel16( x0 + w - 1, Ycenter + k, color );
			k++;
			}
			while( ( i -= 4 ) > 0 );
		}
		while ( x < corner )
		{
			putpixel16( Xcenter - corner, Ycenter - x, color );
			putpixel16( Xcenter - x, Ycenter - corner, color );
			putpixel16( X2center + x, Ycenter - corner, color );
			putpixel16( X2center + corner, Ycenter - x, color );
			putpixel16( X2center + x, Y2center + corner, color );
			putpixel16( X2center + corner, Y2center + x, color );
			putpixel16( Xcenter - x, Y2center + corner, color );
			putpixel16( Xcenter - corner, Y2center + x, color );
			if ( d >= 0 )
			{
				d += diagonalInc;
				diagonalInc += 8;
				--corner;
			}
			else
			{
				d += rightInc;
				diagonalInc += 4;
			}
			rightInc += 4;
			++x;
		}/*while*/
	}
	else//32
	{
		int color ;
		U8 r,g,b;
		EXTRACT_RGB(c,r,g,b);
		color = MAKE_RGB888(r,g,b);
		k = 0;
		switch( i % 4 )
		{
			do
			{
		case 0:
			putpixel32( Xcenter + k, y0, color );
			putpixel32( Xcenter + k, y0 + h - 1, color );
			k++;
		case 3:
			putpixel32( Xcenter + k, y0, color );
			putpixel32( Xcenter + k, y0 + h - 1, color );
			k++;
		case 2:
			putpixel32( Xcenter + k, y0, color );
			putpixel32( Xcenter + k, y0 + h - 1, color );
			k++;
		case 1:
			putpixel32( Xcenter + k, y0, color );
			putpixel32( Xcenter + k, y0 + h - 1, color );
			k++;
			}
			while( ( i -= 4 ) > 0 );
		}
		if ( h < 3 )  return;
		i = dy;
		k = 0;
		switch( i % 4 )
		{
			do
			{
		case 0:
			putpixel32( x0, Ycenter + k, color );
			putpixel32( x0 + w - 1, Ycenter + k, color );
			k++;
		case 3:
			putpixel32( x0, Ycenter + k, color );
			putpixel32( x0 + w - 1, Ycenter + k, color );
			k++;
		case 2:
			putpixel32( x0, Ycenter + k, color );
			putpixel32( x0 + w - 1, Ycenter + k, color );
			k++;
		case 1:
			putpixel32( x0, Ycenter + k, color );
			putpixel32( x0 + w - 1, Ycenter + k, color );
			k++;
			}
			while( ( i -= 4 ) > 0 );
		}
		while ( x < corner )
		{
			putpixel32( Xcenter - corner, Ycenter - x, color );
			putpixel32( Xcenter - x, Ycenter - corner, color );
			putpixel32( X2center + x, Ycenter - corner, color );
			putpixel32( X2center + corner, Ycenter - x, color );
			putpixel32( X2center + x, Y2center + corner, color );
			putpixel32( X2center + corner, Y2center + x, color );
			putpixel32( Xcenter - x, Y2center + corner, color );
			putpixel32( Xcenter - corner, Y2center + x, color );
			if ( d >= 0 )
			{
				d += diagonalInc;
				diagonalInc += 8;
				--corner;
			}
			else
			{
				d += rightInc;
				diagonalInc += 4;
			}
			rightInc += 4;
			++x;
		}/*while*/
	}
}