> Maybe screenshots would be helpful!
Okay, so for reference, here's how I normally see text rendered (I opt in to FreeType's v35 TTF interpreter, which hints (aligns) to full pixels rather than subpixels [0], which to me produces much clearer text than the now-default v40):
FTv35, Sway 1.00x, Firefox 1.00x: https://gist.github.com/Maxdamantus/2ba942eb20a58f0ec0708cac...
Here's how it looks again using the v35 interpreter, but scaled up to 1.25x, first using Sway [3] and second using Firefox (so in both cases the content text should be more-or-less the same size):
FTv35, Sway 1.00x, Firefox 1.25x: https://gist.github.com/Maxdamantus/2ba942eb20a58f0ec0708cac...
FTv35, Sway 1.25x, Firefox 1.00x: https://gist.github.com/Maxdamantus/2ba942eb20a58f0ec0708cac...
Using the v40 interpreter, the differences are harder to notice, but this is because the text has already been blurred due to extra horizontal antialiasing [1] [2], so blurring it a second time only makes the artifacts slightly worse instead of introducing new ones:
FTv40, Sway 1.00x, Firefox 1.25x: https://gist.github.com/Maxdamantus/2ba942eb20a58f0ec0708cac...
FTv40, Sway 1.25x, Firefox 1.00x: https://gist.github.com/Maxdamantus/2ba942eb20a58f0ec0708cac...
Even in the v40 images, the Firefox scaling looks better to me than the sway scaling. Additionally, the border around the text area is noticably clearer, since Firefox has intentionally drawn it to align with the pixel grid, but when it gets scaled by Sway, the correspondence between Firefox's pixel grid and the device pixel grid is lost.
Also note that all of these images have a sample of text in the bottom left corner that has been upscaled 800% with no/nearest interpolation, so the individual device pixels can be seen clearly.
If someone wants to download all of these images in one go:
$ git clone https://gist.github.com/Maxdamantus/2ba942eb20a58f0ec0708cac7db92a9a
Admittedly, I should probably have reënabled subpixel antialiasing in the v40 examples, since the theory behind v40 kind of assumes subpixel antialiasing (maybe an exercise for a reader), but it should at least be clear from these images that the simulated fractional scaling that currently exists in sway/Wayland is suboptimal.
> Even so, downscaling (as opposed to upscaling which is what I think happens on Xwayland) while not "100%" should still not manifest as blurriness, though?
Yes. The downscale is done using "linear" interpolation (which averages/blurs adjacent pixels together—this is demonstrated in my v35 images by the grey vertical lines in text). sway also supposedly supports "nearest" interpolation, but this doesn't seem to work when I configure it, maybe it only does it when upscaling, not downscaling (I expect this would look worse anyway).
[0] https://freetype.org/freetype2/docs/hinting/subpixel-hinting...
[1] In fact, as I understand it, "super sample anti-aliasing" is when a graphic is rasterised to a larger image and then scaled down linearly, and this is what video game graphics attempt to approximate with "multisample anti-aliasing", so "antialiasing" really does imply "blurring"
[2] I feel I should also point out that this might make it hard to properly see the difference in clarity between the v35 images and v40 images for people that are already using simulated fractional scaling. Preferably the pixels in these images should be rendered directly to the viewer's device pixels.
[3] As discussed, the upscale to 1.25x in sway actually involves rendering at 2.00x and then scaling down by 0.625x, because 2*0.625 = 1.25