From 383586bd43d60bf00a33991f98249d14b236de1f Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Thu, 27 Sep 2012 07:16:46 +0000 Subject: [PATCH] offer advanced options to set assumed swap mode. :) SVN revision: 77132 --- src/modules/comp/e_mod_comp.c | 7 ++++++ src/modules/comp/e_mod_comp_cfdata.c | 2 ++ src/modules/comp/e_mod_comp_cfdata.h | 1 + src/modules/comp/e_mod_config.c | 35 ++++++++++++++++++++++++---- 4 files changed, 40 insertions(+), 5 deletions(-) diff --git a/src/modules/comp/e_mod_comp.c b/src/modules/comp/e_mod_comp.c index d1a957bd3..45bd9c829 100644 --- a/src/modules/comp/e_mod_comp.c +++ b/src/modules/comp/e_mod_comp.c @@ -3688,6 +3688,13 @@ _e_mod_comp_add(E_Manager *man) opt[opt_i] = 1; opt_i++; } + if (_comp_mod->conf->swap_mode) + { + opt[opt_i] = ECORE_EVAS_GL_X11_OPT_SWAP_MODE; + opt_i++; + opt[opt_i] = _comp_mod->conf->swap_mode; + opt_i++; + } if (opt_i > 0) { opt[opt_i] = ECORE_EVAS_GL_X11_OPT_NONE; diff --git a/src/modules/comp/e_mod_comp_cfdata.c b/src/modules/comp/e_mod_comp_cfdata.c index 8a4d25185..cea350fc7 100644 --- a/src/modules/comp/e_mod_comp_cfdata.c +++ b/src/modules/comp/e_mod_comp_cfdata.c @@ -45,6 +45,7 @@ e_mod_comp_cfdata_edd_init(E_Config_DD **conf_edd, E_Config_DD **match_edd) E_CONFIG_VAL(D, T, loose_sync, UCHAR); E_CONFIG_VAL(D, T, grab, UCHAR); E_CONFIG_VAL(D, T, vsync, UCHAR); + E_CONFIG_VAL(D, T, swap_mode, UCHAR); E_CONFIG_VAL(D, T, keep_unmapped, UCHAR); E_CONFIG_VAL(D, T, send_flush, UCHAR); E_CONFIG_VAL(D, T, send_dump, UCHAR); @@ -79,6 +80,7 @@ e_mod_comp_cfdata_config_new(void) cfg->loose_sync = 1; cfg->grab = 1; cfg->vsync = 1; + cfg->swap_mode = ECORE_EVAS_GL_X11_SWAP_MODE_AUTO; cfg->keep_unmapped = 1; cfg->send_flush = 1; // implement cfg->send_dump = 1; // implement diff --git a/src/modules/comp/e_mod_comp_cfdata.h b/src/modules/comp/e_mod_comp_cfdata.h index 33cb9ff13..34a49276e 100644 --- a/src/modules/comp/e_mod_comp_cfdata.h +++ b/src/modules/comp/e_mod_comp_cfdata.h @@ -21,6 +21,7 @@ struct _Config unsigned char efl_sync; unsigned char grab; unsigned char vsync; + unsigned char swap_mode; unsigned char keep_unmapped; unsigned char send_flush; unsigned char send_dump; diff --git a/src/modules/comp/e_mod_config.c b/src/modules/comp/e_mod_config.c index 23bc1b2c9..36dc9bbcc 100644 --- a/src/modules/comp/e_mod_config.c +++ b/src/modules/comp/e_mod_config.c @@ -33,6 +33,7 @@ struct _E_Config_Dialog_Data int loose_sync; int grab; int vsync; + int swap_mode; const char *shadow_style; @@ -142,6 +143,7 @@ _create_data(E_Config_Dialog *cfd) cfdata->loose_sync = _comp_mod->conf->loose_sync; cfdata->grab = _comp_mod->conf->grab; cfdata->vsync = _comp_mod->conf->vsync; + cfdata->swap_mode = _comp_mod->conf->swap_mode; if (_comp_mod->conf->shadow_style) cfdata->shadow_style = eina_stringshare_add(_comp_mod->conf->shadow_style); @@ -1171,8 +1173,6 @@ _advanced_create_widgets(E_Config_Dialog *cfd, /////////////////////////////////////////// ol = e_widget_list_add(evas, 0, 0); - ob = e_widget_check_add(evas, _("Tear-free updates (VSynced)"), &(cfdata->vsync)); - e_widget_list_object_append(ol, ob, 1, 1, 0.5); ob = e_widget_check_add(evas, _("Sync windows"), &(cfdata->efl_sync)); e_widget_list_object_append(ol, ob, 1, 1, 0.5); ob = e_widget_check_add(evas, _("Loose sync"), &(cfdata->loose_sync)); @@ -1199,10 +1199,33 @@ _advanced_create_widgets(E_Config_Dialog *cfd, of = e_widget_framelist_add(evas, _("OpenGL options"), 0); e_widget_framelist_content_align_set(of, 0.5, 0.0); + ob = e_widget_check_add(evas, _("Tear-free updates (VSynced)"), &(cfdata->vsync)); + e_widget_framelist_object_append(of, ob); ob = e_widget_check_add(evas, _("Texture from pixmap"), &(cfdata->texture_from_pixmap)); e_widget_framelist_object_append(of, ob); - ob = e_widget_check_add(evas, _("Indirect OpenGL (EXPERIMENTAL)"), &(cfdata->indirect)); - e_widget_framelist_object_append(of, ob); +#ifdef ECORE_EVAS_GL_X11_OPT_SWAP_MODE + if ((evas_version->major >= 1) && + (evas_version->minor >= 7) && + (evas_version->micro >= 99)) + { + ob = e_widget_label_add(evas, _("Assume swapping method:")); + e_widget_framelist_object_append(of, ob); + rg = e_widget_radio_group_new(&(cfdata->swap_mode)); + ob = e_widget_radio_add(evas, _("Auto"), ECORE_EVAS_GL_X11_SWAP_MODE_AUTO, rg); + e_widget_framelist_object_append(of, ob); + ob = e_widget_radio_add(evas, _("Invalidate (full redraw)"), ECORE_EVAS_GL_X11_SWAP_MODE_FULL, rg); + e_widget_framelist_object_append(of, ob); + ob = e_widget_radio_add(evas, _("Copy from back to front"), ECORE_EVAS_GL_X11_SWAP_MODE_COPY, rg); + e_widget_framelist_object_append(of, ob); + ob = e_widget_radio_add(evas, _("Double buffered swaps"), ECORE_EVAS_GL_X11_SWAP_MODE_DOUBLE, rg); + e_widget_framelist_object_append(of, ob); + ob = e_widget_radio_add(evas, _("Triple buffered swaps"), ECORE_EVAS_GL_X11_SWAP_MODE_TRIPLE, rg); + e_widget_framelist_object_append(of, ob); + } +#endif +// lets not offer this anymore +// ob = e_widget_check_add(evas, _("Indirect OpenGL (EXPERIMENTAL)"), &(cfdata->indirect)); +// e_widget_framelist_object_append(of, ob); e_widget_list_object_append(ol, of, 1, 1, 0.5); } } @@ -1444,7 +1467,8 @@ _advanced_apply_data(E_Config_Dialog *cfd __UNUSED__, (cfdata->texture_from_pixmap != _comp_mod->conf->texture_from_pixmap) || (cfdata->efl_sync != _comp_mod->conf->efl_sync) || (cfdata->loose_sync != _comp_mod->conf->loose_sync) || - (cfdata->vsync != _comp_mod->conf->vsync)) + (cfdata->vsync != _comp_mod->conf->vsync) || + (cfdata->swap_mode != _comp_mod->conf->swap_mode)) { E_Action *a; @@ -1454,6 +1478,7 @@ _advanced_apply_data(E_Config_Dialog *cfd __UNUSED__, _comp_mod->conf->efl_sync = cfdata->efl_sync; _comp_mod->conf->loose_sync = cfdata->loose_sync; _comp_mod->conf->vsync = cfdata->vsync; + _comp_mod->conf->swap_mode = cfdata->swap_mode; a = e_action_find("restart"); if ((a) && (a->func.go)) a->func.go(NULL, NULL);