parent
7e2983374e
commit
296c99f059
4 changed files with 19 additions and 1 deletions
|
@ -3,6 +3,7 @@ use std::{
|
|||
fmt::{self, Display, Formatter},
|
||||
};
|
||||
|
||||
/// An error that occurred while preparing text for rendering.
|
||||
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
|
||||
pub enum PrepareError {
|
||||
AtlasFull,
|
||||
|
@ -16,6 +17,7 @@ impl Display for PrepareError {
|
|||
|
||||
impl Error for PrepareError {}
|
||||
|
||||
/// An error that occurred while rendering text.
|
||||
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
|
||||
pub enum RenderError {
|
||||
RemovedFromAtlas,
|
||||
|
|
12
src/lib.rs
12
src/lib.rs
|
@ -11,15 +11,22 @@ use recently_used::RecentlyUsedMap;
|
|||
pub use text_atlas::TextAtlas;
|
||||
pub use text_render::TextRenderer;
|
||||
|
||||
/// The color to use when rendering text.
|
||||
#[repr(C)]
|
||||
pub struct Color {
|
||||
/// The red component of the color.
|
||||
pub r: u8,
|
||||
/// The green component of the color.
|
||||
pub g: u8,
|
||||
/// The blue component of the color.
|
||||
pub b: u8,
|
||||
/// The alpha component of the color.
|
||||
pub a: u8,
|
||||
}
|
||||
|
||||
/// Allows text to be colored during rendering.
|
||||
pub trait HasColor: Copy {
|
||||
/// The color to use when rendering text.
|
||||
fn color(&self) -> Color;
|
||||
}
|
||||
|
||||
|
@ -44,16 +51,19 @@ pub(crate) struct GlyphToRender {
|
|||
color: [u8; 4],
|
||||
}
|
||||
|
||||
/// The screen resolution to use when rendering text.
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
|
||||
pub struct Resolution {
|
||||
/// The width of the screen in pixels.
|
||||
pub width: u32,
|
||||
/// The height of the screen in pixels.
|
||||
pub height: u32,
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
|
||||
pub struct Params {
|
||||
pub(crate) struct Params {
|
||||
screen_resolution: Resolution,
|
||||
_pad: [u32; 2],
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ use wgpu::{
|
|||
|
||||
use crate::{GlyphDetails, GlyphToRender, Params, RecentlyUsedMap, Resolution};
|
||||
|
||||
/// An atlas containing a cache of rasterized glyphs that can be rendered.
|
||||
pub struct TextAtlas {
|
||||
pub(crate) texture_pending: Vec<u8>,
|
||||
pub(crate) texture: Texture,
|
||||
|
@ -27,6 +28,7 @@ pub struct TextAtlas {
|
|||
}
|
||||
|
||||
impl TextAtlas {
|
||||
/// Creates a new `TextAtlas`.
|
||||
pub fn new(device: &Device, _queue: &Queue, format: TextureFormat) -> Self {
|
||||
let max_texture_dimension_2d = device.limits().max_texture_dimension_2d;
|
||||
let width = max_texture_dimension_2d;
|
||||
|
|
|
@ -14,6 +14,7 @@ use crate::{
|
|||
TextAtlas, TextOverflow,
|
||||
};
|
||||
|
||||
/// A text renderer that uses cached glyphs to render text into an existing render pass.
|
||||
pub struct TextRenderer {
|
||||
vertex_buffer: Buffer,
|
||||
vertex_buffer_size: u64,
|
||||
|
@ -25,6 +26,7 @@ pub struct TextRenderer {
|
|||
}
|
||||
|
||||
impl TextRenderer {
|
||||
/// Creates a new `TextRenderer`.
|
||||
pub fn new(device: &Device, _queue: &Queue) -> Self {
|
||||
let vertex_buffer_size = next_copy_buffer_size(4096);
|
||||
let vertex_buffer = device.create_buffer(&BufferDescriptor {
|
||||
|
@ -56,6 +58,7 @@ impl TextRenderer {
|
|||
}
|
||||
}
|
||||
|
||||
/// Prepares all of the provided layouts for rendering.
|
||||
pub fn prepare(
|
||||
&mut self,
|
||||
device: &Device,
|
||||
|
@ -344,6 +347,7 @@ impl TextRenderer {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
/// Renders all layouts that were previously provided to `prepare`.
|
||||
pub fn render<'pass>(
|
||||
&'pass mut self,
|
||||
atlas: &'pass TextAtlas,
|
||||
|
|
Loading…
Reference in a new issue