mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-28 14:31:10 +00:00
496c8f4a11
The current implementation of the glyph cache deals with atlases by padding them with 1 pixel at the beginning, at the end, and between each glyph. That's cool and all, however, there's a very subtle problem with this approach: the contents of the atlas are garbage, so this padding is filled with garbage memory! Rework the Vulkan glyph cache to draw each and every glyph in a surface that has 1 pixel border of padding around it. Ensure the surface is completely black by drawing a rectangle before handing it to Pango to draw the glyph. Update tx and ty to pick the texture position adjusted to the 1 pixel padding. The atlas now starts at position (0, 0), since each glyph individually contains its own padding. To improve legibility, add a PADDING define and use it everywhere.
53 lines
1.9 KiB
C
53 lines
1.9 KiB
C
#pragma once
|
|
|
|
#include "gskvulkanrenderer.h"
|
|
#include "gskvulkanimageprivate.h"
|
|
|
|
G_BEGIN_DECLS
|
|
|
|
GskVulkanImage * gsk_vulkan_renderer_ref_texture_image (GskVulkanRenderer *self,
|
|
GdkTexture *texture,
|
|
GskVulkanUploader *uploader);
|
|
|
|
typedef struct
|
|
{
|
|
guint texture_index;
|
|
|
|
float tx;
|
|
float ty;
|
|
float tw;
|
|
float th;
|
|
|
|
int draw_x;
|
|
int draw_y;
|
|
int draw_width;
|
|
int draw_height;
|
|
|
|
int atlas_x;
|
|
int atlas_y;
|
|
|
|
guint64 timestamp;
|
|
} GskVulkanCachedGlyph;
|
|
|
|
guint gsk_vulkan_renderer_cache_glyph (GskVulkanRenderer *renderer,
|
|
PangoFont *font,
|
|
PangoGlyph glyph,
|
|
int x,
|
|
int y,
|
|
float scale);
|
|
|
|
GskVulkanImage * gsk_vulkan_renderer_ref_glyph_image (GskVulkanRenderer *self,
|
|
GskVulkanUploader *uploader,
|
|
guint index);
|
|
|
|
GskVulkanCachedGlyph * gsk_vulkan_renderer_get_cached_glyph (GskVulkanRenderer *self,
|
|
PangoFont *font,
|
|
PangoGlyph glyph,
|
|
int x,
|
|
int y,
|
|
float scale);
|
|
|
|
|
|
G_END_DECLS
|
|
|