use super::*;
#[derive(Copy, Clone, Debug, Default, dataview::Pod)]
#[repr(C)]
pub struct TextVertex {
pub pos: Vec2f,
pub uv: Vec2f,
pub color: Vec4<u8>,
pub outline: Vec4<u8>,
}
unsafe impl TVertex for TextVertex {
const LAYOUT: &'static crate::VertexLayout = &crate::VertexLayout {
size: mem::size_of::<TextVertex>() as u16,
alignment: mem::align_of::<TextVertex>() as u16,
attributes: &[
VertexAttribute {
name: "a_pos",
format: VertexAttributeFormat::F32v2,
offset: dataview::offset_of!(TextVertex.pos) as u16,
},
VertexAttribute {
name: "a_uv",
format: VertexAttributeFormat::F32v2,
offset: dataview::offset_of!(TextVertex.uv) as u16,
},
VertexAttribute {
name: "a_color",
format: VertexAttributeFormat::U8Normv4,
offset: dataview::offset_of!(TextVertex.color) as u16,
},
VertexAttribute {
name: "a_outline",
format: VertexAttributeFormat::U8Normv4,
offset: dataview::offset_of!(TextVertex.outline) as u16,
},
],
};
}
#[derive(Clone, Debug)]
pub struct TextTemplate {
pub uv: Vec2f,
pub color: Vec4<u8>,
pub outline: Vec4<u8>,
}
impl ToVertex<TextVertex> for TextTemplate {
#[inline]
fn to_vertex(&self, pos: Vec2f, _index: usize) -> TextVertex {
TextVertex { pos, uv: self.uv, color: self.color, outline: self.outline }
}
}
#[derive(Clone, Debug, PartialEq)]
pub struct TextUniform {
pub transform: Transform2f,
pub texture: Texture2D,
pub unit_range: Vec2f,
pub threshold: f32,
pub out_bias: f32,
pub outline_width_absolute: f32,
pub outline_width_relative: f32,
}
impl Default for TextUniform {
#[inline]
fn default() -> Self {
TextUniform {
transform: Transform2::IDENTITY,
texture: Texture2D::INVALID,
unit_range: Vec2::dup(4.0f32) / Vec2(232.0f32, 232.0f32),
threshold: 0.5,
out_bias: 0.0,
outline_width_absolute: 1.0,
outline_width_relative: 0.125,
}
}
}
impl UniformVisitor for TextUniform {
fn visit(&self, set: &mut dyn UniformSetter) {
set.value("u_transform", &self.transform);
set.value("u_texture", &self.texture);
set.value("u_unitRange", &self.unit_range);
set.value("u_threshold", &self.threshold);
set.value("u_outBias", &self.out_bias);
set.value("u_outlineWidthAbsolute", &self.outline_width_absolute);
set.value("u_outlineWidthRelative", &self.outline_width_relative);
}
}