From 490db931373b67d5c1766263d23318643ceab22b Mon Sep 17 00:00:00 2001 From: lisk77 Date: Tue, 18 Mar 2025 17:52:02 +0100 Subject: [PATCH] feat: added color to the `draw_text_at` in the `Renderer2D` and changed the parameter `position` from `Point3` to a `Point2` --- crates/comet_renderer/src/base2d.wgsl | 3 ++- crates/comet_renderer/src/renderer2d.rs | 17 ++++++++++------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/crates/comet_renderer/src/base2d.wgsl b/crates/comet_renderer/src/base2d.wgsl index bfe9789..79a3aa0 100644 --- a/crates/comet_renderer/src/base2d.wgsl +++ b/crates/comet_renderer/src/base2d.wgsl @@ -37,5 +37,6 @@ var s_diffuse: sampler; @fragment fn fs_main(in: VertexOutput) -> @location(0) vec4 { - return textureSample(t_diffuse, s_diffuse, in.tex_coords); + let sample_color = textureSample(t_diffuse, s_diffuse, in.tex_coords); + return sample_color * in.color; } \ No newline at end of file diff --git a/crates/comet_renderer/src/renderer2d.rs b/crates/comet_renderer/src/renderer2d.rs index c456edf..68137fa 100644 --- a/crates/comet_renderer/src/renderer2d.rs +++ b/crates/comet_renderer/src/renderer2d.rs @@ -10,7 +10,7 @@ use winit::window::Window; use comet_colors::{ Color, LinearRgba }; use comet_ecs::{Camera, Camera2D, Component, Position2D, Render, Render2D, Transform2D, Scene}; use comet_log::{debug, info}; -use comet_math::{Point3, Vec2, Vec3}; +use comet_math::{Point2, Point3, Vec2, Vec3}; use comet_resources::{texture, graphic_resource_manager::GraphicResourceManager, Texture, Vertex}; use comet_resources::texture_atlas::TextureRegion; use comet_structs::ComponentSet; @@ -758,10 +758,13 @@ impl<'a> Renderer2D<'a> { } /// A function to draw text at a given position. - pub fn draw_text_at(&mut self, text: &str, font: String, size: f32, position: Point3, color: impl Color) { + pub fn draw_text_at(&mut self, text: &str, font: String, size: f32, position: Point2, color: impl Color) { self.set_font_atlas(font.clone()); - let screen_position = Point3::new(position.x()/self.config.width as f32, position.y()/self.config.height as f32, position.z()); + let wgpu_color = color.to_wgpu(); + let vert_color = [wgpu_color.r as f32, wgpu_color.g as f32, wgpu_color.b as f32, wgpu_color.a as f32]; + + let screen_position = Point2::new(position.x()/self.config.width as f32, position.y()/self.config.height as f32); let scale_factor = size / self.graphic_resource_manager.fonts().iter().find(|f| f.name() == font).unwrap().size(); let line_height = (self.graphic_resource_manager.fonts().iter().find(|f| f.name() == font).unwrap().line_height() / self.config.height as f32) * scale_factor; @@ -787,10 +790,10 @@ impl<'a> Renderer2D<'a> { let glyph_bottom = glyph_top - h; let vertices: &mut Vec = &mut vec![ - Vertex::new([ glyph_left, glyph_top, screen_position.z() ], [region.u0(), region.v0()], [0.0; 4]), - Vertex::new([ glyph_left, glyph_bottom, screen_position.z() ], [region.u0(), region.v1()], [0.0; 4]), - Vertex::new([ glyph_right, glyph_bottom, screen_position.z() ], [region.u1(), region.v1()], [0.0; 4]), - Vertex::new([ glyph_right, glyph_top, screen_position.z() ], [region.u1(), region.v0()], [0.0; 4]), + Vertex::new([ glyph_left, glyph_top, 0.0 ], [region.u0(), region.v0()], vert_color), + Vertex::new([ glyph_left, glyph_bottom, 0.0 ], [region.u0(), region.v1()], vert_color), + Vertex::new([ glyph_right, glyph_bottom, 0.0 ], [region.u1(), region.v1()], vert_color), + Vertex::new([ glyph_right, glyph_top, 0.0 ], [region.u1(), region.v0()], vert_color), ]; let buffer_size = self.vertex_data.len() as u16;