Commit graph

45 commits

Author SHA1 Message Date
tamewild
f82094703e
iterate on visible runs within textbounds (#108) 2024-07-28 09:04:16 -02:30
Pēteris Pakalns
0fdbd90c55
Simplify rendering pipeline, reduce gpu memory usage, remove duplicated data (#86) 2024-05-26 22:52:30 -02:30
Héctor Ramón
b411ea71e7
Introduce explicit Viewport sharing (#96) 2024-05-08 11:47:58 -02:30
Héctor Ramón
5aed9e1477
Support sharing Pipeline state between TextAtlas (#95)
* Support sharing `Pipeline` state between `TextAtlas`

* Keep using `Vec` for pipeline cache

* Use `OnceCell` to keep `Pipeline` private

* Revert "Use `OnceCell` to keep `Pipeline` private"

This reverts commit 4112732b1734a3bb6b915d2103e699ef549b77c1.

* Rename `Pipeline` type to `Cache`
2024-05-08 11:09:19 -02:30
Héctor Ramón Jiménez
4f24305ac5 Reuse Vec allocations in TextRenderer 2024-03-29 21:24:16 -02:30
Pēteris Pakalns
f95e66f612
Support multi viewport rendering with reusable text atlas (#88) 2024-03-25 21:55:57 -02:30
grovesNL
bfb07147cd Don't convert web text colors to linear 2024-01-15 21:32:22 -03:30
TheEggShark
941309aed2 fixed cargo fmt errors 2023-12-19 12:28:19 -03:30
TheEggShark
f13c5f024e added clippy suggestions 2023-12-19 12:28:19 -03:30
Héctor Ramón Jiménez
81dedbd042 Implement subpixel glyph positioning and scaling
The latest `cosmic-text` release performs bucketing calculations after
layouting. This allows us to provide proper subpixel offsets, as well as
scale any buffer thanks to its linear layout properties.

See https://github.com/pop-os/cosmic-text/pull/143.
2023-07-11 00:18:25 -02:30
Héctor Ramón Jiménez
595e09a497 Take an IntoIterator instead of Iterator in prepare methods 2023-07-10 15:25:47 -02:30
Héctor Ramón Jiménez
1469768013 Iterate over text areas only once in prepare 2023-07-10 15:25:47 -02:30
Héctor Ramón Jiménez
0857bef584 Take an Iterator of TextArea in prepare 2023-07-10 15:25:47 -02:30
Héctor Ramón Jiménez
f64771c2c3 Grow internal packer and re-upload glyphs automatically 2023-07-04 14:54:05 -02:30
Héctor Ramón Jiménez
a74ce29c1a Implement growing logic for TextAtlas
The `TextAtlas` will have an initial size of `256` (we could make this
configurable) and `try_allocate` will keep track of the glyphs in use
in the current frame, returning `None` when the LRU glyph is in use.

In that case, `TextRenderer::prepare` will return
`PrepareError::AtlasFull` with the `ContentType` of the atlas that is
full. The user of the library can then call `TextAtlas::grow` with the
provided `ContentType` to obtain a bigger atlas (by `256`).

A `TextAtlas::grow` call clears the whole atlas and, as a result, all of
the `prepare` calls need to be repeated in a frame until they all
succeed. Overall, the atlas will rarely need to grow and so the calls
will not need to be repated often.

Finally, the user needs to call `TextAtlas::trim` at the end of the
frame. This allows us to clear the glyphs in use collection in the atlas. Maybe
there is a better way to model this in an API that forces the user to
trim the atlas (e.g. make `trim` return a new type and changing `prepare` and `render` to take that type instead).
2023-07-04 14:54:05 -02:30
Héctor Ramón Jiménez
9f82af4f7d Introduce ColorMode for Atlas 2023-06-06 11:56:02 -02:30
Héctor Ramón Jiménez
80e8465af6 Update wgpu to 0.16 2023-05-03 13:29:20 -02:30
Héctor Ramón Jiménez
19d704f0c9 Make render take an immutable self 2023-03-27 23:20:26 -02:30
Héctor Ramón Jiménez
2af2f357c5 Update cosmic-text to latest 2023-03-27 23:02:28 -02:30
Héctor Ramón Jiménez
ea5f122f78 Remove potentially huge texture_pending from InnerAtlas
Instead, issue a `write_texture` for every glyph that isn't present in
the atlas. I think this should be fine, since cache eviction should be
rare and, therefore, uploads will be too.

The result here is lower memory usage for bigger caches.
2023-03-27 23:00:19 -02:30
Héctor Ramón Jiménez
1f31586c55 Set default_color per TextArea 2023-02-26 23:30:30 -03:30
grovesNL
c25f394c16 Allow depth to be attached to text using metadata 2023-02-15 07:54:31 -03:30
grovesNL
74e9aa37a1 Set renderer multisample and depth-stencil state 2023-02-15 07:54:31 -03:30
Héctor Ramón Jiménez
da4bb4af5c Use lru for glyph caching
I noticed that the `RecentlyUsed` map was actually a `RecentlyInserted`
map. This caused panics when trying to reduce the initial texture atlas size and
dynamically increase it (coming in another PR!).
2023-02-08 00:49:37 -03:30
grovesNL
8aeb9f16bf Remove unnecessary cast 2023-01-29 22:14:55 -03:30
grovesNL
288cd89cf8 Simplify re-exports paths 2023-01-29 22:11:54 -03:30
grovesNL
658fcf4d6f Separate text area lifetimes 2023-01-29 22:11:54 -03:30
grovesNL
07b04f511a Update example to show emojis and clipping 2023-01-29 22:11:54 -03:30
grovesNL
8c8cfba093 Add clipping back 2023-01-29 22:11:54 -03:30
grovesNL
ba52cbdba6 Buffer doesn't need to be mutable anymore 2023-01-29 22:11:54 -03:30
Joshua Groves
3a0e965675 Split color and mask atlases apart 2023-01-29 22:11:54 -03:30
Joshua Groves
6cf10bba8d Fix alpha blending for emojis 2023-01-29 22:11:54 -03:30
grovesNL
8a1153039e Update to latest cosmic 2023-01-29 22:11:54 -03:30
grovesNL
4c1a83548e Use default font color and remove Color 2023-01-29 22:11:54 -03:30
grovesNL
56bf0d759f Update to latest cosmic-text 2023-01-29 22:11:54 -03:30
grovesNL
cb68955045 Use 4 channel atlas for emojis 2023-01-29 22:11:54 -03:30
grovesNL
47fa03d079 Allow negative offsets 2023-01-29 22:11:54 -03:30
grovesNL
dcdb250e19 Use arabic.txt example and get_image_uncached 2023-01-29 22:11:54 -03:30
grovesNL
7fe35bdce3 Update to latest cosmic-text 2023-01-29 22:11:54 -03:30
grovesNL
75fc8f978f Start cosmic-text implementation 2023-01-29 22:11:54 -03:30
grovesNL
2a01a1b2e0 Handle negative glyph positions correctly 2022-11-29 14:33:12 -03:30
grovesNL
fa03455457 Allow borrowed layouts for prepare
Allows either `&[layout, overflow]` or `&[&layout, overflow]`
2022-10-21 22:02:43 -02:30
grovesNL
296c99f059 Add documentation to all public types
Fixes #11
2022-10-18 13:25:24 -02:30
grovesNL
14c634c8aa Use trunc instead of round
We can allow this to be controlled later on, but `trunc` helps to avoid
text jitter during screen resolution changes for now.
2022-10-18 12:54:16 -02:30
Andrew Wheeler(Genusis)
4075536745 Merge #19 2022-10-18 12:52:00 -02:30