Timm Bäder
dbc49e7742
transform: Fix identity transform fast paths
...
Returning an extra ref will cause leaks later.
2019-07-07 07:24:00 +02:00
Timm Bäder
3bc3e140dd
transform: Add transform_bounds fast path for 2D_AFFINE transforms
...
E.g. anything involving a scale. This is important when e.g. scrolling
in the node list in the recorder, which scales every recorded node down
to fit in the list.
2019-06-29 09:49:38 +02:00
Timm Bäder
6b42e5b433
gl renderer: Fix push/pop modelview behavior
2019-06-29 08:57:27 +02:00
Timm Bäder
99c01607f1
gl renderer: Remove some dead code
2019-06-29 08:53:36 +02:00
Timm Bäder
071748592d
gl renderer: Don't upload GL textures into the icon cache
2019-06-29 07:15:43 +02:00
Timm Bäder
8dd74eac2e
transform: Add skew parsing
2019-06-29 07:15:43 +02:00
Benjamin Otte
4a19bab5b3
gsk: Fix annotations for ref()/unref()
2019-06-18 15:58:49 -04:00
Matthias Clasen
c168116e64
Merge branch 'wip/matthiasc/shared-glyph-cache' into 'master'
...
Share the glyph cache
See merge request GNOME/gtk!912
2019-06-05 12:10:24 +00:00
Matthias Clasen
0dcb71722a
Cosmetics
...
Rename some arguments, since atlases->atlases is awful.
2019-06-05 12:03:39 +00:00
Matthias Clasen
d90143d09c
texture atlas: Add a missing initialization
...
Pointed out by Timm.
2019-06-05 12:00:53 +00:00
Matthias Clasen
69016825aa
render node: Optimize type checks
...
The GSK_IS_RENDER_NODE macro is a bit silly,
and not worth having in g_return_if_fail checks
in trivial getters.
2019-06-05 04:25:43 +00:00
Matthias Clasen
e961943508
Fix a refcounting mishap
...
We were missing a ref, causing caches to go missing
when a window is opened twice.
2019-06-05 02:49:07 +00:00
Matthias Clasen
054b5216a1
Remove debug spew
2019-06-04 23:11:18 +00:00
Timm Bäder
ecb353f4af
Consider all offscreen drawings for the icon cache
2019-06-04 23:00:02 +00:00
Matthias Clasen
259bbdcb09
Share glyph and icon caches
...
Use the same texture atlases to back both
the glyph and icon caches, and unify their
sizes and management. Store big glyphs
in separate textures, so all atlases have
the same size. Tweak some of the eviction
parameters.
We share the caches across all GL contexts
on a display, unless the GSK_NO_SHARED_CACHES
env var is set.
2019-06-04 23:00:02 +00:00
Matthias Clasen
7293fd517e
glyph cache: Stop storing driver and render
...
This is the first step towards sharing glyph
caches across renderers.
2019-06-04 23:00:02 +00:00
Matthias Clasen
c9cea36b37
gl: Use pad-extend for icon cache
...
Repeat the border pixels to avoid artifacts from
linear scaling.
2019-06-04 23:00:02 +00:00
Matthias Clasen
4020399439
gl: Use linear scaling for atlases
2019-06-04 23:00:01 +00:00
Matthias Clasen
efc31161f0
gl: Allow setting min/mag filter on textures
...
This will be used in the future.
Adapt all callers to pass GL_NEAREST for now.
2019-06-04 23:00:01 +00:00
Matthias Clasen
102cc1c8d3
gl: Add 1 pixel of padding in the icon cache
2019-06-04 23:00:01 +00:00
Matthias Clasen
2529385fe4
glyph cache: Reinstate 1 pixel padding
...
This is necessary to prevent bleeding.
2019-06-04 23:00:01 +00:00
Matthias Clasen
f37274dbb0
gl: Don't leak texture atlases
...
We need to free the texture atlases, and the
textures backing them.
2019-06-04 23:00:01 +00:00
Matthias Clasen
a3757936c1
gl: Free icon data
2019-06-04 23:00:01 +00:00
Matthias Clasen
adb5df020c
glyph cache: Clarify message
...
We have different kinds of caches now.
2019-06-04 23:00:01 +00:00
Timm Bäder
cf4ff56ca5
gl renderer: Add & use icon cache
...
Upload small icons all to the same texture atlas.
2019-06-04 23:00:01 +00:00
Timm Bäder
e2ffad7b07
glimage: Only support uploading one region
2019-06-04 23:00:01 +00:00
Timm Bäder
b74bb90c7d
gl renderer: Move texture atlas into its own file
...
We want to reuse the code later.
2019-06-04 23:00:01 +00:00
Timm Bäder
66b081dc9c
glglyphcache: Use stb_rect_pack for better glyph packing
2019-06-04 22:42:00 +00:00
Timm Bäder
4b3986ae1f
rendernodeimpl: Inline container_node_get_bounds into _new
...
It's the only caller of the function and we can avoid a second loop over
all child nodes this way.
2019-06-04 16:48:08 +02:00
Matthias Clasen
206970c1e8
Merge branch 'transform-tests' into 'master'
...
Transform tests
See merge request GNOME/gtk!910
2019-06-03 16:41:17 +00:00
Matthias Clasen
4ed57449ba
gsk: Fix printing of identity transforms
...
These need to print as "none", otherwise
the parser does not accept them.
2019-06-03 16:20:38 +00:00
Matthias Clasen
d93fb5a3fa
Cosmetics
...
Fix up a variable name mismatch in GskTransform docs.
2019-06-03 16:15:16 +00:00
Benjamin Otte
4efa457a63
Merge branch 'for-master' into 'master'
...
rendernodeparser: Handle Cairo being stupid
See merge request GNOME/gtk!909
2019-06-03 15:45:20 +00:00
Timm Bäder
a1161456ff
GskTransform: NULL is a valid transform
2019-06-03 17:36:31 +02:00
Benjamin Otte
d81cf5a443
rendernodeparser: Handle Cairo being stupid
...
Cairo writes to finished streams, so we have to make sure to keep the
stream around to allow it to do that.
2019-06-03 17:22:11 +02:00
Timm Bäder
a0cb68283d
gl renderer: Dont' memcmp() a GskTransform
2019-06-03 17:07:26 +02:00
Timm Bäder
d228f4bb76
gl renderer: Don't ref transform twice
...
That's gonna leak it otherwise.
2019-06-03 17:03:02 +02:00
Timm Bäder
3a49c0eb2f
glyphcache: Don't leak hashtables
2019-06-03 17:03:02 +02:00
Timm Bäder
05ca772631
GskTransform: Ignore identity transforms
...
We often end up with e.g. a scale of 1 or a translation by 0/0. Ignore
those transforms since they don't do anything.
2019-06-03 17:03:02 +02:00
Timm Bäder
efe9bba343
gl renderer: Ref transform before using it
...
Fixes #1929
2019-06-03 17:03:02 +02:00
Timm Bäder
fb1f929c38
gl renderer: Dont' unnecessarily to_matrix transforms
2019-06-03 17:03:02 +02:00
Matthias Clasen
3c6c07e94d
gl: Avoid a memdup in glyph upload
...
We don't need to dup the memory here if we
set up the image surface properly. This won't
matter for most glyphs, but some of them can
be big.
2019-06-03 02:47:52 +00:00
Matthias Clasen
e0803f039f
gl: Fix glyph cache aging
...
The logic here seems faulty. We want to keep
a timestamp that tells us when the glyph was
last used, so always update the timestamp.
And whenever we use a glyph, it turns 'young'
again, so remove it from the old pixels
accounting.
The (MAX_AGE, MAX_AGE+CHECK_INTERVAL) interval
is only relevant to prevent us from turning
a cached glyph old more than once, and that
is already taken care of.
2019-06-03 02:09:04 +00:00
Matthias Clasen
3059d76b4c
Add code to dump out the glyph caches
2019-06-03 02:09:04 +00:00
Matthias Clasen
0a09b8dca7
gl: Improve cache dropping code
...
There was a TODO here to avoid iterating the
glyphs multiple times, so avoid that. And
actually log the number of glyphs that was dropped.
2019-06-03 02:09:04 +00:00
Matthias Clasen
ad2a1c92ce
gl: Improve glyph cache logging
...
Use g_message to be consistent, and make the
message fit a line.
2019-06-03 02:09:04 +00:00
Matthias Clasen
fd4182f5c5
gl: Log creation of glyph caches
...
Now that they can be of different sizes, this
is somewhat interesting.
2019-06-03 02:09:04 +00:00
Matthias Clasen
a64dfb1dfc
gl: Make the glyph cache survive big glyphs
...
Create an extra atlas of just the right size for
each huge glyph. Not pretty, but works.
2019-06-03 02:08:36 +00:00
Benjamin Otte
7e9cb07a92
Merge branch 'for-master' into 'master'
...
For master
See merge request GNOME/gtk!903
2019-06-03 00:22:40 +00:00
Benjamin Otte
5a0c8805fc
transform: Coalesce similar transforms
...
If somebody does a transform like
scale(5) scale(10) translate(1,1) translate(5,0)
store it instead as
scale(50) translate(6,1)
This way, less memory is consumed and transforms are easier to read.
In particular, this simplifies the typical transforms we do in GTK,
which are just one translation after another.
2019-06-02 21:18:56 +02:00