diff options
-rw-r--r-- | twin/compton-tde/common.h | 7 | ||||
-rw-r--r-- | twin/compton-tde/compton.c | 114 |
2 files changed, 99 insertions, 22 deletions
diff --git a/twin/compton-tde/common.h b/twin/compton-tde/common.h index 9ff5a2148..bcc2ad68b 100644 --- a/twin/compton-tde/common.h +++ b/twin/compton-tde/common.h @@ -142,8 +142,9 @@ #include <dbus/dbus.h> #endif -// libGL #ifdef CONFIG_VSYNC_OPENGL + +// libGL #if defined(CONFIG_VSYNC_OPENGL_GLSL) || defined(CONFIG_VSYNC_OPENGL_FBO) #define GL_GLEXT_PROTOTYPES #endif @@ -160,6 +161,8 @@ #define GLX_BACK_BUFFER_AGE_EXT 0x20F4 #endif +#endif + // === Macros === #define MSTR_(s) #s @@ -2602,8 +2605,6 @@ c2_matchd(session_t *ps, win *w, const c2_lptr_t *condlst, ///@} -#endif - /** * @brief Dump the given data to a file. */ diff --git a/twin/compton-tde/compton.c b/twin/compton-tde/compton.c index d8f6223f6..30537b786 100644 --- a/twin/compton-tde/compton.c +++ b/twin/compton-tde/compton.c @@ -3009,32 +3009,32 @@ calc_dim(session_t *ps, win *w) { */ static void win_determine_fade(session_t *ps, win *w) { + // To prevent it from being overwritten by last-paint value if the window is + // unmapped on next frame, write w->fade_last as well if (UNSET != w->fade_force) { #ifdef DEBUG_FADE printf_dbgf("(%#010lx): fade forced\n", w->id); #endif - w->fade = w->fade_force; + w->fade_last = w->fade = w->fade_force; } else if (ps->o.no_fading_openclose && (w->in_openclose || w->destroyed)) { #ifdef DEBUG_FADE printf_dbgf("(): no_fading_openclose and in_openclose\n"); #endif - w->fade = false; + w->fade_last = w->fade = false; } else if (ps->o.no_fading_opacitychange && (!w->in_openclose)) { #ifdef DEBUG_FADE printf_dbgf("(): no_fading_opacitychange and !in_openclose\n"); #endif - w->fade = false; + w->fade_last = w->fade = false; } else if (ps->o.no_fading_destroyed_argb && w->destroyed && WMODE_ARGB == w->mode && w->client_win && w->client_win != w->id) { #ifdef DEBUG_FADE printf_dbgf("(): no_fading_destroyed_argb\n"); #endif - w->fade = false; - // Prevent it from being overwritten by last-paint value - w->fade_last = false; + w->fade_last = w->fade = false; } // Ignore other possible causes of fading state changes after window // gets unmapped @@ -4595,8 +4595,8 @@ ev_name(session_t *ps, XEvent *ev) { if (ps->xsync_exists) { int o = ev->type - ps->xsync_event; switch (o) { - CASESTRRET(CounterNotify); - CASESTRRET(AlarmNotify); + CASESTRRET(XSyncCounterNotify); + CASESTRRET(XSyncAlarmNotify); } } #endif @@ -5153,88 +5153,126 @@ usage(int ret) { "\n" "-d display\n" " Which display should be managed.\n" + "\n" "-r radius\n" " The blur radius for shadows. (default 12)\n" + "\n" "-o opacity\n" " The translucency for shadows. (default .75)\n" + "\n" "-l left-offset\n" " The left offset for shadows. (default -15)\n" + "\n" "-t top-offset\n" " The top offset for shadows. (default -15)\n" + "\n" "-I fade-in-step\n" " Opacity change between steps while fading in. (default 0.028)\n" + "\n" "-O fade-out-step\n" " Opacity change between steps while fading out. (default 0.03)\n" + "\n" "-D fade-delta-time\n" " The time between steps in a fade in milliseconds. (default 10)\n" + "\n" "-m opacity\n" " The opacity for menus. (default 1.0)\n" + "\n" "-c\n" " Enabled client-side shadows on windows.\n" + "\n" "-C\n" " Avoid drawing shadows on dock/panel windows.\n" + "\n" "-z\n" - " Zero the part of the shadow's mask behind the window (experimental).\n" + " Zero the part of the shadow's mask behind the window.\n" + "\n" "-f\n" " Fade windows in/out when opening/closing and when opacity\n" " changes, unless --no-fading-openclose is used.\n" + "\n" "-F\n" - " Equals -f. Deprecated.\n" + " Equals to -f. Deprecated.\n" + "\n" "-i opacity\n" " Opacity of inactive windows. (0.1 - 1.0)\n" + "\n" "-e opacity\n" " Opacity of window titlebars and borders. (0.1 - 1.0)\n" + "\n" "-G\n" " Don't draw shadows on DND windows\n" + "\n" "-b\n" " Daemonize process.\n" + "\n" "-S\n" " Enable synchronous operation (for debugging).\n" + "\n" "--show-all-xerrors\n" " Show all X errors (for debugging).\n" + "\n" "-v\n" - " Print version Number and exit\\n" + " Print version Number and exit\n" "--config path\n" - " Look for configuration file at the path.\n" + " Look for configuration file at the path. Use /dev/null to avoid\n" + " loading configuration file.\n" + "\n" "--write-pid-path path\n" " Write process ID to a file.\n" + "\n" "--shadow-red value\n" " Red color value of shadow (0.0 - 1.0, defaults to 0).\n" + "\n" "--shadow-green value\n" " Green color value of shadow (0.0 - 1.0, defaults to 0).\n" + "\n" "--shadow-blue value\n" " Blue color value of shadow (0.0 - 1.0, defaults to 0).\n" + "\n" "--inactive-opacity-override\n" " Inactive opacity set by -i overrides value of _NET_WM_OPACITY.\n" + "\n" "--inactive-dim value\n" " Dim inactive windows. (0.0 - 1.0, defaults to 0)\n" + "\n" "--active-opacity opacity\n" " Default opacity for active windows. (0.0 - 1.0)\n" + "\n" "--mark-wmwin-focused\n" " Try to detect WM windows and mark them as active.\n" + "\n" "--shadow-exclude condition\n" " Exclude conditions for shadows.\n" + "\n" "--fade-exclude condition\n" " Exclude conditions for fading.\n" + "\n" "--mark-ovredir-focused\n" " Mark windows that have no WM frame as active.\n" + "\n" "--no-fading-openclose\n" " Do not fade on window open/close.\n" + "\n" "--no-fading-destroyed-argb\n" " Do not fade destroyed ARGB windows with WM frame. Workaround of bugs\n" " in Openbox, Fluxbox, etc.\n" + "\n" "--no-fading-opacitychange\n" " Do not fade on window opacity change.\n" + "\n" "--shadow-ignore-shaped\n" " Do not paint shadows on shaped windows. (Deprecated, use\n" " --shadow-exclude \'bounding_shaped\' or\n" " --shadow-exclude \'bounding_shaped && !rounded_corners\' instead.)\n" + "\n" "--detect-rounded-corners\n" " Try to detect windows with rounded corners and don't consider\n" " them shaped windows. Affects --shadow-ignore-shaped,\n" " --unredir-if-possible, and possibly others. You need to turn this\n" " on manually if you want to match against rounded_corners in\n" " conditions.\n" + "\n" "--detect-client-opacity\n" " Detect _NET_WM_OPACITY on client windows, useful for window\n" " managers not passing _NET_WM_OPACITY of client windows to frame\n" @@ -5244,11 +5282,14 @@ usage(int ret) { #else #define WARNING #endif + "\n" "--refresh-rate val\n" " Specify refresh rate of the screen. If not specified or 0, compton\n" " will try detecting this with X RandR extension."WARNING"\n" + "\n" "--vsync vsync-method\n" - " Set VSync method. There are up to 4 VSync methods currently available.\n" + " Set VSync method. There are (up to) 5 VSync methods currently\n" + " available:\n" " none = No VSync\n" #undef WARNING #ifndef CONFIG_VSYNC_DRM @@ -5257,7 +5298,7 @@ usage(int ret) { #define WARNING #endif " drm = VSync with DRM_IOCTL_WAIT_VBLANK. May only work on some\n" - " drivers." WARNING "\n" + " (DRI-based) drivers." WARNING "\n" #undef WARNING #ifndef CONFIG_VSYNC_OPENGL #define WARNING WARNING_DISABLED @@ -5267,67 +5308,82 @@ usage(int ret) { " opengl = Try to VSync with SGI_video_sync OpenGL extension. Only\n" " work on some drivers." WARNING"\n" " opengl-oml = Try to VSync with OML_sync_control OpenGL extension.\n" - " Only work on some drivers. Experimental." WARNING"\n" + " Only work on some drivers." WARNING"\n" " opengl-swc = Try to VSync with SGI_swap_control OpenGL extension.\n" - " Only work on some drivers. Works only with GLX backend.\n" - " Does not actually control paint timing, only buffer swap is\n" - " affected, so it doesn't have the effect of --sw-opti unlike\n" - " other methods." WARNING "\n" + " Only work on some drivers. Works only with GLX backend." WARNING "\n" " opengl-mswc = Try to VSync with MESA_swap_control OpenGL\n" " extension. Basically the same as opengl-swc above, except the\n" " extension we use." WARNING "\n" + "\n" "--vsync-aggressive\n" " Attempt to send painting request before VBlank and do XFlush()\n" " during VBlank. This switch may be lifted out at any moment.\n" + "\n" "--alpha-step val\n" " X Render backend: Step for pregenerating alpha pictures. \n" " 0.01 - 1.0. Defaults to 0.03.\n" + "\n" "--dbe\n" " Enable DBE painting mode, intended to use with VSync to\n" " (hopefully) eliminate tearing.\n" + "\n" "--paint-on-overlay\n" " Painting on X Composite overlay window.\n" + "\n" "--sw-opti\n" " Limit compton to repaint at most once every 1 / refresh_rate\n" " second to boost performance.\n" + "\n" "--use-ewmh-active-win\n" " Use _NET_WM_ACTIVE_WINDOW on the root window to determine which\n" " window is focused instead of using FocusIn/Out events.\n" + "\n" "--respect-prop-shadow\n" " Respect _TDE_WM_WINDOW_SHADOW. This a prototype-level feature, which\n" " you must not rely on.\n" + "\n" "--unredir-if-possible\n" " Unredirect all windows if a full-screen opaque window is\n" " detected, to maximize performance for full-screen windows.\n" + "\n" "--unredir-if-possible-delay ms\n" " Delay before unredirecting the window, in milliseconds.\n" " Defaults to 0.\n" + "\n" "--unredir-if-possible-exclude condition\n" " Conditions of windows that shouldn't be considered full-screen\n" " for unredirecting screen.\n" + "\n" "--focus-exclude condition\n" " Specify a list of conditions of windows that should always be\n" " considered focused.\n" + "\n" "--inactive-dim-fixed\n" " Use fixed inactive dim value.\n" + "\n" "--detect-transient\n" " Use WM_TRANSIENT_FOR to group windows, and consider windows in\n" " the same group focused at the same time.\n" + "\n" "--detect-client-leader\n" " Use WM_CLIENT_LEADER to group windows, and consider windows in\n" " the same group focused at the same time. WM_TRANSIENT_FOR has\n" " higher priority if --detect-transient is enabled, too.\n" + "\n" "--blur-background\n" " Blur background of semi-transparent / ARGB windows. Bad in\n" " performance. The switch name may change without prior\n" " notifications.\n" + "\n" "--blur-background-frame\n" " Blur background of windows when the window frame is not opaque.\n" " Implies --blur-background. Bad in performance. The switch name\n" " may change.\n" + "\n" "--blur-background-fixed\n" " Use fixed blur strength instead of adjusting according to window\n" " opacity.\n" + "\n" "--blur-kern matrix\n" " Specify the blur convolution kernel, with the following format:\n" " WIDTH,HEIGHT,ELE1,ELE2,ELE3,ELE4,ELE5...\n" @@ -5341,6 +5397,7 @@ usage(int ret) { " May also be one the predefined kernels: 3x3box (default), 5x5box,\n" " 7x7box, 3x3gaussian, 5x5gaussian, 7x7gaussian, 9x9gaussian,\n" " 11x11gaussian.\n" + "\n" "--blur-background-exclude condition\n" " Exclude conditions for background blur.\n" "--greyscale-background\n" @@ -5348,20 +5405,24 @@ usage(int ret) { " The switch name may change without prior notifications.\n" "--greyscale-background-exclude condition\n" " Exclude conditions for greyscale background.\n" + "\n" "--resize-damage integer\n" " Resize damaged region by a specific number of pixels. A positive\n" " value enlarges it while a negative one shrinks it. Useful for\n" " fixing the line corruption issues of blur. May or may not\n" " work with --glx-no-stencil. Shrinking doesn't function correctly.\n" + "\n" "--invert-color-include condition\n" " Specify a list of conditions of windows that should be painted with\n" " inverted color. Resource-hogging, and is not well tested.\n" + "\n" "--opacity-rule opacity:condition\n" " Specify a list of opacity rules, in the format \"PERCENT:PATTERN\",\n" " like \'50:name *= \"Firefox\"'. compton-trans is recommended over\n" " this. Note we do not distinguish 100% and unset, and we don't make\n" " any guarantee about possible conflicts with other programs that set\n" " _NET_WM_WINDOW_OPACITY on frame or client windows.\n" + "\n" "--shadow-exclude-reg geometry\n" " Specify a X geometry that describes the region in which shadow\n" " should not be painted in, such as a dock window region.\n" @@ -5373,32 +5434,39 @@ usage(int ret) { #else #define WARNING #endif + "\n" "--xinerama-shadow-crop\n" " Crop shadow of a window fully on a particular Xinerama screen to the\n" " screen." WARNING "\n" + "\n" "--backend backend\n" " Choose backend. Possible choices are xrender, glx, and\n" " xr_glx_hybrid" WARNING ".\n" + "\n" "--glx-no-stencil\n" " GLX backend: Avoid using stencil buffer. Might cause issues\n" " when rendering transparent content. My tests show a 15% performance\n" " boost.\n" + "\n" "--glx-copy-from-front\n" " GLX backend: Copy unmodified regions from front buffer instead of\n" " redrawing them all. My tests with nvidia-drivers show a 5% decrease\n" " in performance when the whole screen is modified, but a 30% increase\n" " when only 1/4 is. My tests on nouveau show terrible slowdown. Could\n" " work with --glx-swap-method but not --glx-use-copysubbuffermesa.\n" + "\n" "--glx-use-copysubbuffermesa\n" " GLX backend: Use MESA_copy_sub_buffer to do partial screen update.\n" " My tests on nouveau shows a 200% performance boost when only 1/4 of\n" " the screen is updated. May break VSync and is not available on some\n" " drivers. Overrides --glx-copy-from-front.\n" + "\n" "--glx-no-rebind-pixmap\n" " GLX backend: Avoid rebinding pixmap on window damage. Probably\n" " could improve performance on rapid window content changes, but is\n" " known to break things on some drivers (LLVMpipe, xf86-video-intel,\n" " etc.).\n" + "\n" "--glx-swap-method undefined/copy/exchange/3/4/5/6/buffer-age\n" " GLX backend: GLX buffer swap method we assume. Could be\n" " undefined (0), copy (1), exchange (2), 3-6, or buffer-age (-1).\n" @@ -5407,9 +5475,11 @@ usage(int ret) { " but safer (6 is still faster than 0). -1 means auto-detect using\n" " GLX_EXT_buffer_age, supported by some drivers. Useless with\n" " --glx-use-copysubbuffermesa.\n" + "\n" "--glx-use-gpushader4\n" " GLX backend: Use GL_EXT_gpu_shader4 for some optimization on blur\n" " GLSL code. My tests on GTX 670 show no noticeable effect.\n" + "\n" "--xrender-sync\n" " Attempt to synchronize client applications' draw calls with XSync(),\n" " used on GLX backend to ensure up-to-date window content is painted.\n" @@ -5419,6 +5489,7 @@ usage(int ret) { #else #define WARNING #endif + "\n" "--xrender-sync-fence\n" " Additionally use X Sync fence to sync clients' draw calls. Needed\n" " on nvidia-drivers with GLX backend for some users." WARNING "\n" @@ -5428,17 +5499,22 @@ usage(int ret) { #else #define WARNING #endif + "\n" "--glx-fshader-win shader\n" " GLX backend: Use specified GLSL fragment shader for rendering window\n" " contents.\n" + "\n" "--force-win-blend\n" " Force all windows to be painted with blending. Useful if you have a\n" " --glx-fshader-win that could turn opaque pixels transparent.\n" + "\n" "--dbus\n" " Enable remote control via D-Bus. See the D-BUS API section in the\n" " man page for more details." WARNING "\n" + "\n" "--benchmark cycles\n" " Benchmark mode. Repeatedly paint until reaching the specified cycles.\n" + "\n" "--benchmark-wid window-id\n" " Specify window ID to repaint in benchmark mode. If omitted or is 0,\n" " the whole screen is repainted.\n" |