Mitchell Hashimoto
c68c487e14
Make selection part of the cache key for GPU cells
...
If the selection state changes for a given row, the row must be
invalidated.
2022-09-14 19:58:36 -07:00
Mitchell Hashimoto
77851b30a2
Revert "update to latest Zig nightly"
...
This reverts commit f3f2c3df268db905b6af6588e5e5008da0f48b60.
2022-09-14 19:39:10 -07:00
Mitchell Hashimoto
f3f2c3df26
update to latest Zig nightly
2022-09-14 19:34:19 -07:00
Mitchell Hashimoto
f5319f1ca6
Merge pull request #14 from mitchellh/fontconfig
...
Fontconfig (bindings only)
2022-09-14 14:33:00 -07:00
Mitchell Hashimoto
e4ea27ec37
fontconfig: more APIs
2022-09-14 14:30:18 -07:00
Mitchell Hashimoto
aca36ba79b
fontconfig: fc-match
2022-09-14 14:26:42 -07:00
Mitchell Hashimoto
03ab1bedd4
fontconfig: fc-match
2022-09-14 12:49:43 -07:00
Mitchell Hashimoto
eb2ce495b3
fontconfig: font list
2022-09-14 10:14:09 -07:00
Mitchell Hashimoto
ce899dca11
fontconfig: font sets
2022-09-14 10:05:09 -07:00
Mitchell Hashimoto
382f569d65
fontconfig: object sets and patterns
2022-09-14 09:54:48 -07:00
Mitchell Hashimoto
b4d571e018
pkg/fontconfig: disable ubsan (reported upstream)
2022-09-14 09:23:02 -07:00
Mitchell Hashimoto
4ca71eef7c
don't build fontconfig on mac
2022-09-13 14:46:33 -07:00
Mitchell Hashimoto
59191b05cd
build fontconfig
2022-09-13 14:34:40 -07:00
Mitchell Hashimoto
d422d1ee78
pkg/fontconfig: starting, not working
2022-09-13 13:53:20 -07:00
Mitchell Hashimoto
d5ee4f8b21
Cell GPU cache must also key by screen type (primary/alternate)
2022-09-13 10:43:03 -07:00
Mitchell Hashimoto
7bde20a43d
a cell is empty only if it also has no styling
...
Previously we only checked if it had no character. With text shaping,
this was causing runs of only empty backgrounds to not render.
2022-09-13 10:12:44 -07:00
Mitchell Hashimoto
b5f9e8abf0
fix potential crash
2022-09-13 10:12:29 -07:00
Mitchell Hashimoto
0801786d51
Cache text shaping results per row
...
This uses an LRU to cache text shaping results per row. Rows are marked "dirty" and the cache invalidated whenever any cell on a row changes. Rows are identified by an ID in the screen circular buffer and not by y-value so even as the screen scrolls, the row cache remains valid. Benchmarks via tracing:
* Heavy output (`cat <big>.txt`) - ~2% slower due to overhead of low hit rate on cache
* Mostly static screen with only text - ~10% faster, high cache hit rate
* Mostly static screen with a mix of ligatures, emoji, text - ~40% faster, high cache hit rate
Terminals are "mostly static". Usually we sit with our prompt sitting there flashing, just re-rendering the history that already exists. We might scroll back a bit to see some recent results. Ultimately, `cat <big>.txt` is not that common so I think trading 2% slowdown on that for 10-40% speedup on the common case is worth it.
These percentages can eventually be thought of as direct FPS improvements (40% more FPS) once I split tty stream processing and rendering into separate threads and remove the FPS limiter that exists today.
2022-09-12 12:01:26 -07:00
Mitchell Hashimoto
b694afa425
update TODO
2022-09-12 11:39:20 -07:00
Mitchell Hashimoto
662b656218
implement LRU row GPU cell caching
2022-09-12 11:28:47 -07:00
Mitchell Hashimoto
3e27120e8c
lru resize
2022-09-12 11:01:22 -07:00
Mitchell Hashimoto
4f6c67fe9d
add LRU
2022-09-12 10:21:18 -07:00
Mitchell Hashimoto
8995e74e23
rows are dirty when initialized
2022-09-10 11:01:40 -07:00
Mitchell Hashimoto
08b7a866b6
Screen dirty tracking
2022-09-10 10:59:57 -07:00
Mitchell Hashimoto
d7d372124b
update to stage3 zig with -fstage1
2022-09-08 13:46:05 -07:00
Mitchell Hashimoto
97aef76501
avoid large shaper buffer allocation on every frame
2022-09-07 20:27:36 -07:00
Mitchell Hashimoto
98dff5a163
better handling of combination characters
2022-09-07 20:10:06 -07:00
Mitchell Hashimoto
d42c99b6be
Merge pull request #12 from mitchellh/ligs
...
Ligatures v1 and VS15/VS16 Emoji Support
2022-09-07 16:18:58 -07:00
Mitchell Hashimoto
8d90292cb2
remove font conversion stuff
2022-09-07 16:17:41 -07:00
Mitchell Hashimoto
d951e40553
update TODO
2022-09-07 16:15:38 -07:00
Mitchell Hashimoto
54d47e8390
update TODO
2022-09-07 16:10:27 -07:00
Mitchell Hashimoto
278d9ad9d6
add tracing
2022-09-07 16:10:16 -07:00
Mitchell Hashimoto
90e4d12f79
only scale fonts to height
2022-09-07 15:59:23 -07:00
Mitchell Hashimoto
c1bb6450b0
fix some emoji sizing
2022-09-07 14:41:37 -07:00
Mitchell Hashimoto
85dff335f1
much more accurate run splits and cell widths in runs
2022-09-07 10:30:40 -07:00
Mitchell Hashimoto
3f1942223b
only test presentation VS15/16 if directly adjacent to codepoint
2022-09-06 14:26:43 -07:00
Mitchell Hashimoto
da7843e8b4
test shaping a long emoji
2022-09-06 14:25:29 -07:00
Mitchell Hashimoto
3754de3b95
test very long emoji
2022-09-06 14:21:07 -07:00
Mitchell Hashimoto
f40eb3663a
kind of handle VS15/16 better, its not blank anymore, but its wrong
2022-09-06 13:56:20 -07:00
Mitchell Hashimoto
e326bc4921
fonts are presentation format aware (text vs emoji)
2022-09-06 13:30:29 -07:00
Mitchell Hashimoto
302889bfb3
font don't include convert
2022-09-05 22:53:29 -07:00
Mitchell Hashimoto
0d2c03c21c
Font face handles zero-width glyphs (weird but happens)
2022-09-05 22:53:00 -07:00
Mitchell Hashimoto
90d250a3ba
Rebase
2022-09-05 11:41:40 -07:00
Mitchell Hashimoto
480d262bc1
Calculate grid_width properly, use that instead of wide mask in shader
2022-09-05 11:38:53 -07:00
Mitchell Hashimoto
3231b84927
Ligatures
...
This introduces a naive first pass at integrating ligatures. The basic
ligatures (such as "==" in some fonts) work great. Skin-toned emoji are
struggling a bit.
This isn't the most performant way to do this, either, and I plan on
improving that.
2022-09-05 11:38:52 -07:00
Mitchell Hashimoto
d839257c04
Merge pull request #11 from mitchellh/graphemes
...
Graphemes and ZWJs
2022-09-05 11:36:38 -07:00
Mitchell Hashimoto
9e8d00f140
attach zero-width joiners to cells
2022-09-05 11:32:14 -07:00
Mitchell Hashimoto
8ef31aaaf9
Disable
2022-09-05 11:22:29 -07:00
Mitchell Hashimoto
802f230fa2
handle graphemes with more than 1 joiner
2022-09-05 10:35:22 -07:00
Mitchell Hashimoto
47242ad12a
test writing graphemes
2022-09-05 10:29:52 -07:00