summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2019-10-22 13:23:06 +0000
committerMatthias Clasen <mclasen@redhat.com>2019-10-22 13:23:06 +0000
commitffaf26fdf5d8f2d6b88a50b175479cc45969ba0a (patch)
treec59fb03919d1f9ffb8cc8cfa7b3756327db8a61a
parent44137574a191dc6994b66e66be0b25f4fa2ff207 (diff)
parent5b508ea94a8a29d5a1cc515a7fc8251b17442b34 (diff)
downloadgtk+-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.c21
-rw-r--r--gsk/gl/gskglglyphcache.c23
-rw-r--r--gsk/gl/gskglglyphcacheprivate.h3
-rw-r--r--gsk/gl/gskgliconcache.c16
-rw-r--r--gsk/gl/gskglrenderer.c67
-rw-r--r--gsk/gskrendernodeimpl.c35
-rw-r--r--gsk/gskrendernodeprivate.h6
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