From 5eb89cea2a4e00288323e3c3daf3c47d4c80d652 Mon Sep 17 00:00:00 2001 From: Jean-Christophe PLAGNIOL-VILLARD Date: Wed, 26 Sep 2012 11:59:04 +0200 Subject: [PATCH] gui: blit the surface on demand Do not blit the surface everytime we write an image As we want to able to render multiple image this will cause 1 blit per image; Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD Signed-off-by: Sascha Hauer --- commands/splash.c | 2 ++ include/gui/graphic_utils.h | 1 + lib/gui/bmp.c | 3 --- lib/gui/graphic_utils.c | 8 ++++++++ lib/gui/png.c | 3 --- 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/commands/splash.c b/commands/splash.c index 02928094c..65dd53019 100644 --- a/commands/splash.c +++ b/commands/splash.c @@ -68,6 +68,8 @@ static int do_splash(int argc, char *argv[]) if (image_renderer_file(&sc, &s, image_file) < 0) ret = 1; + screen_blit(&sc); + fb_close(&sc); return ret; diff --git a/include/gui/graphic_utils.h b/include/gui/graphic_utils.h index 1a177901e..33e0cbfb2 100644 --- a/include/gui/graphic_utils.h +++ b/include/gui/graphic_utils.h @@ -19,5 +19,6 @@ void set_rgba_pixel(struct fb_info *info, void *adr, u8 r, u8 g, u8 b, u8 a); void memset_pixel(struct fb_info *info, void* buf, u32 color, size_t size); int fb_open(const char * fbdev, struct screen *sc, bool offscreen); void fb_close(struct screen *sc); +void screen_blit(struct screen *sc); #endif /* __GRAPHIC_UTILS_H__ */ diff --git a/lib/gui/bmp.c b/lib/gui/bmp.c index c88037568..d5761215d 100644 --- a/lib/gui/bmp.c +++ b/lib/gui/bmp.c @@ -117,9 +117,6 @@ static int bmp_renderer(struct screen *sc, struct surface *s, struct image *img) } else printf("bmp: illegal bits per pixel value: %d\n", bits_per_pixel); - if (sc->offscreenbuf) - memcpy(sc->fb, sc->offscreenbuf, sc->fbsize); - return img->height; } diff --git a/lib/gui/graphic_utils.c b/lib/gui/graphic_utils.c index 15a41094a..3800ee283 100644 --- a/lib/gui/graphic_utils.c +++ b/lib/gui/graphic_utils.c @@ -242,3 +242,11 @@ void fb_close(struct screen *sc) free(sc->offscreenbuf); close(sc->fd); } + +void screen_blit(struct screen *sc) +{ + if (!sc->offscreenbuf) + return; + + memcpy(sc->fb, sc->offscreenbuf, sc->fbsize); +} diff --git a/lib/gui/png.c b/lib/gui/png.c index 36b95f6af..2921ab305 100644 --- a/lib/gui/png.c +++ b/lib/gui/png.c @@ -69,9 +69,6 @@ static int png_renderer(struct screen *sc, struct surface *s, struct image *img) rgba_blend(&sc->info, img, buf, height, width, startx, starty, true); - if (sc->offscreenbuf) - memcpy(sc->fb, sc->offscreenbuf, sc->fbsize); - return img->height; }