From 0704c7f0c7d3e9d5d3fc772b8cbe5947500fb820 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 4 May 2015 10:16:47 +0200 Subject: [PATCH] Create texture_image_color_convert --- gfx/image/image.c | 34 +++++++++++++++++-------- libretro-common/include/formats/image.h | 7 +++++ 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/gfx/image/image.c b/gfx/image/image.c index 46fd32df61..f4a77ba77d 100644 --- a/gfx/image/image.c +++ b/gfx/image/image.c @@ -62,18 +62,10 @@ bool texture_image_set_color_shifts(unsigned *r_shift, unsigned *g_shift, return use_rgba; } -#ifdef HAVE_RPNG -static bool rpng_image_load_argb_shift(const char *path, - struct texture_image *out_img, - unsigned a_shift, unsigned r_shift, - unsigned g_shift, unsigned b_shift) +bool texture_image_color_convert(unsigned r_shift, + unsigned g_shift, unsigned b_shift, unsigned a_shift, + struct texture_image *out_img) { - bool ret = rpng_load_image_argb(path, - &out_img->pixels, &out_img->width, &out_img->height); - - if (!ret) - return false; - /* This is quite uncommon. */ if (a_shift != 24 || r_shift != 16 || g_shift != 8 || b_shift != 0) { @@ -91,8 +83,28 @@ static bool rpng_image_load_argb_shift(const char *path, pixels[i] = (a << a_shift) | (r << r_shift) | (g << g_shift) | (b << b_shift); } + + return true; } + return false; +} + +#ifdef HAVE_RPNG +static bool rpng_image_load_argb_shift(const char *path, + struct texture_image *out_img, + unsigned a_shift, unsigned r_shift, + unsigned g_shift, unsigned b_shift) +{ + bool ret = rpng_load_image_argb(path, + &out_img->pixels, &out_img->width, &out_img->height); + + if (!ret) + return false; + + texture_image_color_convert(r_shift, g_shift, b_shift, + a_shift, out_img); + return true; } #endif diff --git a/libretro-common/include/formats/image.h b/libretro-common/include/formats/image.h index 571d2dc4e6..6da0961c83 100644 --- a/libretro-common/include/formats/image.h +++ b/libretro-common/include/formats/image.h @@ -41,6 +41,13 @@ struct texture_image uint32_t *pixels; }; +bool texture_image_set_color_shifts(unsigned *r_shift, unsigned *g_shift, + unsigned *b_shift, unsigned *a_shift); + +bool texture_image_color_convert(unsigned r_shift, + unsigned g_shift, unsigned b_shift, unsigned a_shift, + struct texture_image *out_img); + bool texture_image_load(struct texture_image *img, const char *path); void texture_image_free(struct texture_image *img);