aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/evas/src/modules/engines/buffer/evas_outbuf.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/evas/src/modules/engines/buffer/evas_outbuf.c')
-rw-r--r--libraries/evas/src/modules/engines/buffer/evas_outbuf.c31
1 files changed, 24 insertions, 7 deletions
diff --git a/libraries/evas/src/modules/engines/buffer/evas_outbuf.c b/libraries/evas/src/modules/engines/buffer/evas_outbuf.c
index 27f7a2c..0fa1842 100644
--- a/libraries/evas/src/modules/engines/buffer/evas_outbuf.c
+++ b/libraries/evas/src/modules/engines/buffer/evas_outbuf.c
@@ -19,11 +19,12 @@ evas_buffer_outbuf_buf_free(Outbuf *buf)
19Outbuf * 19Outbuf *
20evas_buffer_outbuf_buf_setup_fb(int w, int h, Outbuf_Depth depth, void *dest, int dest_row_bytes, int use_color_key, DATA32 color_key, int alpha_level, 20evas_buffer_outbuf_buf_setup_fb(int w, int h, Outbuf_Depth depth, void *dest, int dest_row_bytes, int use_color_key, DATA32 color_key, int alpha_level,
21 void * (*new_update_region) (int x, int y, int w, int h, int *row_bytes), 21 void * (*new_update_region) (int x, int y, int w, int h, int *row_bytes),
22 void (*free_update_region) (int x, int y, int w, int h, void *data) 22 void (*free_update_region) (int x, int y, int w, int h, void *data),
23 void * (*switch_buffer) (void *data, void *dest_buffer),
24 void *switch_data
23 ) 25 )
24{ 26{
25 Outbuf *buf; 27 Outbuf *buf;
26 int bpp;
27 28
28 buf = calloc(1, sizeof(Outbuf)); 29 buf = calloc(1, sizeof(Outbuf));
29 if (!buf) return NULL; 30 if (!buf) return NULL;
@@ -38,14 +39,12 @@ evas_buffer_outbuf_buf_setup_fb(int w, int h, Outbuf_Depth depth, void *dest, in
38 buf->alpha_level = alpha_level; 39 buf->alpha_level = alpha_level;
39 buf->color_key = color_key; 40 buf->color_key = color_key;
40 buf->use_color_key = use_color_key; 41 buf->use_color_key = use_color_key;
42 buf->first_frame = 1;
41 43
42 buf->func.new_update_region = new_update_region; 44 buf->func.new_update_region = new_update_region;
43 buf->func.free_update_region = free_update_region; 45 buf->func.free_update_region = free_update_region;
44 46 buf->func.switch_buffer = switch_buffer;
45 bpp = sizeof(DATA32); 47 buf->switch_data = switch_data;
46 if ((buf->depth == OUTBUF_DEPTH_RGB_24BPP_888_888) ||
47 (buf->depth == OUTBUF_DEPTH_BGR_24BPP_888_888))
48 bpp = 3;
49 48
50 if ((buf->depth == OUTBUF_DEPTH_ARGB_32BPP_8888_8888) && 49 if ((buf->depth == OUTBUF_DEPTH_ARGB_32BPP_8888_8888) &&
51 (buf->dest) && (buf->dest_row_bytes == (buf->w * sizeof(DATA32)))) 50 (buf->dest) && (buf->dest_row_bytes == (buf->w * sizeof(DATA32))))
@@ -102,6 +101,24 @@ evas_buffer_outbuf_buf_free_region_for_update(Outbuf *buf, RGBA_Image *update)
102} 101}
103 102
104void 103void
104evas_buffer_outbuf_buf_switch_buffer(Outbuf *buf)
105{
106 if (buf->func.switch_buffer)
107 {
108 buf->dest = buf->func.switch_buffer(buf->switch_data, buf->dest);
109 if (buf->priv.back_buf)
110 {
111 evas_cache_image_drop(&buf->priv.back_buf->cache_entry);
112 buf->priv.back_buf = (RGBA_Image *) evas_cache_image_data(evas_common_image_cache_get(),
113 buf->w, buf->h,
114 buf->dest,
115 buf->depth == OUTBUF_DEPTH_ARGB_32BPP_8888_8888 ? 1 : 0,
116 EVAS_COLORSPACE_ARGB8888);
117 }
118 }
119}
120
121void
105evas_buffer_outbuf_buf_push_updated_region(Outbuf *buf, RGBA_Image *update, int x, int y, int w, int h) 122evas_buffer_outbuf_buf_push_updated_region(Outbuf *buf, RGBA_Image *update, int x, int y, int w, int h)
106{ 123{
107 /* copy update image to out buf & convert */ 124 /* copy update image to out buf & convert */