| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Add glx_take_screenshot() for taking a screenshot. With ImageMagick
the output data could be viewed in this way:
display -size [SCREEN-WIDTH]x[SCREEN-HEIGHT] -depth 8 -flip
rgb:[PATH]
(#204)
- Add D-Bus command `opts_get string:paint_on_overlay_id` to get X
Composite overlay window ID. (#204)
- Code cleanup.
|
|
|
|
|
| |
Add --no-name-pixmap to disable the usage of
XCompositeNameWindowPixmap(), for debugging.
|
|
|
|
| |
Still, "Guassian" -> "Gaussian". (#221)
|
|
|
|
|
|
| |
- Fix X pixmap leakage in shadow_paint.
- Add the skeleton of a X resource leakage checker.
|
|
|
|
|
|
|
| |
- Separate GLX parts from session_t into glx_session_t.
- Add --rererdir-on-root-change and --glx-reinit-on-root-change, as
possible solutions for #217. Thanks to jlindgren90 for reporting.
|
|
|
|
|
|
| |
- Add --version. (#206)
- Add --no-x-selection for debugging. (#207)
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Add --glx-fshader-win, which specifies a custom fragment shader for
painting windows. compton-default-fshader-win.glsl is the shader with
default behavior, and compton-fake-transparency-fshader-win.glsl
provides a template of fake transparency. (#183)
- Add --force-win-blend to force all windows to be painted with
blending.
- Add --no-fading-destroyed-argb, as a workaround of bugs in some WMs.
(#193)
|
|
|
|
|
|
|
| |
Add `bounding_shape` and `rounded_corners` as condition match target.
Deprecate --shadow-ignore-shaped. Add rounded-corners detection to
win_is_fullscreen(). Slightly modify win_rounded_corners() logic. Thanks
to tdryer for reporting. (#191)
|
|
|
|
|
|
| |
Copy shadow/fade/color-inversion/background-blur state from last paint
on unmapped windows. I hope it doesn't have unexpected side effects.
(#190)
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Try to avoid evaluating conditions after window unmap/destruction.
Unfortunately, frequently this doesn't work due to the asynchronous
nature of X.
- Add _GTK_FRAME_EXTENTS exclusion rules to compton.sample.conf. Thanks
to memeplex, hexchain, and others for info. (#189)
- Add debugging option --show-all-xerrors, and other debugging changes.
Doc update.
|
|
|
|
|
|
|
|
| |
- Add --xrender-sync{,-fence} as configuration file option.
- Quit on encountering invalid opacity rule.
- Other small changes.
|
|
|
|
|
|
|
|
|
|
| |
- Add --xrender-sync{,-fence} to deal with redraw lag issue on GLX
backend. --xrender-sync-fence requires a sufficiently new xorg-server
and libXext. NO_XSYNC=1 may be used to disable it at compile time.
Thanks to tchebb for reporting and everybody else for testing. (#181)
- A bit code clean-up. Replace a few XSync() with XFlush() to minimize
the latency.
|
|
|
|
|
|
|
| |
- Add "xr-glx-hybrid" as an alias of "xr_glx_hybrid". (#163)
- Clear damage history in expose_root() and when root window size
changes. Unfortunately this doesn't fix #181.
|
|
|
|
| |
Make usage of glFinish() optional to avoid high CPU usage. (#163)
|
|
|
|
|
| |
Fix a spelling mistake (xr_glx_hybird -> xr_glx_hybrid). Thanks to cju
for reporting.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Add new backend "xr_glx_hybird", which uses X Render for all
compositing but GLX on the last step of rendering to screen. This
makes GLX-backend-specific VSync methods usable while may avoid
certain bugs with GLX backend. The idea comes from ali1234.
Experimental.
- GLX backend: Stop using or rendering to depth buffer.
- Use glFinish() instead of glFlush() before VSync. It probably uses
more CPU but could be more reliable than glFlush().
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Add --write-pid-path to write process ID to a file, to help
determining compton's process ID when -b is used.
- Add a few extra targets to query through D-Bus opts_get (version, pid,
etc.) and through win_get, primarily for debugging.
- Add helper macros likely(), unlikely(), cmalloc(), ccalloc(),
crealloc().
- Change w->opacity_set to opacity_t. Determine display_repr in
session_init(), etc.
|
|
|
|
|
|
|
|
|
|
|
|
| |
Possible fix for a very rare timing issue in focus detection. Compton
may fail to detect the currently focused window, when a window newly
mapped gets focused, we failed to listen to events and get FocusIn from
it in time, and a series of focus change events before it happens stay
in the event queue and puzzled compton. My choice is to force focus
recheck on all focus-related events. More roundtrips to X, but not
necessarily worse performance, due to the high cost of focus flipping
especially when there's a lot of conditions. Thanks to SlackBox for
reporting. (#153)
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Rewrite focus detection logic. Remove w->focused_real and use
ps->active_win to identify focused window uniformly. Use a more
expensive way to filter FocusIn/Out events to improve reliability.
Only limited tests are done, and bugs are likely to be introduced.
(#99)
- Known issue: Under fvwm, compton sometimes does not consistently
report the window input gets sent to. But there's something wrong in
that case: XGetInputFocus() shows the root window is focused but
another window is receiving input.
|
|
|
|
|
|
|
|
|
|
| |
- Add --unredir-if-possible-exclude, to exclude certain windows when
evaluating --unredir-if-possible. (#140)
- Add --unredir-if-possible-delay, to add some delay before
unredirecting screen. (#138, #140)
- Code clean-up.
|
|
|
|
|
| |
Add --xinerama-shadow-crop to crop shadow to current Xinerama screen.
Thanks to Feltzer for suggestion.
|
|
|
|
|
|
|
|
|
|
| |
- Add stoppaint_force option, controlled via D-Bus, to stop painting
completely, which may look better than unredirecting the screen,
sometimes. (#41)
- Add x2, y2 matching targets.
- Update documentation.
|
|
|
|
|
|
|
| |
- Add "redirected_force" to D-Bus opts_get to forcefully
redirect/unredirect windows.
- Add D-Bus method "repaint", to, namely, repaint the screen.
|
|
|
|
|
|
|
|
|
|
|
| |
- Add --paint-exclude to prevent certain windows from being painted, for
debugging purposes.
- Add predefined matching target "x", "y", "width", "height", "widthb",
"heightb", "border_width", and "fullscreen".
- Fix bug #119, wrong man page install dir in CMake configuration.
Thanks to sstewartgallus for reporting.
|
|
|
|
|
|
|
|
| |
- Add --shadow-exclude-reg, which excludes certain regions on the screen
to have shadows painted in. (#116)
- Adjust session initialization order. Now X root and screen info and
basic X extensions are available in configuration parsing step.
|
|
|
|
|
|
|
|
|
|
|
| |
- Add --opacity-rule, which sets opacity based on conditions, as
requested by zabbal. (#113)
- Add a data field for each condition.
- Correct the FAQ link in README.md. Silly me.
- Code clean-up.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Add multipass blur support. Note GLX Framebuffer support is required.
My benchmark shows multipass blur brings 5% performance boost for X
Render backend (3x3box). On GLX backend it brings 10% performance
boost for 5x5box but negatively affects performance for 3x3box. Thanks
to jrfonseca for advice. (#107)
- GLX backend: Cache blur texture for each window, for a 12% performance
boost.
- Add D-Bus fading control. Thanks to yulan6248 for testing. (#112)
- Fix FAQ link in README.md. Thanks to lorenzos for report. (#111)
- Correctly deinitialize VSync on on-the-fly VSync method switch.
- X Render backend: Normalize blur kernel.
- Code clean-up.
- Known issue: Linear corruption on border of a window may appear with X
Render multi-pass blur. Possible to fix but probably not worthwhile.
|
|
|
|
|
|
|
|
|
|
|
| |
- GLX backend: Add DEBUG_GLX_MARK, to add GL marks around functions with
glStringMarkerGREMEDY(), and mark frame termination with
glFrameTerminatorGREMEDY().
- Print output of `compton -h` to stdout. (#110)
- GLX backend: Strip out elements with factor 0 in GLSL blur code.
Thanks to jrfonseca for guides. (#107)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Fix GL_TEXTURE_RECTANGLE support. Thanks to amonakov for guides.
(#107)
- Enhance --glx-copy-from-front to improve performance and make it work
with --glx-swap-method, copied from kwin patch. Thanks to bwat47 for
info. (#107)
- Add texture2Doffset() support in blur GLSL shader. Thanks to amonakov
for advice. No visible benefit here, though. (#107)
- Only limited tests are done and I'm super sleepy. Bugs expected
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Fix --resize-damage. I forgot to shrink the painting region back when
actually copying to destination.
- Include extra pixels around the blur texture to avoid some possible
small issues, if --resize-damage is positive.
- Known issue: Line artifacts may still appear with --dbe (X Render
backend) or --glx-swap-method (GLX backend). I doubt if there's way to
fix this without very inefficient mechanisms.
|
|
|
|
|
|
|
|
| |
- Add --resize-damage to enlarge/shrink repaint region by a specific
number of pixels, used for solving the line corruption issue with
blur. Thanks to Nuck and jerri in #104 for reporting.
- Fix the memory leak of blur shader string.
|
|
|
|
|
| |
- Enhance --glx-swap-method to support longer buffers ages (3-6), and
automatic buffer age detection via GLX_EXT_buffer_age.
|
|
|
|
|
|
|
|
|
|
|
| |
- Add blur convolution kernel customization, --blur-kern. The format is
a bit tricky so be sure to read the description in `compton -h`. Not
much tests received.
- GLX backend: Tolerate missing GLSL uniforms for strangely shaped
convolution kernel.
- Fix a memory leak that blur-background blacklist is not freed.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- GLX backend: Add --glx-swap-method, to reduce painting region if the
driver uses exchange or copy buffer swaps. Untested.
- Add --fade-exclude, to disable fading on specific windows based on
some conditions. Untested.
- Expose GLX backend options through configuration file. Add fetching of
GLX backend options through D-Bus.
- Use NULL pointer instead of element count to delimit string arrays in
parse_vsync()/parse_backend()/parse_glx_swap_method().
- Add documentation about "wintypes" section in configuration file.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- GLX backend: Fix broken dim and blur with --glx-no-stencil when
dealing with shaped windows.
- GLX backend: Cache region contents and do a local region intersection
instead of using XFixesIntersectRegion(). Drastic reduction in CPU
usage for --glx-no-stencil. Now --glx-no-stencil substantially
outperforms (~15%) normal mode.
- Use macros to reuse paint-in-region code in opengl.c . Add new type
"reg_data_t" to store XserverRegion cache.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Cache region contents in is_region_empty(), mostly useful only for GLX
backend to save one roundtrip to X.
- GLX backend: Add --glx-no-rebind-pixmap, which prevents rebinding of
GLX texture to pixmap on content change. It doesn't work on some
drivers, but it saves some CPU on those where it does.
- Wrap XFree() with a new function cxfree() since its man page claims
NULL pointers are not acceptable (although in fact it does...).
- Use macro to save some code in get_cfg(). Code clean-up.
|
|
|
|
|
| |
- Add workarounds for missing GL_TEXTURE_RECTANGLE and PictOpDifference
definitions in broken GL headers / old X Composite headers.
|
|
|
|
|
|
| |
- Add default active window opacity (--active-opacity). (#4)
- Add win_focusin and win_focusout D-Bus signals.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- GLX backend: Fix broken --inactive-dim.
- GLX backend: Fix bugs when inverting colors of windows. Thanks to
madsy and neure for help.
- GLX backend: Lift `glx_no_stencil` restriction from glx_init_blur().
It still probably won't work, but the user can try.
- XRender backend: Use XRenderFillRectangles() instead of
XRenderComposite() to do dimming.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Add --blur-background-exclude. (#98)
- Add `opengl-mswc` VSync, which uses MESA_swap_control instead of
SGI_swap_control. I don't expect it to perform better than
SGI_swap_control, though.
- Update CMakeLists.txt .
- Add a few targets for D-Bus `win_get`. Misc changes.
- Known issue: Apparently I've forgotten implementing --inactive-dim on
GLX backend... Silly me.
|
|
|
|
|
|
|
|
|
|
| |
- GLX backend: Add --glx-use-copysubbuffermesa, to use
MESA_copy_sub_buffer to do partial screen update. Huge performance
boost on mesa drivers for partial screen updates, but does not work
for nvidia-drivers and may break VSync. Automagically overrides
--glx-copy-from-front.
- Add rect_is_fullscreen() to reuse code. Misc changes.
|
|
|
|
|
|
|
|
| |
- GLX backend: Add blur background support using a GLSL shader. Only
tested with nvidia-drivers-313.26. Known to cause quite some decrease
in performance (~10%?).
- Detach shaders in glx_create_program(). Misc changes.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- GLX backend: Add --glx-copy-front, which copies all unmodified regions
from front buffer to back buffer instead of redrawing the whole
screen. Unfortunately, probably because glCopyPixels() isn't usually
well-optimized on graphic cards, this option appears very unstable in
its effect: Over 20% boost in performance when only 1/4 of the screen
is modified, but 10% decrease when the whole screen is. Thus, not
enabled by default.
- GLX backend: Add glx_blur_dst(), to prepare for the background blur
feature. It currently is capable to modify background in the desired
way, but the core blur shader is absent. glConvolution2D() seemingly
relies entirely on CPU and has horrifying performance. I've hesitating
about whether I should use ARB assembly language or GLSL for the
shader.
- GLX backend: Invert y-axis GL matrix. It's upside-down previously
because that's what dcompmgr uses. Seemingly a "normal" y-axis is
required for glCopyPixels() to operate correctly.
- GLX backend: Fix some GLX_TEXTURE_RECTANGLE compatibility issues.
Still, not actually tested.
- Add benchmark mode (--benchmark & --benchmark-wid).
- Misc changes.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- GLX backend: Fix a bug that ARGB windows / shadows are rendered too
dark. Thanks to derhass in FreeNode/##opengl for help.
- GLX backend: Fix a problem that during window resize the content looks
jittering, by letting compton fetch pixmap sizes with XGetGeometry()
instead of relying on window width/height, which could be inaccurate
during window resize. Negative effect on performance. Thanks to M4he
for reporting. (#7)
- Add .desktop file. Thanks to quequotion for providing it. (#97)
- Avoid checking presence of window pixmap, because they may not exist
with very old X Composite implementations.
- Add workaround for a strange window restack issue when compton
receieves a ConfigureNotify with non-existent new above window.
- Add debugging function hexdump(). Extra sanity checks on various
places.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- GLX backend: Fix a bug that window content does not get updated on
VirtualBox, by rebinding texture when window content changes. This may
have a negative effect on performance.
- GLX backend: Add --glx-no-stencil to restore the old clipping method,
just in case.
- GLX backend: Apply stricter checks on texture-pixmap binding.
- GLX backend: Fix a bug that glx_set_clip() behaves incorrectly when
None is passed in.
- GLX backend: Use glEnable()/glDisable() to toggle stencil tests, in
hope to increase performance.
- Move window pixmap/picture fetching to win_paint_win(), in hope to
increase performance.
- Intersect shadow painting region with its bounding rectangle, in hope
to increase performance.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Fix a bug that glx_bind_pixmap() doesn't work with mesa drivers.
Thanks to Janhouse and mkraemer for reporting. (#7)
- Use stencil buffer to attempt to eliminate potential double-paint
issue in glx_render(). X Fixes doesn't guarantee the rectangles in a
region do not overlap, and this may cause some regions to be painted
twice, which would be a problem if we are painting transparent things.
Now the target window must have a stencil buffer. Compiz uses its own
region implementation to deal with this, but as a lightweight
compositor we can't really do the same. It may have a positive or
negative effort over performance. Callgrind result indicates basically
no change in performance, but this may or may not be true.
- Correctly distinguish GL extensions and GLX extensions. Sorry. :-D
- Handle screen size. Thanks to tsmithe for reporting. (#7)
- Rename OpenGL backend to GLX backend, because, we might have a EGL
backend someday.
- Add configuration file option `backend` to specify backend. Add
`backend` to D-Bus `opts_get`.
- Add OpenGL shader compilation code, but currently unused.
- Minor adjustments.
- Known issue: Window content doesn't get updated in VirtualBox,
probably because its OpenGL implementation requires constant rebinding
of texture. But that's really slow...
- Known issue: Blur feature is still unimplemented in GLX backend.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Add experimental OpenGL backend (--opengl). --blur-background is
currently not possible with this backend, because I'm still trying to
find a proper way to do blur with OpenGL. Flipping backend on-the-fly
is really hard, so it isn't supported right now. No configuration file
option exists to enable this, because it isn't stable enough.
- Add `opengl-swc` VSync method that uses SGI_swap_control to control
buffer swap, with OpenGL backend. (#7)
- Fix a potential read-from-freed-memory issue in paint_all().
- Correctly reattach GLX context after fork.
- Dump error text in error(). Add GLX error code handling.
- Code clean-up.
- Known issues: Region operations take a lot of time in glx_render().
I'm hesitating about what to do.
|
|
|
|
|
|
|
| |
- Add predefined matching target "argb" to match ARGB windows.
- Make it possible to enable focus tracking on-the-fly with D-Bus
method.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- #91: Use pkg-config to find drm.h to avoid issues on FreeBSD. Thanks
to hun7err for pointing out and providing patch.
- #89: Add default shadow exclusion rule for notify-osd. Thanks to
DanielRS.
- Check for abundant positional arguments.
- Use paint target window (root window / overlay window) instead of
ps->reg_win to create GLXContext. (May have negative effects on OpenGL
VSync.) Add new OpenGL helpers functions, to prepare for the new
OpenGL backend.
- Dump more info of a PropertyNotify with DEBUG_EVENTS.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Add on-the-fly VSync option modification via D-Bus, as requested by
kunitoki (#80). Expose parse_vsync(), create vsync_init() and
ensure_glx_context().
- Change default value of ps->drm_fd to -1.
- Update Makefile. Change the install/uninstall rules and add doc
installation, requested by hasufell in #85.
- Mark window not damaged in map_win(). It helps in reducing flickering
with inverted window color, but I'm not completely sure if it's safe.
- Avoid modifying w->invert_color when window is unmapped.
- Update documentation. Thanks to hasufell for pointing out.
|