Conversation
SDG-Den
force-pushed
the
border-textures
branch
2 times, most recently
from
September 7, 2026 11:54
c64f85e to
79ed852
Compare
re-worked texture engine for multiple slots added helper dispatchers and window rules that make working with the texture system easier added caching to image based renderers so image does not get read from disk every time added animations added a couple more renderers
SDG-Den
force-pushed
the
border-textures
branch
from
September 9, 2026 00:33
bd5e78e to
c59acfc
Compare
SDG-Den
marked this pull request as ready for review
September 9, 2026 00:39
SDG-Den
force-pushed
the
border-textures
branch
from
September 9, 2026 00:52
53cf516 to
1b8c931
Compare
SDG-Den
marked this pull request as draft
September 9, 2026 12:28
DreamMaoMao
force-pushed
the
main
branch
4 times, most recently
from
September 12, 2026 06:32
7ec6dc4 to
3dc2970
Compare
SDG-Den
force-pushed
the
border-textures
branch
from
September 14, 2026 19:31
813ab75 to
bfc279b
Compare
fixed crash with groups, fixed fade blink wonkiness, fixed some inconsistent syntax performance improvement - swapped cache searches from loop-based search to insertion sort based search. reworked segment renderer to use caching for each tile, drastically lowering re-render cost slight optimization to fit renderers: scale down cache first, also allowed monitoring of render times using mmsg made various other performance optimizations, added pre-caching, benchmarked all renderers within spec: - 25ms cold spawn - 20ms warm spawn - 10ms maximum resize animation - 5ms median resize animation - sub-1ms focus-change animation these are all measured by the time taken by the longest render call. Also added texture_render_ms field to client IPC output so users can measure the impact of their textures. some final fixes and brush-ups, as well as update to performance table
SDG-Den
force-pushed
the
border-textures
branch
from
September 14, 2026 20:49
0daa9d8 to
7ba1dfd
Compare
SDG-Den
marked this pull request as ready for review
September 14, 2026 21:24
This was referenced Sep 15, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Feature:
added a border texturing system (initially meant to support gradients, but expanded to allow a wide selection of customization) as well as supporting dispatchers.
new options:
active_texture(_top/_mid/_bot)sets the focused texture. 4 keys in total, one for each available texture slot (users can composite 3 textures on top of eachother if they so choose) and a general one that always targets the top slot
inactive_texture(_top/_mid_bot)same but for the unfocused textures
new mmsg field
texture_render_ms - shows the time taken to render the borders (always shows the last call), used for testing and useful to users to see the impact their borders have on their performance.
new window rules:
(in)active_texture(_top/_mid/_bot)same as the new options, multiple rules can be used to define multiple textures for the same window.
focus_colorsets an override for the global focus_color option for that window
border_colorsets an override for the global border_color option for that window
borderpxsets an override for the global borderpx option for that window
border_radiussets an override for the global border_radius option for that window
new dispatchers:
set_active_textureallows setting any of the active texture slots.
set_inactive_textureallows setting any of the inactive texture slots.
rerender_texturetriggers an immediate re-render of the focused window's texture (for scripting)
set_focus_overridesets an override for the focus border color
set_border_overridesets an override for the unfocused border color
clear_focus_overridesets the focus border back to its windowrule or global config value
clear_border_overridesets the unfocused border back to its windowrule or global config value
set_border_pxsets the border thickness override, -1 resets to default
set_border_radiussets the border radius override, -1 resets to default
renderers
renderers make use of caching where possible to avoid high software rendering costs, as well as caching all loaded images to avoid constantly loading them from disk. cache-warming is done on compositor start, config reload and first monitor detected to avoid heavy disk loads during use.
at the moment, only PNG is supported for images.
tests
all renderers were tested in a worst-case scenario:
measurements were done every 10ms, and were done on a "worst-measurement" basis, meaning that all results were the worst single render call in the measured window for any of the displays on screen.
both spawn and animation tests were done, spawn tests were done on tile layout at 1080p, and up to 8 window spawns was tested.
for animation, focus and resize were both tested multiple times. focus by using a dispatcher to change focus, resize through smartresizewin dispatcher
all testing was done automatically using a testing harness, all in, about 12 hours of testing was done.
all individual renderers pass the following requirements, even when deliberately used in a way to produce the worst-possible performance:
tests were done at 1080p on a ryzen 7 5700g with a target framerate of 60FPS. each renderer was tested in a fresh instance of mango.
examples 1-4
top left - solid_color_overlay (dark red dimming)

top right - solid_color (green, primarily for compositing)
bottom left - segment_color
bottom right - segment_image (ninepatch)
examples 5-8
top left - fit_overlay (with a dirt texture)

top right - tile_overlay (with a censor box)
bottom left - fit_image
bottom right - tile_image (with transparent components to show border color through)
examples 9-12
top left - static_image

top right - conic_gradient (full spectrum)
bottom left - radial_gradient (black to white)
bottom right - linear-gradient (teal to dark blue)