Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
Stephen Gutekanst 2024-05-22 08:21:33 -07:00
parent 18e32ee6bf
commit f79351ed59
4 changed files with 19 additions and 9 deletions

View file

@ -209,10 +209,10 @@ fn updatePipeline(
// defer font.deinit(allocator); // defer font.deinit(allocator);
const font_size = text_style.get(style, .font_size).?; const font_size = text_style.get(style, .font_size).?;
const font_color = text_style.get(style, .font_color) orelse vec4(0, 0, 0, 1.0);
// TODO(text): respect these style parameters // TODO(text): respect these style parameters
// const font_weight = text_style.get(style, .font_weight).?; // const font_weight = text_style.get(style, .font_weight).?;
// const italic = text_style.get(style, .italic).?; // const italic = text_style.get(style, .italic).?;
// const color = text_style.get(style, .color).?;
// Create a text shaper // Create a text shaper
var run = try gfx.TextRun.init(); var run = try gfx.TextRun.init();
@ -274,6 +274,7 @@ fn updatePipeline(
.size = size.divScalar(px_density), .size = size.divScalar(px_density),
.text_index = num_texts, .text_index = num_texts,
.uv_pos = vec2(@floatFromInt(r.x), @floatFromInt(r.y)), .uv_pos = vec2(@floatFromInt(r.x), @floatFromInt(r.y)),
.font_color = font_color,
}); });
origin_x += glyph.advance.x(); origin_x += glyph.advance.x();
} }

View file

@ -107,6 +107,9 @@ pub const Glyph = extern struct {
/// Which text this glyph belongs to; this is the index for transforms[i], colors[i]. /// Which text this glyph belongs to; this is the index for transforms[i], colors[i].
text_index: u32, text_index: u32,
/// Color of the glyph
color: math.Vec4,
}; };
const GlyphKey = struct { const GlyphKey = struct {

View file

@ -11,10 +11,9 @@ pub const components = .{
// \\ TODO(text): this is not currently implemented // \\ TODO(text): this is not currently implemented
// }, // },
// e.g. 12 * mach.gfx.px_per_pt // 12pt
.font_size = .{ .type = f32, .description = .font_size = .{ .type = f32, .description =
\\ Font size in pixels \\ Font size in pixels
\\ TODO(text): this is not currently implemented \\ e.g. 12 * mach.gfx.px_per_pt for 12pt font size
}, },
// // e.g. mach.gfx.font_weight_normal // // e.g. mach.gfx.font_weight_normal
@ -29,11 +28,11 @@ pub const components = .{
// \\ TODO(text): this is not currently implemented // \\ TODO(text): this is not currently implemented
// }, // },
// // e.g. vec4(0, 0, 0, 1.0) .font_color = .{ .type = math.Vec4, .description =
// .color = .{ .type = math.Vec4, .description = \\ Fill color of text
// \\ Fill color \\ e.g. vec4(0.0, 0.0, 0.0, 1.0) // black
// \\ TODO(text): this is not currently implemented \\ e.g. vec4(1.0, 1.0, 1.0, 1.0) // white
// }, },
// TODO(text): allow user to specify projection matrix (3d-space flat text etc.) // TODO(text): allow user to specify projection matrix (3d-space flat text etc.)
}; };

View file

@ -7,6 +7,9 @@ struct VertexOutput {
// UV coordinate // UV coordinate
@location(0) fragUV : vec2<f32>, @location(0) fragUV : vec2<f32>,
// Color of the glyph
@location(1) color : vec4<f32>,
}; };
// Our vertex shader will recieve these parameters // Our vertex shader will recieve these parameters
@ -30,6 +33,9 @@ struct Glyph {
// Which text this glyph belongs to; this is the index for transforms[i], colors[i] // Which text this glyph belongs to; this is the index for transforms[i], colors[i]
text_index: u32, text_index: u32,
// Color of the glyph
color: vec4<f32>,
} }
@group(0) @binding(0) var<uniform> uniforms : Uniforms; @group(0) @binding(0) var<uniform> uniforms : Uniforms;
@ -96,10 +102,11 @@ fn vertMain(
@fragment @fragment
fn fragMain( fn fragMain(
@location(0) fragUV: vec2<f32> @location(0) fragUV: vec2<f32>
@location(1) color: vec4<f32>
) -> @location(0) vec4<f32> { ) -> @location(0) vec4<f32> {
var c = textureSample(glyphTexture, glyphSampler, fragUV); var c = textureSample(glyphTexture, glyphSampler, fragUV);
if (c.a <= 0.0) { if (c.a <= 0.0) {
discard; discard;
} }
return c; return c * color;
} }