diff options
author | Matthias Clasen <mclasen@redhat.com> | 2019-10-22 13:23:06 +0000 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2019-10-22 13:23:06 +0000 |
commit | ffaf26fdf5d8f2d6b88a50b175479cc45969ba0a (patch) | |
tree | c59fb03919d1f9ffb8cc8cfa7b3756327db8a61a | |
parent | 44137574a191dc6994b66e66be0b25f4fa2ff207 (diff) | |
parent | 5b508ea94a8a29d5a1cc515a7fc8251b17442b34 (diff) | |
download | gtk+-ffaf26fdf5d8f2d6b88a50b175479cc45969ba0a.tar.gz |
Merge branch 'readonly-all-the-things' into 'master'
Readonly all the things
See merge request GNOME/gtk!1145
-rw-r--r-- | gsk/gl/gskgldriver.c | 21 | ||||
-rw-r--r-- | gsk/gl/gskglglyphcache.c | 23 | ||||
-rw-r--r-- | gsk/gl/gskglglyphcacheprivate.h | 3 | ||||
-rw-r--r-- | gsk/gl/gskgliconcache.c | 16 | ||||
-rw-r--r-- | gsk/gl/gskglrenderer.c | 67 | ||||
-rw-r--r-- | gsk/gskrendernodeimpl.c | 35 | ||||
-rw-r--r-- | gsk/gskrendernodeprivate.h | 6 |
7 files changed, 21 insertions, 150 deletions
diff --git a/gsk/gl/gskgldriver.c b/gsk/gl/gskgldriver.c index 321681d507..3eede927ba 100644 --- a/gsk/gl/gskgldriver.c +++ b/gsk/gl/gskgldriver.c @@ -46,8 +46,8 @@ struct _GskGLDriver Fbo default_fbo; - GHashTable *textures; - GHashTable *pointer_textures; + GHashTable *textures; /* texture_id -> Texture */ + GHashTable *pointer_textures; /* pointer -> texture_id */ const Texture *bound_source_texture; @@ -554,21 +554,12 @@ gsk_gl_driver_get_texture_for_pointer (GskGLDriver *self, if (id != 0) { - GHashTableIter iter; - gpointer value_p; - /* Find the texture in self->textures and mark it used */ + Texture *t; - g_hash_table_iter_init (&iter, self->textures); - while (g_hash_table_iter_next (&iter, NULL, &value_p)) - { - Texture *t = value_p; + t = g_hash_table_lookup (self->textures, GINT_TO_POINTER (id)); - if (t->texture_id == id) - { - t->in_use = TRUE; - break; - } - } + if (t != NULL) + t->in_use = TRUE; } return id; diff --git a/gsk/gl/gskglglyphcache.c b/gsk/gl/gskglglyphcache.c index 07b6389915..e7c366ac66 100644 --- a/gsk/gl/gskglglyphcache.c +++ b/gsk/gl/gskglglyphcache.c @@ -262,7 +262,13 @@ gsk_gl_glyph_cache_lookup_or_add (GskGLGlyphCache *cache, if (value) { - gsk_gl_glyph_cache_entry_validate (cache, value); + if (value->atlas && !value->used) + { + gsk_gl_texture_atlas_mark_used (value->atlas, value->draw_width, value->draw_height); + value->used = TRUE; + } + value->accessed = TRUE; + *cached_glyph_out = value; return; } @@ -366,19 +372,4 @@ gsk_gl_glyph_cache_begin_frame (GskGLGlyphCache *self, } GSK_NOTE(GLYPH_CACHE, if (dropped > 0) g_message ("Dropped %d glyphs", dropped)); - - if (dropped > 0) - self->atlas_timestamp++; -} - -void -gsk_gl_glyph_cache_entry_validate (GskGLGlyphCache *cache, - GskGLCachedGlyph *value) -{ - value->accessed = TRUE; - if (value->atlas && !value->used) - { - gsk_gl_texture_atlas_mark_used (value->atlas, value->draw_width, value->draw_height); - value->used = TRUE; - } } diff --git a/gsk/gl/gskglglyphcacheprivate.h b/gsk/gl/gskglglyphcacheprivate.h index 492890e603..d66b251a44 100644 --- a/gsk/gl/gskglglyphcacheprivate.h +++ b/gsk/gl/gskglglyphcacheprivate.h @@ -16,7 +16,6 @@ typedef struct GskGLTextureAtlases *atlases; int timestamp; - int atlas_timestamp; /* incremented whenever an atlas is dropped */ } GskGLGlyphCache; struct _CacheKeyData @@ -89,7 +88,5 @@ void gsk_gl_glyph_cache_lookup_or_add (GskGLGlyphCache GlyphCacheKey *lookup, GskGLDriver *driver, const GskGLCachedGlyph **cached_glyph_out); -void gsk_gl_glyph_cache_entry_validate (GskGLGlyphCache *cache, - GskGLCachedGlyph *entry); #endif diff --git a/gsk/gl/gskgliconcache.c b/gsk/gl/gskgliconcache.c index b23325ff5c..2f339eaccb 100644 --- a/gsk/gl/gskgliconcache.c +++ b/gsk/gl/gskgliconcache.c @@ -10,10 +10,7 @@ static void icon_data_free (gpointer p) { - IconData *icon_data = p; - - gdk_texture_clear_render_data (icon_data->source_texture); - g_object_unref (icon_data->source_texture); + g_object_unref (((IconData *)p)->source_texture); g_free (p); } @@ -99,7 +96,7 @@ gsk_gl_icon_cache_begin_frame (GskGLIconCache *self, gsk_gl_texture_atlas_mark_unused (icon_data->atlas, width + 2, height + 2); icon_data->used = FALSE; } - } + } icon_data->accessed = FALSE; } @@ -113,12 +110,7 @@ gsk_gl_icon_cache_lookup_or_add (GskGLIconCache *self, GdkTexture *texture, const IconData **out_icon_data) { - IconData *icon_data; - - icon_data = gdk_texture_get_render_data (texture, self); - - if (!icon_data) - icon_data = g_hash_table_lookup (self->icons, texture); + IconData *icon_data = g_hash_table_lookup (self->icons, texture); if (icon_data) { @@ -234,8 +226,6 @@ gsk_gl_icon_cache_lookup_or_add (GskGLIconCache *self, gdk_gl_context_pop_debug_group (gdk_gl_context_get_current ()); - gdk_texture_set_render_data (texture, self, icon_data, NULL); - *out_icon_data = icon_data; cairo_surface_destroy (surface); diff --git a/gsk/gl/gskglrenderer.c b/gsk/gl/gskglrenderer.c index 5c6d8b3ad1..de9ccf1539 100644 --- a/gsk/gl/gskglrenderer.c +++ b/gsk/gl/gskglrenderer.c @@ -535,51 +535,6 @@ render_fallback_node (GskGLRenderer *self, ops_draw (builder, offscreen_vertex_data); } -typedef struct { - int timestamp; - int stored; - GskGLCachedGlyph *glyphs[]; -} TextRenderData; - -static inline TextRenderData * -get_render_data (GskRenderNode *node, - GskGLGlyphCache *cache) -{ - TextRenderData *data; - int num_glyphs; - - num_glyphs = gsk_text_node_get_num_glyphs (node); - data = gsk_text_node_get_render_data (node, cache); - if (data) - { - if (data->timestamp < cache->atlas_timestamp) - { - memset (data->glyphs, 0, sizeof (gpointer) * num_glyphs); - data->timestamp = cache->atlas_timestamp; - } - } - else - { - data = g_new0 (TextRenderData, sizeof (TextRenderData) + sizeof (gpointer) * num_glyphs); - data->timestamp = cache->atlas_timestamp; - } - - return data; -} - -static inline void -set_render_data (GskRenderNode *node, - GskGLGlyphCache *cache, - TextRenderData *data) -{ - if (!data->stored) - { - data->stored = 1; - if (!gsk_text_node_set_render_data (node, cache, data)) - g_free (data); - } -} - static inline void render_text_node (GskGLRenderer *self, GskRenderNode *node, @@ -597,7 +552,6 @@ render_text_node (GskGLRenderer *self, float x = offset->x + builder->dx; float y = offset->y + builder->dy; GlyphCacheKey lookup; - TextRenderData *render_data; /* If the font has color glyphs, we don't need to recolor anything */ if (!force_color && gsk_text_node_has_color_glyphs (node)) @@ -610,8 +564,6 @@ render_text_node (GskGLRenderer *self, ops_set_color (builder, color); } - render_data = get_render_data (node, self->glyph_cache); - memset (&lookup, 0, sizeof (CacheKeyData)); lookup.data.font = (PangoFont *)font; lookup.data.scale = (guint) (text_scale * 1024); @@ -633,19 +585,12 @@ render_text_node (GskGLRenderer *self, cx = (float)(x_position + gi->geometry.x_offset) / PANGO_SCALE; cy = (float)(gi->geometry.y_offset) / PANGO_SCALE; - glyph = render_data->glyphs[i]; - if (!glyph) - { - glyph_cache_key_set_glyph_and_shift (&lookup, gi->glyph, x + cx, y + cy); + glyph_cache_key_set_glyph_and_shift (&lookup, gi->glyph, x + cx, y + cy); - gsk_gl_glyph_cache_lookup_or_add (self->glyph_cache, - &lookup, - self->gl_driver, - &glyph); - render_data->glyphs[i] = (GskGLCachedGlyph *)glyph; - } - - gsk_gl_glyph_cache_entry_validate (self->glyph_cache, render_data->glyphs[i]); + gsk_gl_glyph_cache_lookup_or_add (self->glyph_cache, + &lookup, + self->gl_driver, + &glyph); if (glyph->texture_id == 0) goto next; @@ -675,8 +620,6 @@ render_text_node (GskGLRenderer *self, next: x_position += gi->geometry.width; } - - set_render_data (node, self->glyph_cache, render_data); } static inline void diff --git a/gsk/gskrendernodeimpl.c b/gsk/gskrendernodeimpl.c index 7625c68071..8c7be01555 100644 --- a/gsk/gskrendernodeimpl.c +++ b/gsk/gskrendernodeimpl.c @@ -3414,9 +3414,6 @@ struct _GskTextNode GdkRGBA color; graphene_point_t offset; - gpointer render_key; - gpointer render_data; - guint num_glyphs; PangoGlyphInfo glyphs[]; }; @@ -3426,7 +3423,6 @@ gsk_text_node_finalize (GskRenderNode *node) { GskTextNode *self = (GskTextNode *) node; - g_free (self->render_data); g_object_unref (self->font); } @@ -3549,8 +3545,6 @@ gsk_text_node_new (PangoFont *font, self->has_color_glyphs = font_has_color_glyphs (font); self->color = *color; self->offset = *offset; - self->render_key = NULL; - self->render_data = NULL; self->num_glyphs = glyphs->num_glyphs; memcpy (self->glyphs, glyphs->glyphs, sizeof (PangoGlyphInfo) * glyphs->num_glyphs); @@ -3631,35 +3625,6 @@ gsk_text_node_get_offset (GskRenderNode *node) return &self->offset; } -gboolean -gsk_text_node_set_render_data (GskRenderNode *node, - gpointer key, - gpointer data) -{ - GskTextNode *self = (GskTextNode *) node; - - if (self->render_key != NULL) - return FALSE; - - self->render_key = key; - self->render_data = data; - - return TRUE; -} - -gpointer -gsk_text_node_get_render_data (GskRenderNode *node, - gpointer key) -{ - GskTextNode *self = (GskTextNode *) node; - - if (self->render_key != key) - return NULL; - - return self->render_data; -} - - /*** GSK_BLUR_NODE ***/ typedef struct _GskBlurNode GskBlurNode; diff --git a/gsk/gskrendernodeprivate.h b/gsk/gskrendernodeprivate.h index 9ab3358393..2ced79738b 100644 --- a/gsk/gskrendernodeprivate.h +++ b/gsk/gskrendernodeprivate.h @@ -46,12 +46,6 @@ void gsk_render_node_diff (GskRenderNode *nod void gsk_render_node_diff_impossible (GskRenderNode *node1, GskRenderNode *node2, cairo_region_t *region); -gboolean gsk_text_node_set_render_data (GskRenderNode *node, - gpointer key, - gpointer data); -gpointer gsk_text_node_get_render_data (GskRenderNode *node, - gpointer key); - G_END_DECLS |