minor changes

This commit is contained in:
griffi-gh 2024-02-25 15:59:12 +01:00
parent b064a2cb2b
commit 23dc81a921
5 changed files with 34 additions and 32 deletions

View file

@ -131,7 +131,7 @@ impl GliumUiRenderer {
} }
} }
pub fn update_draw_plan(&mut self, call: &UiDrawCall) { pub fn update_buffers(&mut self, call: &UiDrawCall) {
let data_vtx = &call.vertices.iter().copied().map(Vertex::from).collect::<Vec<_>>()[..]; let data_vtx = &call.vertices.iter().copied().map(Vertex::from).collect::<Vec<_>>()[..];
let data_idx = &call.indices[..]; let data_idx = &call.indices[..];
if let Some(buffer) = &mut self.buffer_pair { if let Some(buffer) = &mut self.buffer_pair {
@ -156,8 +156,8 @@ impl GliumUiRenderer {
if self.ui_texture.is_none() || hui.atlas().modified { if self.ui_texture.is_none() || hui.atlas().modified {
self.update_texture_atlas(&hui.atlas()); self.update_texture_atlas(&hui.atlas());
} }
if hui.draw_call().0 { if self.buffer_pair.is_none() || hui.draw_call().0 {
self.update_draw_plan(hui.draw_call().1); self.update_buffers(hui.draw_call().1);
} }
} }

View file

@ -1,35 +1,33 @@
use glam::{vec4, Vec3, Vec4}; use glam::{vec4, Vec3, Vec4};
use crate::rectangle::Corners; use crate::rectangle::Corners;
// #[derive(Clone, Copy, PartialEq, Eq, Debug)] //TODO: use this
// pub enum GradientDirection { // pub struct Background {
// ToRight = 0b00, // pub color: BackgroundColor,
// ToLeft = 0b01, // pub texture: Option<TextureH>
// ToBottom = 0b10,
// ToTop = 0b11,
// } // }
#[derive(Clone, Copy, Default, Debug, PartialEq)] #[derive(Clone, Copy, Default, Debug, PartialEq)]
pub enum Background { pub enum BackgroundColor {
#[default] #[default]
Transparent, Transparent,
Solid(Vec4), Solid(Vec4),
Gradient(Corners<Vec4>), Gradient(Corners<Vec4>),
} }
impl From<(f32, f32, f32, f32)> for Background { impl From<(f32, f32, f32, f32)> for BackgroundColor {
fn from(color: (f32, f32, f32, f32)) -> Self { fn from(color: (f32, f32, f32, f32)) -> Self {
Self::Solid(vec4(color.0, color.1, color.2, color.3)) Self::Solid(vec4(color.0, color.1, color.2, color.3))
} }
} }
impl From<Corners<Vec4>> for Background { impl From<Corners<Vec4>> for BackgroundColor {
fn from(corners: Corners<Vec4>) -> Self { fn from(corners: Corners<Vec4>) -> Self {
Self::Gradient(corners) Self::Gradient(corners)
} }
} }
impl From<Option<Vec4>> for Background { impl From<Option<Vec4>> for BackgroundColor {
fn from(color: Option<Vec4>) -> Self { fn from(color: Option<Vec4>) -> Self {
match color { match color {
Some(color) => Self::Solid(color), Some(color) => Self::Solid(color),
@ -38,19 +36,19 @@ impl From<Option<Vec4>> for Background {
} }
} }
impl From<Vec4> for Background { impl From<Vec4> for BackgroundColor {
fn from(color: Vec4) -> Self { fn from(color: Vec4) -> Self {
Self::Solid(color) Self::Solid(color)
} }
} }
impl From<(f32, f32, f32)> for Background { impl From<(f32, f32, f32)> for BackgroundColor {
fn from(color: (f32, f32, f32)) -> Self { fn from(color: (f32, f32, f32)) -> Self {
Self::Solid(vec4(color.0, color.1, color.2, 1.)) Self::Solid(vec4(color.0, color.1, color.2, 1.))
} }
} }
impl From<Corners<Vec3>> for Background { impl From<Corners<Vec3>> for BackgroundColor {
fn from(corners: Corners<Vec3>) -> Self { fn from(corners: Corners<Vec3>) -> Self {
Self::Gradient(Corners { Self::Gradient(Corners {
top_left: corners.top_left.extend(1.), top_left: corners.top_left.extend(1.),
@ -61,7 +59,7 @@ impl From<Corners<Vec3>> for Background {
} }
} }
impl From<Option<Vec3>> for Background { impl From<Option<Vec3>> for BackgroundColor {
fn from(color: Option<Vec3>) -> Self { fn from(color: Option<Vec3>) -> Self {
match color { match color {
Some(color) => Self::Solid(color.extend(1.)), Some(color) => Self::Solid(color.extend(1.)),
@ -70,13 +68,13 @@ impl From<Option<Vec3>> for Background {
} }
} }
impl From<Vec3> for Background { impl From<Vec3> for BackgroundColor {
fn from(color: Vec3) -> Self { fn from(color: Vec3) -> Self {
Self::Solid(color.extend(1.)) Self::Solid(color.extend(1.))
} }
} }
impl Background { impl BackgroundColor {
/// Currently, never returns None.\ /// Currently, never returns None.\
/// `Option` has been added in preparation for future changes.\ /// `Option` has been added in preparation for future changes.\
/// (`Background::Texture` etc) /// (`Background::Texture` etc)

View file

@ -8,8 +8,14 @@ const RGBA_CHANNEL_COUNT: u32 = 4;
const ALLOW_ROTATION: bool = false; const ALLOW_ROTATION: bool = false;
pub struct TextureAtlasMeta<'a> { pub struct TextureAtlasMeta<'a> {
/// Texture data\
/// The data is stored in RGBA format, with 1 byte (8 bits) per channel
pub data: &'a [u8], pub data: &'a [u8],
/// Current size of the texture atlas\
/// Please note that this value might change
pub size: UVec2, pub size: UVec2,
/// True if the atlas has been modified since the beginning of the current frame\
/// If this function returns true, the texture atlas should be re-uploaded to the GPU before rendering\
pub modified: bool, pub modified: bool,
} }
@ -209,12 +215,6 @@ impl TextureAtlasManager {
self.modified = false; self.modified = false;
} }
/// Returns true if the atlas has been modified since the beginning of the current frame\
/// If this function returns true, the texture atlas should be re-uploaded to the GPU before rendering\
pub fn is_modified(&self) -> bool {
self.modified
}
pub fn meta(&self) -> TextureAtlasMeta { pub fn meta(&self) -> TextureAtlasMeta {
TextureAtlasMeta { TextureAtlasMeta {
data: &self.data, data: &self.data,

View file

@ -1,6 +1,11 @@
use glam::{Vec2, vec2, Vec4}; use glam::{Vec2, vec2};
use crate::{ use crate::{
background::Background, draw::{RoundedCorners, UiDrawCommand}, element::{MeasureContext, ProcessContext, UiElement}, layout::{Alignment, Alignment2d, LayoutInfo, UiDirection, UiSize}, measure::{Hints, Response}, rectangle::{Corners, Sides} background::BackgroundColor,
draw::{RoundedCorners, UiDrawCommand},
element::{MeasureContext, ProcessContext, UiElement},
layout::{Alignment, Alignment2d, LayoutInfo, UiDirection, UiSize},
measure::{Hints, Response},
rectangle::{Corners, Sides}
}; };
// pub struct Border { // pub struct Border {
@ -19,7 +24,7 @@ pub struct Container {
pub gap: f32, pub gap: f32,
pub padding: Sides<f32>, pub padding: Sides<f32>,
pub align: Alignment2d, pub align: Alignment2d,
pub background: Background, pub background: BackgroundColor,
pub corner_radius: Corners<f32>, pub corner_radius: Corners<f32>,
pub elements: Vec<Box<dyn UiElement>>, pub elements: Vec<Box<dyn UiElement>>,
} }

View file

@ -1,16 +1,15 @@
use glam::{vec2, Vec4}; use glam::{vec2, Vec4};
use crate::{ use crate::{
background::Background, background::BackgroundColor,
draw::UiDrawCommand, draw::UiDrawCommand,
element::{MeasureContext, ProcessContext, UiElement}, element::{MeasureContext, ProcessContext, UiElement},
layout::UiSize, layout::UiSize,
measure::Response, measure::Response
rectangle::Corners
}; };
pub struct Rect { pub struct Rect {
pub size: (UiSize, UiSize), pub size: (UiSize, UiSize),
pub color: Background, pub color: BackgroundColor,
} }
impl Default for Rect { impl Default for Rect {