[gtk/wip/chergert/glyphy: 4/4] wip: stubs for glyphy rendering
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/chergert/glyphy: 4/4] wip: stubs for glyphy rendering
- Date: Mon, 14 Mar 2022 23:26:05 +0000 (UTC)
commit 2088d3b49aab01cdf479b5780f287e207edba553
Author: Christian Hergert <chergert redhat com>
Date: Mon Mar 14 16:25:05 2022 -0700
wip: stubs for glyphy rendering
gsk/gl/gskglrenderjob.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 55 insertions(+)
---
diff --git a/gsk/gl/gskglrenderjob.c b/gsk/gl/gskglrenderjob.c
index d02424f117..720592c6fb 100644
--- a/gsk/gl/gskglrenderjob.c
+++ b/gsk/gl/gskglrenderjob.c
@@ -3129,6 +3129,61 @@ gsk_gl_render_job_visit_text_node_glyphy (GskGLRenderJob *job,
const GdkRGBA *color,
gboolean force_color)
{
+ const graphene_point_t *offset;
+ const PangoGlyphInfo *glyphs;
+ const PangoGlyphInfo *gi;
+ GskGLGlyphyLibrary *library;
+ GskGLCommandBatch *batch;
+ const PangoFont *font;
+ GskGLDrawVertex *vertices;
+ GskGLGlyphyKey lookup;
+ float x;
+ float y;
+ guint last_texture = 0;
+ guint num_glyphs;
+ guint used = 0;
+ guint i;
+
+ g_assert (!gsk_text_node_has_color_glyphs (node));
+
+ if (!(num_glyphs = gsk_text_node_get_num_glyphs (node)))
+ return;
+
+ font = gsk_text_node_get_font (node);
+ glyphs = gsk_text_node_get_glyphs (node, NULL);
+ library = job->driver->glyphy;
+ offset = gsk_text_node_get_offset (node);
+ x = offset->x + job->offset_x;
+ y = offset->y + job->offset_y;
+
+ gsk_gl_render_job_begin_draw (job, CHOOSE_PROGRAM (job, coloring));
+
+ batch = gsk_gl_command_queue_get_batch (job->command_queue);
+ vertices = gsk_gl_command_queue_add_n_vertices (job->command_queue, num_glyphs);
+
+ lookup.font = (PangoFont *)font;
+
+ for (i = 0, gi = glyphs; i < num_glyphs; i++, gi++)
+ {
+ const GskGLGlyphyValue *glyph;
+ float glyph_x, glyph_y, glyph_x2, glyph_y2;
+ float tx, ty, tx2, ty2;
+ float cx;
+ float cy;
+ guint texture_id;
+
+ lookup.glyph = gi->glyph;
+
+ texture_id = gsk_gl_glyphy_library_lookup_or_add (library, &lookup, &glyph);
+ if G_UNLIKELY (texture_id == 0)
+ continue;
+
+ }
+
+ if (used != num_glyphs)
+ gsk_gl_command_queue_retract_n_vertices (job->command_queue, num_glyphs - used);
+
+ gsk_gl_render_job_end_draw (job);
}
static inline void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]