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…
	
	Add table
		Add a link
		
	
		Reference in a new issue