From d6690d7514b21f8498485f9538f16bafc2a26b4f Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Sun, 2 Apr 2006 07:47:31 +0000 Subject: [PATCH] support all advertised formats SVN revision: 21713 --- .../src/modules/engines/buffer/evas_engine.c | 4 +- .../src/modules/engines/buffer/evas_engine.h | 1 + .../src/modules/engines/buffer/evas_outbuf.c | 63 ++++++++++++++++--- 3 files changed, 56 insertions(+), 12 deletions(-) diff --git a/legacy/evas/src/modules/engines/buffer/evas_engine.c b/legacy/evas/src/modules/engines/buffer/evas_engine.c index 794b0a58b3..25acfb56c6 100644 --- a/legacy/evas/src/modules/engines/buffer/evas_engine.c +++ b/legacy/evas/src/modules/engines/buffer/evas_engine.c @@ -80,7 +80,7 @@ _output_setup(int w, else if (depth_type == EVAS_ENGINE_BUFFER_DEPTH_RGB32) dep = OUTBUF_DEPTH_RGB_32BPP_888_8888; else if (depth_type == EVAS_ENGINE_BUFFER_DEPTH_BGRA32) - dep = OUTBUF_DEPTH_BGR_32BPP_888_8888; + dep = OUTBUF_DEPTH_BGRA_32BPP_8888_8888; else if (depth_type == EVAS_ENGINE_BUFFER_DEPTH_RGB24) dep = OUTBUF_DEPTH_RGB_24BPP_888_888; else if (depth_type == EVAS_ENGINE_BUFFER_DEPTH_BGR24) @@ -345,4 +345,4 @@ Evas_Module_Api evas_modapi = EVAS_MODULE_TYPE_ENGINE, "buffer", "none" -}; \ No newline at end of file +}; diff --git a/legacy/evas/src/modules/engines/buffer/evas_engine.h b/legacy/evas/src/modules/engines/buffer/evas_engine.h index 8d5dd2cf3a..df5ac9aae1 100644 --- a/legacy/evas/src/modules/engines/buffer/evas_engine.h +++ b/legacy/evas/src/modules/engines/buffer/evas_engine.h @@ -9,6 +9,7 @@ enum _Outbuf_Depth { OUTBUF_DEPTH_NONE, OUTBUF_DEPTH_ARGB_32BPP_8888_8888, + OUTBUF_DEPTH_BGRA_32BPP_8888_8888, OUTBUF_DEPTH_RGB_32BPP_888_8888, OUTBUF_DEPTH_BGR_32BPP_888_8888, OUTBUF_DEPTH_RGB_24BPP_888_888, diff --git a/legacy/evas/src/modules/engines/buffer/evas_outbuf.c b/legacy/evas/src/modules/engines/buffer/evas_outbuf.c index cdd5ecebbb..b9ea8bc1e0 100644 --- a/legacy/evas/src/modules/engines/buffer/evas_outbuf.c +++ b/legacy/evas/src/modules/engines/buffer/evas_outbuf.c @@ -107,7 +107,9 @@ evas_buffer_outbuf_buf_new_region_for_update(Outbuf *buf, int x, int y, int w, i im = evas_common_image_create(w, h); if (im) { - if ((buf->depth == OUTBUF_DEPTH_ARGB_32BPP_8888_8888)) + printf("bleh\n"); + if (((buf->depth == OUTBUF_DEPTH_ARGB_32BPP_8888_8888)) || + ((buf->depth == OUTBUF_DEPTH_BGRA_32BPP_8888_8888))) { im->flags |= RGBA_IMAGE_HAS_ALPHA; memset(im->image->data, 0, w * h * sizeof(DATA32)); @@ -264,23 +266,64 @@ evas_buffer_outbuf_buf_push_updated_region(Outbuf *buf, RGBA_Image *update, int break; case OUTBUF_DEPTH_BGR_32BPP_888_8888: { - DATA32 *src; + DATA32 *src, *dst; DATA8 *dest; - int yy, row_bytes; - Gfx_Func_Blend_Src_Dst func; + int xx, yy, row_bytes; row_bytes = buf->dest_row_bytes; dest = (DATA8 *)(buf->dest) + (y * row_bytes) + (x * 4); - func = evas_common_draw_func_copy_get(w, 0); - if (func) + if (buf->func.new_update_region) { - for (yy = 0; yy < h; yy++) + dest = buf->func.new_update_region(x, y, w, h, &row_bytes); + } + for (yy = 0; yy < h; yy++) + { + dst = dest + (yy * row_bytes); + src = update->image->data + (yy * update->image->w); + for (xx = 0; xx < w; xx++) { - src = update->image->data + (yy * update->image->w); - func(src, dest, w); - dest += row_bytes; + A_VAL(dst) = B_VAL(src); + R_VAL(dst) = G_VAL(src); + G_VAL(dst) = R_VAL(src); + dst++; + src++; } } + if (buf->func.free_update_region) + { + buf->func.free_update_region(x, y, w, h, dest); + } + } + break; + case OUTBUF_DEPTH_BGRA_32BPP_8888_8888: + { + DATA32 *src, *dst; + DATA8 *dest; + int xx, yy, row_bytes; + + row_bytes = buf->dest_row_bytes; + dest = (DATA8 *)(buf->dest) + (y * row_bytes) + (x * 4); + if (buf->func.new_update_region) + { + dest = buf->func.new_update_region(x, y, w, h, &row_bytes); + } + for (yy = 0; yy < h; yy++) + { + dst = dest + (yy * row_bytes); + src = update->image->data + (yy * update->image->w); + for (xx = 0; xx < w; xx++) + { + A_VAL(dst) = B_VAL(src); + R_VAL(dst) = G_VAL(src); + G_VAL(dst) = R_VAL(src); + dst++; + src++; + } + } + if (buf->func.free_update_region) + { + buf->func.free_update_region(x, y, w, h, dest); + } } break; default: