343 Commits

Author SHA1 Message Date
Qwerasd
6339f9bae9 renderer: metal shaders rework
- Significant changes to optimize memory usage.
- Adjusted formatting of the metal shader code to improve readability.
- Normalized naming conventions in shader code.
- Abstracted repetitive code for attribute descriptors to a helper
function.
2024-08-07 17:39:31 -04:00
Mitchell Hashimoto
0f8ed39766 Merge pull request #2049 from pluiedev/fix/exempt-powerline-from-minimum-contrast
renderer: exempt Powerline cells from minimum contrast requirements
2024-08-06 10:12:14 -07:00
Leah Amelia Chen
503dfae6ff renderer: exempt Powerline cells from minimum contrast requirements
With a minimum contrast set, the colored glyphs that Powerline uses
would sometimes be set to white or black while the surrounding background
colors remain unchanged, breaking up contiguous colors on segments of
the Powerline.

This no longer happens with this patch as Powerline glyphs are now
special-cased and exempt from the minimum contrast adjustment.
2024-08-06 15:28:50 +08:00
Łukasz Niemier
f9be02a20f chore: clean up typos 2024-08-05 13:56:57 +02:00
Mitchell Hashimoto
ea551990eb renderer: disable window-padding-color=extend in certain scenarios
There are scenarios where this configuration looks bad. This commit
introduces some heuristics to prevent it. Here are the heuristics:

  * Extension is always enabled on alt screen.
  * Extension is disabled if a row contains any default bg color. The
    thinking is that in this scenario, using the default bg color looks
    just fine.
  * Extension is disabled if a row is marked as a prompt (using semantic
    prompt sequences). The thinking here is that prompts often contain
    perfect fit glyphs such as Powerline glyphs and those look bad when
    extended.

This introduces some CPU cost to the extension feature but it should be
minimal and respects dirty tracking. This is unfortunate but the feature
makes many terminal scenarios look much better and the performance cost
is minimal so I believe it is worth it.

Further heuristics are likely warranted but this should be a good
starting set.
2024-08-03 21:56:19 -07:00
Mitchell Hashimoto
1cc5a69c43 Revert "renderer/metal: can access grid metrics directly on font grid"
This reverts commit 172179bbff7d3f0df73ba1c29c6906b69ead2619.
2024-08-03 18:37:42 -07:00
Mitchell Hashimoto
172179bbff renderer/metal: can access grid metrics directly on font grid
Its never recalculated so we don't need a lock.
2024-08-03 18:37:15 -07:00
Mitchell Hashimoto
56b3aa0b5e renderer/metal: font grid change should run all screen size logic 2024-08-03 18:33:53 -07:00
Mitchell Hashimoto
55e8c421b5 config: add window-padding-color 2024-08-03 16:14:14 -07:00
Mitchell Hashimoto
5309f4d080 renderer/metal: extend background color of grid border into padding 2024-08-03 15:39:02 -07:00
Mitchell Hashimoto
62cc279fc0 Merge pull request #1989 from gpanders/cursor-invert-fg-bg
config: add cursor-invert-fg-bg option
2024-07-31 19:39:27 -07:00
Mitchell Hashimoto
09e367fe09 Merge pull request #2015 from ghostty-org/kitty-unicode
Kitty Graphics Unicode Placeholders
2024-07-31 09:56:12 -07:00
Mitchell Hashimoto
765254e784 renderer/opengl: unicode placeholder support 2024-07-29 19:15:42 -07:00
Mitchell Hashimoto
0c81ca44b8 terminal/kitty: do not render blank virtual placement cells 2024-07-29 14:52:09 -07:00
Mitchell Hashimoto
079420730a renderer/metal: address some todos 2024-07-29 10:55:50 -07:00
Mitchell Hashimoto
359458b96a terminal/kitty: switch to new placement math 2024-07-29 10:52:10 -07:00
Mitchell Hashimoto
0ebf14fd44 terminal/kitty: working on moving placement math here for testing 2024-07-29 10:39:18 -07:00
Mitchell Hashimoto
4bf8d30b44 renderer/metal: rewrite kitty placeholder handling 2024-07-29 09:35:51 -07:00
Mitchell Hashimoto
6668930b96 terminal: appendGrapheme should text for codepoint, not text 2024-07-26 12:24:35 -07:00
Mitchell Hashimoto
a5d39103c9 renderer/metal: calculate proper grid offsets for image 2024-07-26 12:21:37 -07:00
Mitchell Hashimoto
3d4dd5277e renderer/metal: virtual placements are kind of rendering 2024-07-25 22:08:02 -07:00
Mitchell Hashimoto
d6d95209c6 renderer/metal: extract out some image placement logic 2024-07-25 21:35:38 -07:00
Mitchell Hashimoto
763e7fab8a renderer: skip virtual placements 2024-07-25 21:32:44 -07:00
Qwerasd
f17c072637 renderer/metal: use swap chain for custom shader passes 2024-07-25 21:16:35 -04:00
Mitchell Hashimoto
12f0108673 renderer/metal: fix custom shader animations with display link 2024-07-22 15:32:58 -07:00
Gregory Anders
b09e4e5d63 config: add cursor-invert-fg-bg option
When set, the cursor-invert-fg-bg option uses the inverted foreground
and background colors of the cursor's current cell to color the cursor,
rather than using a fixed color. This option has higher precedence than
the cursor-color and cursor-text options, but has lower precedence than
an OSC 12 command to change the cursor color.
2024-07-22 08:42:30 -05:00
Mitchell Hashimoto
925ad5b45c renderer: match multiple lines for osc8 2024-07-05 21:40:39 -07:00
Mitchell Hashimoto
71353d016e coretext shaper owns CFReleaseThread, works on both Metal and OpenGL now 2024-06-22 20:42:59 -07:00
Mitchell Hashimoto
4325dc51bc font: coretext shaper owns the cf release pool 2024-06-22 20:32:24 -07:00
Mitchell Hashimoto
3038cb4979 Move CFReleaseThread to os package 2024-06-22 20:15:59 -07:00
Qwerasd
626ec2b5ac perf: introduce CFReleaseThread for running CoreFoundation releases
Some CoreFoundation objects, such as those produced by CoreText, have
expensive callbacks that run when they are released. By offloading the
CFRelease calls to another thread, we can avoid important threads being
blocked by unexpectedly expensive callbacks.

This commit also changes the way that the coretext shaper's run iterator
builds its string. Rather than using a CFMutableString, an ArrayList of
unichars is built which is passed to CFStringCreateWithCharactersNoCopy,
which is a lot more efficient since it avoids all the CoreFoundation
overhead.
2024-06-14 01:43:02 -04:00
Qwerasd
db2cefb668 misc: improve rebuildCells time logging 2024-06-10 12:20:49 -04:00
Jan200101
94a7166028 terminal: support using the bright palette for bold text 2024-05-25 16:58:19 +02:00
Mitchell Hashimoto
06bcbe868f renderer: kitty image with y offset should stretch image
Fixes #1784

This was just a misunderstanding of the "spec." When both a y offset
into the image is specified and a height, the image should be stretched.
I mistakingly thought that the image should be offset (even with this
misunderstanding there was a data corruption bug).

This resolves the issue and output matches Kitty.
2024-05-22 15:40:31 -04:00
Qwerasd
ac5725d582 fix(renderer): rebuild font grid and reset shaper cache on hot reload
When hot reloading config with a new font, shaper cache data needs to be
invalidated and the font grid needs to be rebuilt. This change just
makes that happen on all config reloads since it's a rare action so it's
not a performance concern.
2024-05-10 09:39:07 -07:00
Mitchell Hashimoto
61fd7f7fbf renderer/metal: reset cells when font size changes to avoid blank
Fixes #1743
2024-05-09 09:48:08 -07:00
Qwerasd
4f26eb203b renderer/Metal: cell Contents cleanup
Cleaned up naming, some logic changes, added comments.
2024-05-07 20:46:20 -04:00
Qwerasd
adf211f5d5 renderer/Metal: ArrayList cell Contents rows
This will allow for unlimited glyphs per row, eliminating the issue run in to with multi-substitution glyphs and combining characters which can result in more glyphs in a row than there are columns.
2024-05-07 19:19:06 -04:00
Qwerasd
dafabe3296 renderer/Metal: improve cell contents tracking
Previous version prevented multiple glyphs from belonging to the same coordinate, which broke quite a few things. This implementation fixes that (and may be more efficient too). Needs clean-up.
2024-05-07 19:19:06 -04:00
Mitchell Hashimoto
165c2d9056 renderer/metal: rebuild full screen when viewport changes 2024-05-07 10:22:12 -07:00
Mitchell Hashimoto
a84314befe renderer/metal: disable bandaid 2024-05-07 09:51:45 -07:00
Mitchell Hashimoto
c2c8660c62 renderer/metal: disable dirty tracking temporarily
While #1731 is not fixed.
2024-05-07 07:26:59 -07:00
Mitchell Hashimoto
4c39739a26 renderer/metal: rebuild all cells on resize 2024-05-06 20:51:55 -07:00
Mitchell Hashimoto
26300447e4 renderer/metal: reset screen dirty flags
I introduced screen dirty flags fairly late, and never reset them. As a
result, dirty tracking basically gets disabled as soon as selection
changes in any form. This happens frequently because _unsetting_
selection also resets selection which happens for various events.
2024-05-06 18:31:26 -07:00
Mitchell Hashimoto
8fdf6b4b64 renderer: add window-vsync option (defaults to false) 2024-05-05 10:18:15 -07:00
Mitchell Hashimoto
ca9689be46 renderer/metal: API to handle macOS display ID changing 2024-05-04 19:40:58 -07:00
Mitchell Hashimoto
6b3cb69101 renderer/metal: clean up some unnecessary state around rebuilds 2024-05-04 19:06:43 -07:00
Mitchell Hashimoto
b00e7009d7 renderer/metal: do not update frames if cells don't change 2024-05-04 14:50:13 -07:00
Mitchell Hashimoto
92caea6948 renderer/metal: remove unnecessary logs 2024-05-04 14:49:50 -07:00
Mitchell Hashimoto
ac813c9244 renderer/metal: stop/start display link on occlusion 2024-05-04 14:49:50 -07:00