use core::hash::BuildHasher;
use glyph_brush::DefaultSectionHasher;
use glyph_brush::ab_glyph::Font;
use glyph_brush::delegate_glyph_brush_builder_fns;
use super::GlyphBrush;
pub struct GlyphBrushBuilder<D, F, H = DefaultSectionHasher> {
inner: glyph_brush::GlyphBrushBuilder<F, H>,
texture_filter_method: wgpu::FilterMode,
multisample_state: wgpu::MultisampleState,
depth: D,
}
impl<F, H> From<glyph_brush::GlyphBrushBuilder<F, H>>
for GlyphBrushBuilder<(), F, H>
{
fn from(inner: glyph_brush::GlyphBrushBuilder<F, H>) -> Self {
GlyphBrushBuilder {
inner,
texture_filter_method: wgpu::FilterMode::Linear,
multisample_state: wgpu::MultisampleState::default(),
depth: (),
}
}
}
impl GlyphBrushBuilder<(), ()> {
#[inline]
pub fn using_font<F: Font>(font: F) -> GlyphBrushBuilder<(), F> {
Self::using_fonts(vec![font])
}
pub fn using_fonts<F: Font>(fonts: Vec<F>) -> GlyphBrushBuilder<(), F> {
GlyphBrushBuilder {
inner: glyph_brush::GlyphBrushBuilder::using_fonts(fonts),
texture_filter_method: wgpu::FilterMode::Linear,
multisample_state: wgpu::MultisampleState::default(),
depth: (),
}
}
}
impl<F: Font, D, H: BuildHasher> GlyphBrushBuilder<D, F, H> {
delegate_glyph_brush_builder_fns!(inner);
pub fn draw_cache_multithread(mut self, multithread: bool) -> Self {
self.inner.draw_cache_builder =
self.inner.draw_cache_builder.multithread(multithread);
self
}
pub fn texture_filter_method(
mut self,
filter_method: wgpu::FilterMode,
) -> Self {
self.texture_filter_method = filter_method;
self
}
pub fn multisample_state(
mut self,
multisample_state: wgpu::MultisampleState,
) -> Self {
self.multisample_state = multisample_state;
self
}
pub fn section_hasher<T: BuildHasher>(
self,
section_hasher: T,
) -> GlyphBrushBuilder<D, F, T> {
GlyphBrushBuilder {
inner: self.inner.section_hasher(section_hasher),
texture_filter_method: self.texture_filter_method,
multisample_state: self.multisample_state,
depth: self.depth,
}
}
pub fn depth_stencil_state(
self,
depth_stencil_state: wgpu::DepthStencilState,
) -> GlyphBrushBuilder<wgpu::DepthStencilState, F, H> {
GlyphBrushBuilder {
inner: self.inner,
texture_filter_method: self.texture_filter_method,
multisample_state: self.multisample_state,
depth: depth_stencil_state,
}
}
}
impl<F: Font + Sync, H: BuildHasher> GlyphBrushBuilder<(), F, H> {
pub fn build(
self,
device: &wgpu::Device,
render_format: wgpu::TextureFormat,
) -> GlyphBrush<(), F, H> {
GlyphBrush::<(), F, H>::new(
device,
self.texture_filter_method,
self.multisample_state,
render_format,
self.inner,
)
}
}
impl<F: Font + Sync, H: BuildHasher>
GlyphBrushBuilder<wgpu::DepthStencilState, F, H>
{
pub fn build(
self,
device: &wgpu::Device,
render_format: wgpu::TextureFormat,
) -> GlyphBrush<wgpu::DepthStencilState, F, H> {
GlyphBrush::<wgpu::DepthStencilState, F, H>::new(
device,
self.texture_filter_method,
self.multisample_state,
render_format,
self.depth,
self.inner,
)
}
}