diff --git a/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c b/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c index 46c795b60b..a9e2d7b03e 100644 --- a/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c +++ b/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c @@ -1334,7 +1334,6 @@ _ecore_evas_engine_software_gdi_init(Ecore_Evas *ee) { /* FIXME: REDRAW_DEBUG missing for now */ einfo->info.window = ((Ecore_Win32_Window *)ee->prop.window)->window; - einfo->info.depth = ecore_win32_screen_depth_get(); einfo->info.rotation = 0; einfo->info.borderless = 0; einfo->info.fullscreen = 0; @@ -1377,7 +1376,6 @@ _ecore_evas_engine_software_ddraw_init(Ecore_Evas *ee) { /* FIXME: REDRAW_DEBUG missing for now */ einfo->info.window = ((Ecore_Win32_Window *)ee->prop.window)->window; - einfo->info.depth = ecore_win32_screen_depth_get(); einfo->info.rotation = 0; if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo)) { diff --git a/src/modules/evas/engines/software_ddraw/Evas_Engine_Software_DDraw.h b/src/modules/evas/engines/software_ddraw/Evas_Engine_Software_DDraw.h index 9735bb7c8b..bc2b69d291 100644 --- a/src/modules/evas/engines/software_ddraw/Evas_Engine_Software_DDraw.h +++ b/src/modules/evas/engines/software_ddraw/Evas_Engine_Software_DDraw.h @@ -17,7 +17,6 @@ struct _Evas_Engine_Info_Software_DDraw struct { HWND window; - int depth; int rotation; unsigned int fullscreen : 1; } info; diff --git a/src/modules/evas/engines/software_ddraw/evas_ddraw_buffer.c b/src/modules/evas/engines/software_ddraw/evas_ddraw_buffer.c index 3b94686d68..0886e37bb3 100644 --- a/src/modules/evas/engines/software_ddraw/evas_ddraw_buffer.c +++ b/src/modules/evas/engines/software_ddraw/evas_ddraw_buffer.c @@ -5,8 +5,7 @@ DD_Output_Buffer * -evas_software_ddraw_output_buffer_new(int depth, - int width, +evas_software_ddraw_output_buffer_new(int width, int height, void *data) { @@ -16,10 +15,9 @@ evas_software_ddraw_output_buffer_new(int depth, if (!ddob) return NULL; ddob->data = data; - ddob->depth = depth; ddob->width = width; ddob->height = height; - ddob->pitch = width * depth / 8; + ddob->pitch = width * 4; ddob->psize = ddob->pitch * height; if (!ddob->data) @@ -48,7 +46,6 @@ evas_software_ddraw_output_buffer_paste(DD_Output_Buffer *ddob, int ddraw_width, int ddraw_height, int ddraw_pitch, - int ddraw_depth, int x, int y) { @@ -69,9 +66,9 @@ evas_software_ddraw_output_buffer_paste(DD_Output_Buffer *ddob, height = ((y + ddob->height) > ddraw_height) ? ddraw_height - y : ddob->height; - pitch = width * ddob->depth / 8; + pitch = width * 4; - dd_data = (DATA8 *)ddraw_data + y * ddraw_pitch + x * ddraw_depth; + dd_data = (DATA8 *)ddraw_data + y * ddraw_pitch + x * 32; evas_data = (unsigned char *)ddob->data; for (j = 0; j < height; j++, evas_data += ddob->pitch, dd_data += ddraw_pitch) memcpy(dd_data, evas_data, pitch); @@ -84,9 +81,3 @@ evas_software_ddraw_output_buffer_data(DD_Output_Buffer *ddob, if (bytes_per_line_ret) *bytes_per_line_ret = ddob->pitch; return ddob->data; } - -int -evas_software_ddraw_output_buffer_depth(DD_Output_Buffer *ddob) -{ - return ddob->depth; -} diff --git a/src/modules/evas/engines/software_ddraw/evas_ddraw_main.cpp b/src/modules/evas/engines/software_ddraw/evas_ddraw_main.cpp index 2d98a04586..5d11b94124 100644 --- a/src/modules/evas/engines/software_ddraw/evas_ddraw_main.cpp +++ b/src/modules/evas/engines/software_ddraw/evas_ddraw_main.cpp @@ -3,7 +3,6 @@ int evas_software_ddraw_init (HWND window, - int depth, int fullscreen, Outbuf *buf) { @@ -38,12 +37,10 @@ evas_software_ddraw_init (HWND window, pixel_format.dwSize = sizeof(pixel_format); buf->priv.dd.surface_primary->GetPixelFormat(&pixel_format); - if (pixel_format.dwRGBBitCount != (DWORD)depth) + if (pixel_format.dwRGBBitCount != 32) goto release_object; - buf->priv.dd.depth = depth; - - res = buf->priv.dd.object->SetDisplayMode(width, height, depth); + res = buf->priv.dd.object->SetDisplayMode(width, height, 32); if (FAILED(res)) goto release_object; @@ -54,7 +51,8 @@ evas_software_ddraw_init (HWND window, surface_desc.dwBackBufferCount = 1; res = buf->priv.dd.object->CreateSurface(&surface_desc, - &buf->priv.dd.surface_primary, NULL); + &buf->priv.dd.surface_primary, + NULL); if (FAILED(res)) goto release_object; @@ -116,10 +114,8 @@ evas_software_ddraw_init (HWND window, pixel_format.dwSize = sizeof(pixel_format); buf->priv.dd.surface_primary->GetPixelFormat(&pixel_format); - if (pixel_format.dwRGBBitCount != (DWORD)depth) + if (pixel_format.dwRGBBitCount != 32) goto release_surface_back; - - buf->priv.dd.depth = depth; } return 1; @@ -177,8 +173,7 @@ void * evas_software_ddraw_lock(Outbuf *buf, int *ddraw_width, int *ddraw_height, - int *ddraw_pitch, - int *ddraw_depth) + int *ddraw_pitch) { DDSURFACEDESC surface_desc; @@ -194,7 +189,6 @@ evas_software_ddraw_lock(Outbuf *buf, *ddraw_width = surface_desc.dwWidth; *ddraw_height = surface_desc.dwHeight; *ddraw_pitch = surface_desc.lPitch; - *ddraw_depth = surface_desc.ddpfPixelFormat.dwRGBBitCount >> 3; return surface_desc.lpSurface; } diff --git a/src/modules/evas/engines/software_ddraw/evas_engine.c b/src/modules/evas/engines/software_ddraw/evas_engine.c index 44e0f725f2..f74fe72f13 100644 --- a/src/modules/evas/engines/software_ddraw/evas_engine.c +++ b/src/modules/evas/engines/software_ddraw/evas_engine.c @@ -34,9 +34,7 @@ eng_output_setup(void *engine, void *in, unsigned int w, unsigned int h) ob = evas_software_ddraw_outbuf_setup(w, h, info->info.rotation, - OUTBUF_DEPTH_INHERIT, info->info.window, - info->info.depth, info->info.fullscreen); if (!ob) goto on_error; diff --git a/src/modules/evas/engines/software_ddraw/evas_engine.h b/src/modules/evas/engines/software_ddraw/evas_engine.h index aac482f034..0d050bfb80 100644 --- a/src/modules/evas/engines/software_ddraw/evas_engine.h +++ b/src/modules/evas/engines/software_ddraw/evas_engine.h @@ -5,6 +5,7 @@ #define WIN32_LEAN_AND_MEAN #include #undef WIN32_LEAN_AND_MEAN + #include #include "../software_generic/Evas_Engine_Software_Generic.h" @@ -14,7 +15,6 @@ typedef struct _DD_Output_Buffer DD_Output_Buffer; struct _Outbuf { - Outbuf_Depth depth; int width; int height; int rot; @@ -28,7 +28,6 @@ struct _Outbuf LPDIRECTDRAWSURFACE surface_primary; LPDIRECTDRAWSURFACE surface_back; LPDIRECTDRAWCLIPPER clipper; - int depth; unsigned char fullscreen : 1; unsigned char swap : 1; unsigned char bit_swap : 1; @@ -67,7 +66,6 @@ struct _DD_Output_Buffer void *data; int width; int height; - int depth; int pitch; int psize; }; @@ -108,9 +106,7 @@ void evas_software_ddraw_outbuf_free(Outbuf *buf); Outbuf *evas_software_ddraw_outbuf_setup(int width, int height, int rotation, - Outbuf_Depth depth, HWND window, - int w_depth, int fullscreen); void evas_software_ddraw_outbuf_reconfigure(Outbuf *buf, @@ -144,14 +140,11 @@ int evas_software_ddraw_outbuf_width_get(Outbuf *buf); int evas_software_ddraw_outbuf_height_get(Outbuf *buf); -Outbuf_Depth evas_software_ddraw_outbuf_depth_get(Outbuf *buf); - int evas_software_ddraw_outbuf_rot_get(Outbuf *buf); /* evas_ddraw_buffer.c */ -DD_Output_Buffer *evas_software_ddraw_output_buffer_new(int depth, - int width, +DD_Output_Buffer *evas_software_ddraw_output_buffer_new(int width, int height, void *data); @@ -162,15 +155,12 @@ void evas_software_ddraw_output_buffer_paste(DD_Output_Buffer *ddob, int ddraw_width, int ddraw_height, int ddraw_pitch, - int ddraw_depth, int x, int y); DATA8 *evas_software_ddraw_output_buffer_data(DD_Output_Buffer *ddob, int *bytes_per_line_ret); -int evas_software_ddraw_output_buffer_depth(DD_Output_Buffer *ddob); - /* evas_ddraw_main.cpp */ #ifdef __cplusplus @@ -178,7 +168,6 @@ extern "C" { #endif int evas_software_ddraw_init (HWND window, - int depth, int fullscreen, Outbuf *buf); @@ -189,8 +178,7 @@ int evas_software_ddraw_masks_get(Outbuf *buf); void *evas_software_ddraw_lock(Outbuf *buf, int *ddraw_width, int *ddraw_height, - int *ddraw_pitch, - int *ddraw_depth); + int *ddraw_pitch); void evas_software_ddraw_unlock_and_flip(Outbuf *buf); diff --git a/src/modules/evas/engines/software_ddraw/evas_outbuf.c b/src/modules/evas/engines/software_ddraw/evas_outbuf.c index 55fd535333..0a4651337e 100644 --- a/src/modules/evas/engines/software_ddraw/evas_outbuf.c +++ b/src/modules/evas/engines/software_ddraw/evas_outbuf.c @@ -1,88 +1,6 @@ #include "evas_common_private.h" #include "evas_engine.h" - -static Eina_List *ddpool = NULL; -static int ddsize = 0; - -#define ddmemlimit 10 * 1024 * 1024 -#define ddcountlimit 32 - -static DD_Output_Buffer * -_find_ddob(int depth, int w, int h, void *data) -{ - Eina_List *l; - Eina_List *ddl; - DD_Output_Buffer *ddob = NULL; - DD_Output_Buffer *ddob2; - int sz; - int lbytes; - int bpp; - - bpp = depth / 8; - if (bpp == 3) bpp = 4; - lbytes = (((w * bpp) + 3) / 4) * 4; - sz = lbytes * h; - EINA_LIST_FOREACH(ddpool, l, ddob2) - { - if (ddob2->depth != depth) - continue; - if (ddob2->psize == sz) - { - ddob = ddob2; - ddl = l; - goto have_ddob; - } - } - if (!ddob) - return evas_software_ddraw_output_buffer_new(depth, w, h, data); - - have_ddob: - ddpool = eina_list_remove_list(ddpool, ddl); - ddob->width = w; - ddob->height = h; - ddob->pitch = lbytes; - ddsize -= ddob->psize * (ddob->depth / 8); - - return ddob; -} - -static void -_unfind_ddob(DD_Output_Buffer *ddob) -{ - ddpool = eina_list_prepend(ddpool, ddob); - ddsize += ddob->psize * ddob->depth / 8; - while ((ddsize > (ddmemlimit)) || - (eina_list_count(ddpool) > ddcountlimit)) - { - Eina_List *xl; - - xl = eina_list_last(ddpool); - if (!xl) - { - ddsize = 0; - break; - } - ddob = xl->data; - ddpool = eina_list_remove_list(ddpool, xl); - evas_software_ddraw_output_buffer_free(ddob); - } -} - -static void -_clear_ddob(int sync EINA_UNUSED) -{ - while (ddpool) - { - DD_Output_Buffer *ddob; - - ddob = ddpool->data; - ddpool = eina_list_remove_list(ddpool, ddpool); - evas_software_ddraw_output_buffer_free(ddob); - } - ddsize = 0; -} - void evas_software_ddraw_outbuf_init(void) { @@ -102,9 +20,7 @@ Outbuf * evas_software_ddraw_outbuf_setup(int width, int height, int rotation, - Outbuf_Depth depth, HWND window, - int w_depth, int fullscreen) { Outbuf *buf; @@ -115,10 +31,9 @@ evas_software_ddraw_outbuf_setup(int width, buf->width = width; buf->height = height; - buf->depth = depth; buf->rot = rotation; - if (!evas_software_ddraw_init(window, w_depth, fullscreen, buf)) + if (!evas_software_ddraw_init(window, fullscreen, buf)) { free(buf); return NULL; @@ -128,7 +43,7 @@ evas_software_ddraw_outbuf_setup(int width, Gfx_Func_Convert conv_func; DD_Output_Buffer *ddob; - ddob = evas_software_ddraw_output_buffer_new(w_depth, 1, 1, NULL); + ddob = evas_software_ddraw_output_buffer_new(1, 1, NULL); conv_func = NULL; if (ddob) @@ -139,7 +54,7 @@ evas_software_ddraw_outbuf_setup(int width, conv_func = evas_common_convert_func_get(0, width, height, - evas_software_ddraw_output_buffer_depth (ddob), + 32, buf->priv.mask.r, buf->priv.mask.g, buf->priv.mask.b, @@ -149,7 +64,7 @@ evas_software_ddraw_outbuf_setup(int width, conv_func = evas_common_convert_func_get(0, height, width, - evas_software_ddraw_output_buffer_depth (ddob), + 32, buf->priv.mask.r, buf->priv.mask.g, buf->priv.mask.b, @@ -163,11 +78,10 @@ evas_software_ddraw_outbuf_setup(int width, { ERR("DDraw engine Error" " {" - " At depth %i:" + " At depth 32:" " RGB format mask: %08x, %08x, %08x" " Not supported by and compiled in converters!" " }", - buf->priv.dd.depth, buf->priv.mask.r, buf->priv.mask.g, buf->priv.mask.b); @@ -183,10 +97,10 @@ evas_software_ddraw_outbuf_reconfigure(Outbuf *buf, int width, int height, int rotation, - Outbuf_Depth depth) + Outbuf_Depth depth EINA_UNUSED) { if ((width == buf->width) && (height == buf->height) && - (rotation == buf->rot) && (depth == buf->depth)) + (rotation == buf->rot)) return; buf->width = width; buf->height = height; @@ -225,13 +139,7 @@ evas_software_ddraw_outbuf_new_region_for_update(Outbuf *buf, (buf->priv.mask.g == 0x00ff00) && (buf->priv.mask.b == 0x0000ff)) { - obr->ddob = _find_ddob(buf->priv.dd.depth, w, h, NULL); -/* obr->ddob = evas_software_x11_x_output_buffer_new(buf->priv.dd.disp, */ -/* buf->priv.dd.vis, */ -/* buf->priv.dd.depth, */ -/* w, h, */ -/* use_shm, */ -/* NULL); */ + obr->ddob = evas_software_ddraw_output_buffer_new(w, h, NULL); im = (RGBA_Image *)evas_cache_image_data(evas_common_image_cache_get(), w, h, (DATA32 *) evas_software_ddraw_output_buffer_data(obr->ddob, &bpl), @@ -245,25 +153,9 @@ evas_software_ddraw_outbuf_new_region_for_update(Outbuf *buf, evas_cache_image_surface_alloc(&im->cache_entry, w, h); im->extended_info = obr; if ((buf->rot == 0) || (buf->rot == 180)) - obr->ddob = _find_ddob(buf->priv.dd.depth, w, h, NULL); -/* - obr->ddob = evas_software_x11_x_output_buffer_new(buf->priv.dd.disp, - buf->priv.dd.vis, - buf->priv.dd.depth, - w, h, - use_shm, - NULL); - */ + obr->ddob = evas_software_ddraw_output_buffer_new(w, h, NULL); else if ((buf->rot == 90) || (buf->rot == 270)) - obr->ddob = _find_ddob(buf->priv.dd.depth, h, w, NULL); -/* - obr->ddob = evas_software_x11_x_output_buffer_new(buf->priv.dd.disp, - buf->priv.dd.vis, - buf->priv.dd.depth, - h, w, - use_shm, - NULL); - */ + obr->ddob = evas_software_ddraw_output_buffer_new(h, w, NULL); } buf->priv.pending_writes = eina_list_append(buf->priv.pending_writes, im); @@ -289,7 +181,7 @@ evas_software_ddraw_outbuf_push_updated_region(Outbuf *buf, if ((buf->rot == 0) || (buf->rot == 180)) conv_func = evas_common_convert_func_get(0, w, h, - evas_software_ddraw_output_buffer_depth(obr->ddob), + 32, buf->priv.mask.r, buf->priv.mask.g, buf->priv.mask.b, @@ -297,7 +189,7 @@ evas_software_ddraw_outbuf_push_updated_region(Outbuf *buf, buf->rot); else if ((buf->rot == 90) || (buf->rot == 270)) conv_func = evas_common_convert_func_get(0, h, w, - evas_software_ddraw_output_buffer_depth(obr->ddob), + 32, buf->priv.mask.r, buf->priv.mask.g, buf->priv.mask.b, @@ -340,7 +232,7 @@ evas_software_ddraw_outbuf_push_updated_region(Outbuf *buf, if (data != src_data) conv_func(src_data, data, 0, - bpl / ((evas_software_ddraw_output_buffer_depth(obr->ddob) / 8)) - obr->width, + bpl / 4 - obr->width, obr->width, obr->height, x, @@ -358,7 +250,6 @@ evas_software_ddraw_outbuf_flush(Outbuf *buf, Tilebuf_Rect *surface_damage EINA_ int ddraw_width; int ddraw_height; int ddraw_pitch; - int ddraw_depth; if (render_mode == EVAS_RENDER_MODE_ASYNC_INIT) return; @@ -366,8 +257,7 @@ evas_software_ddraw_outbuf_flush(Outbuf *buf, Tilebuf_Rect *surface_damage EINA_ if (!(ddraw_data = evas_software_ddraw_lock(buf, &ddraw_width, &ddraw_height, - &ddraw_pitch, - &ddraw_depth))) + &ddraw_pitch))) goto free_images; /* copy safely the images that need to be drawn onto the back surface */ @@ -382,7 +272,6 @@ evas_software_ddraw_outbuf_flush(Outbuf *buf, Tilebuf_Rect *surface_damage EINA_ ddraw_width, ddraw_height, ddraw_pitch, - ddraw_depth, obr->x, obr->y); } @@ -399,10 +288,8 @@ evas_software_ddraw_outbuf_flush(Outbuf *buf, Tilebuf_Rect *surface_damage EINA_ buf->priv.prev_pending_writes); obr = im->extended_info; evas_cache_image_drop(&im->cache_entry); - if (obr->ddob) _unfind_ddob(obr->ddob); -/* - if (obr->ddob) evas_software_x11_x_output_buffer_free(obr->ddob); - */ + if (obr->ddob) + evas_software_ddraw_output_buffer_free(obr->ddob); free(obr); } buf->priv.prev_pending_writes = buf->priv.pending_writes; @@ -425,10 +312,10 @@ evas_software_ddraw_outbuf_idle_flush(Outbuf *buf) buf->priv.prev_pending_writes); obr = im->extended_info; evas_cache_image_drop((Image_Entry *)im); - if (obr->ddob) _unfind_ddob(obr->ddob); + if (obr->ddob) + evas_software_ddraw_output_buffer_free(obr->ddob); free(obr); } - _clear_ddob(0); } int @@ -443,12 +330,6 @@ evas_software_ddraw_outbuf_height_get(Outbuf *buf) return buf->height; } -Outbuf_Depth -evas_software_ddraw_outbuf_depth_get(Outbuf *buf) -{ - return buf->depth; -} - int evas_software_ddraw_outbuf_rot_get(Outbuf *buf) { diff --git a/src/modules/evas/engines/software_gdi/Evas_Engine_Software_Gdi.h b/src/modules/evas/engines/software_gdi/Evas_Engine_Software_Gdi.h index deac5b29e1..c565a5e009 100644 --- a/src/modules/evas/engines/software_gdi/Evas_Engine_Software_Gdi.h +++ b/src/modules/evas/engines/software_gdi/Evas_Engine_Software_Gdi.h @@ -17,7 +17,6 @@ struct _Evas_Engine_Info_Software_Gdi struct { HWND window; - int depth; int rotation; unsigned int borderless : 1; unsigned int fullscreen : 1; diff --git a/src/modules/evas/engines/software_gdi/evas_engine.c b/src/modules/evas/engines/software_gdi/evas_engine.c index 465607853e..de3b567021 100644 --- a/src/modules/evas/engines/software_gdi/evas_engine.c +++ b/src/modules/evas/engines/software_gdi/evas_engine.c @@ -16,6 +16,14 @@ struct _Render_Engine }; /* engine api this module provides */ +static void +eng_output_info_setup(void *info) +{ + Evas_Engine_Info_Software_Gdi *einfo = info; + + einfo->render_mode = EVAS_RENDER_MODE_BLOCKING; +} + static void * eng_output_setup(void *engine, void *in, unsigned int w, unsigned int h) { @@ -35,9 +43,7 @@ eng_output_setup(void *engine, void *in, unsigned int w, unsigned int h) ob = evas_software_gdi_outbuf_setup(w, h, info->info.rotation, - OUTBUF_DEPTH_INHERIT, info->info.window, - info->info.depth, info->info.borderless, info->info.fullscreen, info->info.region, @@ -81,9 +87,7 @@ eng_output_update(void *engine EINA_UNUSED, void *data, void *in, unsigned int w ob = evas_software_gdi_outbuf_setup(w, h, info->info.rotation, - OUTBUF_DEPTH_INHERIT, info->info.window, - info->info.depth, info->info.borderless, info->info.fullscreen, info->info.region, @@ -134,6 +138,7 @@ module_open(Evas_Module *em) func = pfunc; /* now to override methods */ #define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_) + ORD(output_info_setup); ORD(output_setup); ORD(output_update); ORD(canvas_alpha_get); diff --git a/src/modules/evas/engines/software_gdi/evas_engine.h b/src/modules/evas/engines/software_gdi/evas_engine.h index 88d1cac214..329ec33399 100644 --- a/src/modules/evas/engines/software_gdi/evas_engine.h +++ b/src/modules/evas/engines/software_gdi/evas_engine.h @@ -47,7 +47,6 @@ struct BITMAPINFO_GDI struct _Outbuf { - Outbuf_Depth depth; int width; int height; int rot; @@ -60,7 +59,6 @@ struct _Outbuf HWND window; HDC dc; HRGN regions; - int depth; unsigned char borderless : 1; unsigned char fullscreen : 1; unsigned char region : 1; @@ -101,7 +99,6 @@ struct _Gdi_Output_Buffer int width; int height; void *data; - int depth; int pitch; int psize; }; @@ -109,7 +106,6 @@ struct _Gdi_Output_Buffer /* evas_gdi_main.c */ int evas_software_gdi_init (HWND window, - int depth, unsigned int borderless, unsigned int fullscreen, unsigned int region, @@ -123,7 +119,6 @@ void evas_software_gdi_bitmap_resize(Outbuf *buf); Gdi_Output_Buffer *evas_software_gdi_output_buffer_new(HDC dc, BITMAPINFO_GDI *bitmap_info, - int depth, int width, int height, void *data); @@ -137,8 +132,6 @@ void evas_software_gdi_output_buffer_paste(Gdi_Output_Buffer *gdiob, DATA8 *evas_software_gdi_output_buffer_data(Gdi_Output_Buffer *gdiob, int *pitch); -int evas_software_gdi_output_buffer_depth(Gdi_Output_Buffer *gdiob); - /* evas_outbuf.c */ void evas_software_gdi_outbuf_init(void); @@ -148,9 +141,7 @@ void evas_software_gdi_outbuf_free(Outbuf *buf); Outbuf *evas_software_gdi_outbuf_setup(int width, int height, int rotation, - Outbuf_Depth depth, HWND window, - int w_depth, unsigned int borderless, unsigned int fullscreen, unsigned int region, @@ -188,8 +179,6 @@ int evas_software_gdi_outbuf_width_get(Outbuf *buf); int evas_software_gdi_outbuf_height_get(Outbuf *buf); -Outbuf_Depth evas_software_gdi_outbuf_depth_get(Outbuf *buf); - int evas_software_gdi_outbuf_rot_get(Outbuf *buf); diff --git a/src/modules/evas/engines/software_gdi/evas_gdi_buffer.c b/src/modules/evas/engines/software_gdi/evas_gdi_buffer.c index ab233ddec8..8d9c1ac425 100644 --- a/src/modules/evas/engines/software_gdi/evas_gdi_buffer.c +++ b/src/modules/evas/engines/software_gdi/evas_gdi_buffer.c @@ -6,7 +6,6 @@ Gdi_Output_Buffer * evas_software_gdi_output_buffer_new(HDC dc, BITMAPINFO_GDI *bitmap_info, - int depth, int width, int height, void *data) @@ -20,7 +19,7 @@ evas_software_gdi_output_buffer_new(HDC dc, { bitmap_info->bih.biWidth = width; bitmap_info->bih.biHeight = -height; - bitmap_info->bih.biSizeImage = (depth >> 3) * width * height; + bitmap_info->bih.biSizeImage = 4 * width * height; gdiob->bitmap = CreateDIBSection(dc, (const BITMAPINFO *)bitmap_info, DIB_RGB_COLORS, @@ -39,9 +38,7 @@ evas_software_gdi_output_buffer_new(HDC dc, gdiob->data = data; gdiob->width = width; gdiob->height = height; - gdiob->depth = depth; - gdiob->pitch = width * (depth >> 3); -/* gdiob->psize = gdiob->pitch * height; */ + gdiob->pitch = width * 4; return gdiob; } @@ -83,9 +80,3 @@ evas_software_gdi_output_buffer_data(Gdi_Output_Buffer *gdiob, if (pitch) *pitch = gdiob->pitch; return gdiob->data; } - -int -evas_software_gdi_output_buffer_depth(Gdi_Output_Buffer *gdiob) -{ - return gdiob->depth; -} diff --git a/src/modules/evas/engines/software_gdi/evas_gdi_main.c b/src/modules/evas/engines/software_gdi/evas_gdi_main.c index 2ffc0c1270..98f1a79ab2 100644 --- a/src/modules/evas/engines/software_gdi/evas_gdi_main.c +++ b/src/modules/evas/engines/software_gdi/evas_gdi_main.c @@ -4,7 +4,6 @@ int evas_software_gdi_init (HWND window, - int depth, unsigned int borderless, unsigned int fullscreen EINA_UNUSED, unsigned int region, @@ -26,14 +25,12 @@ evas_software_gdi_init (HWND window, return 0; } - /* FIXME: check depth */ - if (depth != GetDeviceCaps(buf->priv.gdi.dc, BITSPIXEL)) + if (GetDeviceCaps(buf->priv.gdi.dc, BITSPIXEL) != 32) { ERR("[Engine] [GDI] no compatible depth"); ReleaseDC(window, buf->priv.gdi.dc); return 0; } - buf->priv.gdi.depth = depth; /* FIXME: support fullscreen */ @@ -49,32 +46,16 @@ evas_software_gdi_init (HWND window, buf->priv.gdi.bitmap_info->bih.biWidth = buf->width; buf->priv.gdi.bitmap_info->bih.biHeight = -buf->height; buf->priv.gdi.bitmap_info->bih.biPlanes = 1; - buf->priv.gdi.bitmap_info->bih.biSizeImage = (buf->priv.gdi.depth >> 3) * buf->width * buf->height; + buf->priv.gdi.bitmap_info->bih.biSizeImage = 4 * buf->width * buf->height; buf->priv.gdi.bitmap_info->bih.biXPelsPerMeter = 0; buf->priv.gdi.bitmap_info->bih.biYPelsPerMeter = 0; buf->priv.gdi.bitmap_info->bih.biClrUsed = 0; buf->priv.gdi.bitmap_info->bih.biClrImportant = 0; - buf->priv.gdi.bitmap_info->bih.biBitCount = buf->priv.gdi.depth; + buf->priv.gdi.bitmap_info->bih.biBitCount = 32; buf->priv.gdi.bitmap_info->bih.biCompression = BI_BITFIELDS; - - switch (depth) - { - case 16: - buf->priv.gdi.bitmap_info->masks[0] = 0x0000f800; - buf->priv.gdi.bitmap_info->masks[1] = 0x000007e0; - buf->priv.gdi.bitmap_info->masks[2] = 0x0000001f; - break; - case 32: - buf->priv.gdi.bitmap_info->masks[0] = 0x00ff0000; - buf->priv.gdi.bitmap_info->masks[1] = 0x0000ff00; - buf->priv.gdi.bitmap_info->masks[2] = 0x000000ff; - break; - default: - ERR("[Engine] [GDI] wrong depth"); - free(buf->priv.gdi.bitmap_info); - ReleaseDC(window, buf->priv.gdi.dc); - return 0; - } + buf->priv.gdi.bitmap_info->masks[0] = 0x00ff0000; + buf->priv.gdi.bitmap_info->masks[1] = 0x0000ff00; + buf->priv.gdi.bitmap_info->masks[2] = 0x000000ff; return 1; } @@ -96,5 +77,5 @@ evas_software_gdi_bitmap_resize(Outbuf *buf) { buf->priv.gdi.bitmap_info->bih.biWidth = buf->width; buf->priv.gdi.bitmap_info->bih.biHeight = -buf->height; - buf->priv.gdi.bitmap_info->bih.biSizeImage = (buf->priv.gdi.depth >> 3) * buf->width * buf->height; + buf->priv.gdi.bitmap_info->bih.biSizeImage = 4 * buf->width * buf->height; } diff --git a/src/modules/evas/engines/software_gdi/evas_outbuf.c b/src/modules/evas/engines/software_gdi/evas_outbuf.c index 68a1a3e463..e23cabe873 100644 --- a/src/modules/evas/engines/software_gdi/evas_outbuf.c +++ b/src/modules/evas/engines/software_gdi/evas_outbuf.c @@ -1,89 +1,6 @@ #include "evas_common_private.h" #include "evas_engine.h" - -static Eina_List *gdipool = NULL; -static int gdisize = 0; -static int gdimemlimit = 10 * 1024 * 1024; -static int gdicountlimit = 32; - -static Gdi_Output_Buffer * -_find_gdiob(HDC dc, BITMAPINFO_GDI *bitmap_info, int depth, int w, int h, void *data) -{ - Eina_List *l = NULL; - Eina_List *gdil = NULL; - Gdi_Output_Buffer *gdiob = NULL; - Gdi_Output_Buffer *gdiob2; - int sz; - int lbytes; - int bpp; - - bpp = depth >> 3; - if (bpp == 3) bpp = 4; - lbytes = (((w * bpp) + 3) / 4) * 4; - sz = lbytes * h; - EINA_LIST_FOREACH(gdipool, l, gdiob2) - { - if ((gdiob2->dc != dc) || - (gdiob2->bitmap_info != bitmap_info) || - (gdiob2->depth != depth)) - continue; - if (gdiob2->psize == sz) - { - gdiob = gdiob2; - gdil = l; - goto have_gdiob; - } - } - if (!gdiob) - return evas_software_gdi_output_buffer_new(dc, bitmap_info, depth, w, h, data); - - have_gdiob: - gdipool = eina_list_remove_list(gdipool, gdil); - gdiob->width = w; - gdiob->height = h; - gdiob->pitch = lbytes; - gdisize -= gdiob->psize * (gdiob->depth >> 3); - - return gdiob; -} - -static void -_unfind_gdiob(Gdi_Output_Buffer *gdiob) -{ - gdipool = eina_list_prepend(gdipool, gdiob); - gdisize += gdiob->psize * (gdiob->depth >> 3); - while ((gdisize > (gdimemlimit)) || - ((int)eina_list_count(gdipool) > gdicountlimit)) - { - Eina_List *xl; - - xl = eina_list_last(gdipool); - if (!xl) - { - gdisize = 0; - break; - } - gdiob = xl->data; - gdipool = eina_list_remove_list(gdipool, xl); - evas_software_gdi_output_buffer_free(gdiob); - } -} - -static void -_clear_gdiob() -{ - while (gdipool) - { - Gdi_Output_Buffer *gdiob; - - gdiob = gdipool->data; - gdipool = eina_list_remove_list(gdipool, gdipool); - evas_software_gdi_output_buffer_free(gdiob); - } - gdisize = 0; -} - void evas_software_gdi_outbuf_init(void) { @@ -104,7 +21,8 @@ evas_software_gdi_outbuf_free(Outbuf *buf) buf->priv.pending_writes = eina_list_remove_list(buf->priv.pending_writes, buf->priv.pending_writes); obr = im->extended_info; evas_cache_image_drop(&im->cache_entry); - if (obr->gdiob) _unfind_gdiob(obr->gdiob); + if (obr->gdiob) + evas_software_gdi_output_buffer_free(obr->gdiob); /* if (obr->mxob) _unfind_xob(obr->mxob, 0); */ free(obr); } @@ -119,9 +37,7 @@ Outbuf * evas_software_gdi_outbuf_setup(int width, int height, int rotation, - Outbuf_Depth depth, HWND window, - int w_depth, unsigned int borderless, unsigned int fullscreen, unsigned int region, @@ -136,13 +52,12 @@ evas_software_gdi_outbuf_setup(int width, buf->width = width; buf->height = height; - buf->depth = depth; buf->rot = rotation; buf->priv.mask_dither = mask_dither; buf->priv.destination_alpha = destination_alpha; - if (!evas_software_gdi_init(window, w_depth, borderless, fullscreen, region, buf)) + if (!evas_software_gdi_init(window, borderless, fullscreen, region, buf)) { free(buf); return NULL; @@ -152,7 +67,7 @@ evas_software_gdi_outbuf_setup(int width, Gfx_Func_Convert conv_func; Gdi_Output_Buffer *gdiob; - gdiob = evas_software_gdi_output_buffer_new(buf->priv.gdi.dc, buf->priv.gdi.bitmap_info, w_depth, 1, 1, NULL); + gdiob = evas_software_gdi_output_buffer_new(buf->priv.gdi.dc, buf->priv.gdi.bitmap_info, 1, 1, NULL); conv_func = NULL; if (gdiob) @@ -161,7 +76,7 @@ evas_software_gdi_outbuf_setup(int width, conv_func = evas_common_convert_func_get(0, width, height, - evas_software_gdi_output_buffer_depth (gdiob), + 32, buf->priv.gdi.bitmap_info->masks[0], buf->priv.gdi.bitmap_info->masks[1], buf->priv.gdi.bitmap_info->masks[2], @@ -171,7 +86,7 @@ evas_software_gdi_outbuf_setup(int width, conv_func = evas_common_convert_func_get(0, height, width, - evas_software_gdi_output_buffer_depth (gdiob), + 32, buf->priv.gdi.bitmap_info->masks[0], buf->priv.gdi.bitmap_info->masks[1], buf->priv.gdi.bitmap_info->masks[2], @@ -184,11 +99,10 @@ evas_software_gdi_outbuf_setup(int width, { ERR(".[ soft_gdi engine Error ]." " {" - " At depth %i:" + " At depth 32:" " RGB format mask: %08lx, %08lx, %08lx" " Not supported by and compiled in converters!" " }", - buf->priv.gdi.depth, buf->priv.gdi.bitmap_info->masks[0], buf->priv.gdi.bitmap_info->masks[1], buf->priv.gdi.bitmap_info->masks[2]); @@ -204,10 +118,10 @@ evas_software_gdi_outbuf_reconfigure(Outbuf *buf, int width, int height, int rotation, - Outbuf_Depth depth) + Outbuf_Depth depth EINA_UNUSED) { if ((width == buf->width) && (height == buf->height) && - (rotation == buf->rot) && (depth == buf->depth)) + (rotation == buf->rot)) return; buf->width = width; buf->height = height; @@ -249,15 +163,9 @@ evas_software_gdi_outbuf_new_region_for_update(Outbuf *buf, (buf->priv.gdi.bitmap_info->masks[1] == 0x00ff00) && (buf->priv.gdi.bitmap_info->masks[2] == 0x0000ff)) { - obr->gdiob = _find_gdiob(buf->priv.gdi.dc, - buf->priv.gdi.bitmap_info, - buf->priv.gdi.depth, - w, h, NULL); -/* obr->gdiob = evas_software_gdi_output_buffer_new(buf->priv.gdi.dc, */ -/* buf->priv.gdi.bitmap_info, */ -/* buf->priv.gdi.depth, */ -/* w, h, */ -/* NULL); */ + obr->gdiob = evas_software_gdi_output_buffer_new(buf->priv.gdi.dc, + buf->priv.gdi.bitmap_info, + w, h, NULL); im = (RGBA_Image *)evas_cache_image_data(evas_common_image_cache_get(), w, h, (DATA32 *)evas_software_gdi_output_buffer_data(obr->gdiob, &bpl), @@ -276,31 +184,13 @@ evas_software_gdi_outbuf_new_region_for_update(Outbuf *buf, evas_cache_image_surface_alloc(&im->cache_entry, w, h); im->extended_info = obr; if ((buf->rot == 0) || (buf->rot == 180)) - obr->gdiob = _find_gdiob(buf->priv.gdi.dc, - buf->priv.gdi.bitmap_info, - buf->priv.gdi.depth, - w, h, NULL); -/* - obr->gdiob = evas_software_x11_x_output_buffer_new(buf->priv.dd.disp, - buf->priv.dd.vis, - buf->priv.dd.depth, - w, h, - use_shm, - NULL); - */ + obr->gdiob = evas_software_gdi_output_buffer_new(buf->priv.gdi.dc, + buf->priv.gdi.bitmap_info, + w, h, NULL); else if ((buf->rot == 90) || (buf->rot == 270)) - obr->gdiob = _find_gdiob(buf->priv.gdi.dc, - buf->priv.gdi.bitmap_info, - buf->priv.gdi.depth, - h, w, NULL); -/* - obr->gdiob = evas_software_x11_x_output_buffer_new(buf->priv.dd.disp, - buf->priv.dd.vis, - buf->priv.dd.depth, - h, w, - use_shm, - NULL); - */ + obr->gdiob = evas_software_gdi_output_buffer_new(buf->priv.gdi.dc, + buf->priv.gdi.bitmap_info, + h, w, NULL); /* if (buf->priv.gdi.mask) */ /* obr->mgdiob = _find_gdiob(buf->priv.gdi.dc, */ /* buf->priv.gdi.bitmap_info, */ @@ -336,16 +226,14 @@ evas_software_gdi_outbuf_push_updated_region(Outbuf *buf, obr = update->extended_info; if ((buf->rot == 0) || (buf->rot == 180)) - conv_func = evas_common_convert_func_get(0, w, h, - evas_software_gdi_output_buffer_depth(obr->gdiob), + conv_func = evas_common_convert_func_get(0, w, h, 32, buf->priv.gdi.bitmap_info->masks[0], buf->priv.gdi.bitmap_info->masks[1], buf->priv.gdi.bitmap_info->masks[2], PAL_MODE_NONE, buf->rot); else if ((buf->rot == 90) || (buf->rot == 270)) - conv_func = evas_common_convert_func_get(0, h, w, - evas_software_gdi_output_buffer_depth(obr->gdiob), + conv_func = evas_common_convert_func_get(0, h, w, 32, buf->priv.gdi.bitmap_info->masks[0], buf->priv.gdi.bitmap_info->masks[1], buf->priv.gdi.bitmap_info->masks[2], @@ -389,7 +277,7 @@ evas_software_gdi_outbuf_push_updated_region(Outbuf *buf, if (data != src_data) conv_func(src_data, data, 0, - bpl / (evas_software_gdi_output_buffer_depth(obr->gdiob) >> 3) - obr->width, + bpl / 4 - obr->width, obr->width, obr->height, x, @@ -580,9 +468,9 @@ evas_software_gdi_outbuf_flush(Outbuf *buf, Tilebuf_Rect *surface_damage EINA_UN buf->priv.prev_pending_writes); obr = im->extended_info; evas_cache_image_drop(&im->cache_entry); - if (obr->gdiob) _unfind_gdiob(obr->gdiob); + if (obr->gdiob) + evas_software_gdi_output_buffer_free(obr->gdiob); /* if (obr->mgdiob) _unfind_gdiob(obr->mgdiob); */ -/* if (obr->gdiob) evas_software_x11_x_output_buffer_free(obr->gdiob); */ free(obr); } buf->priv.prev_pending_writes = buf->priv.pending_writes; @@ -605,11 +493,11 @@ evas_software_gdi_outbuf_idle_flush(Outbuf *buf) buf->priv.prev_pending_writes); obr = im->extended_info; evas_cache_image_drop((Image_Entry *)im); - if (obr->gdiob) _unfind_gdiob(obr->gdiob); + if (obr->gdiob) + evas_software_gdi_output_buffer_free(obr->gdiob); /* if (obr->mxob) _unfind_xob(obr->mxob, 0); */ free(obr); } - _clear_gdiob(); } int @@ -624,12 +512,6 @@ evas_software_gdi_outbuf_height_get(Outbuf *buf) return buf->height; } -Outbuf_Depth -evas_software_gdi_outbuf_depth_get(Outbuf *buf) -{ - return buf->depth; -} - int evas_software_gdi_outbuf_rot_get(Outbuf *buf) {