mirror of
https://github.com/brl/mutter.git
synced 2024-11-25 01:20:42 -05:00
background-actor: Mipmap background texture rendering
gnome-shell displays workspace previews at one tenth scale. That's a
few binary orders of magnitude so even using a LINEAR filter was
resulting in visible jaggies. Now we apply mipmapping so they appear
smooth.
As an added bonus, the mipmaps used occupy roughly 1% the memory of
the original image (0.1 x 0.1 = 0.01) so they actually fit into GPU/CPU
caches now and rendering performance is improved. There's no need to
traverse the original texture which at 4K resolution occupies 33MB,
only a 331KB mipmap.
In my case this reduces the render time for the overview by ~10%.
Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/1416
Origin: https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1347
(cherry picked from commit 32dbcd9352
)
This commit is contained in:
parent
eae21f01dd
commit
3dab5120ed
@ -354,7 +354,7 @@ setup_pipeline (MetaBackgroundActor *self,
|
|||||||
guint8 opacity;
|
guint8 opacity;
|
||||||
float color_component;
|
float color_component;
|
||||||
CoglFramebuffer *fb;
|
CoglFramebuffer *fb;
|
||||||
CoglPipelineFilter filter;
|
CoglPipelineFilter min_filter, mag_filter;
|
||||||
|
|
||||||
opacity = clutter_actor_get_paint_opacity (CLUTTER_ACTOR (self));
|
opacity = clutter_actor_get_paint_opacity (CLUTTER_ACTOR (self));
|
||||||
if (opacity < 255)
|
if (opacity < 255)
|
||||||
@ -455,11 +455,17 @@ setup_pipeline (MetaBackgroundActor *self,
|
|||||||
actor_pixel_rect->width,
|
actor_pixel_rect->width,
|
||||||
actor_pixel_rect->height,
|
actor_pixel_rect->height,
|
||||||
NULL, NULL))
|
NULL, NULL))
|
||||||
filter = COGL_PIPELINE_FILTER_NEAREST;
|
{
|
||||||
|
min_filter = COGL_PIPELINE_FILTER_NEAREST;
|
||||||
|
mag_filter = COGL_PIPELINE_FILTER_NEAREST;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
filter = COGL_PIPELINE_FILTER_LINEAR;
|
{
|
||||||
|
min_filter = COGL_PIPELINE_FILTER_LINEAR_MIPMAP_NEAREST;
|
||||||
|
mag_filter = COGL_PIPELINE_FILTER_LINEAR;
|
||||||
|
}
|
||||||
|
|
||||||
cogl_pipeline_set_layer_filters (self->pipeline, 0, filter, filter);
|
cogl_pipeline_set_layer_filters (self->pipeline, 0, min_filter, mag_filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
Reference in New Issue
Block a user