forked from AuroraMiddleware/gtk
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.
This commit is contained in:
parent
a2c3c65729
commit
3c6c07e94d
@ -215,6 +215,8 @@ render_glyph (const GskGLGlyphAtlas *atlas,
|
||||
PangoGlyphString glyph_string;
|
||||
PangoGlyphInfo glyph_info;
|
||||
int surface_width, surface_height;
|
||||
int stride;
|
||||
unsigned char *data;
|
||||
|
||||
scaled_font = pango_cairo_font_get_scaled_font ((PangoCairoFont *)key->font);
|
||||
if (G_UNLIKELY (!scaled_font || cairo_scaled_font_status (scaled_font) != CAIRO_STATUS_SUCCESS))
|
||||
@ -228,7 +230,11 @@ render_glyph (const GskGLGlyphAtlas *atlas,
|
||||
if (surface_width > atlas->width || surface_height > atlas->height)
|
||||
return FALSE;
|
||||
|
||||
surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, surface_width, surface_height);
|
||||
stride = cairo_format_stride_for_width (CAIRO_FORMAT_ARGB32, surface_width);
|
||||
data = g_malloc0 (stride * surface_height);
|
||||
surface = cairo_image_surface_create_for_data (data, CAIRO_FORMAT_ARGB32,
|
||||
surface_width, surface_height,
|
||||
stride);
|
||||
cairo_surface_set_device_scale (surface, key->scale / 1024.0, key->scale / 1024.0);
|
||||
|
||||
cr = cairo_create (surface);
|
||||
@ -255,8 +261,7 @@ render_glyph (const GskGLGlyphAtlas *atlas,
|
||||
region->width = cairo_image_surface_get_width (surface);
|
||||
region->height = cairo_image_surface_get_height (surface);
|
||||
region->stride = cairo_image_surface_get_stride (surface);
|
||||
region->data = g_memdup (cairo_image_surface_get_data (surface),
|
||||
region->stride * region->height * sizeof (guchar));
|
||||
region->data = data;
|
||||
region->x = (gsize)(value->tx * atlas->width);
|
||||
region->y = (gsize)(value->ty * atlas->height);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user