1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#![feature(arc_new_cyclic)]
#![deny(clippy::all)]

//! Riddle simple sprite-based renderer built on `wgpu`.
//!
//! The renderer can be used by itself as the only renderer in your application,
//! or it can be constructed on top of existing WGPU devices to provide simple
//! 2D rendering.
//!
//! # Riddle Example
//!
//! The **recommended** way to use this crate is through the main `riddle` crate.
//! Riddle exposes this crate through `riddle::renderer`. The following example
//! lets this crate take full ownership over creating the WGPU device.
//!
//! ```no_run
//! use riddle::{common::Color, platform::*, renderer::*, *};
//!
//! fn main() -> Result<(), RiddleError> {
//!     let rdl =  RiddleLib::new()?;
//!     let window = WindowBuilder::new().build(rdl.context())?;
//!     let renderer = Renderer::new_from_window(&window)?;
//!
//!     rdl.run(move |rdl| {
//!         match rdl.event() {
//!             Event::Platform(PlatformEvent::WindowClose(_)) => rdl.quit(),
//!             Event::ProcessFrame => {
//!                 let mut render_ctx = renderer.begin_render().unwrap();
//!                 render_ctx.clear(Color::RED);
//!                 render_ctx.present();
//!             },
//!             _ => ()
//!          }
//!     })
//! }
//! ```
//!
//! # Direct Usage
//!
//! To use this crate directly see [`wgpu_ext::WGPUDevice`] for how to use the renderer
//! with custom WGPU devices.

mod error;
mod sprite_utils;

pub mod wgpu_ext;

use riddle_common::*;
use riddle_image as image;
use riddle_math as math;
use riddle_platform_winit as platform;
use wgpu_ext::*;

type Result<R> = std::result::Result<R, RendererError>;

pub use error::*;
pub use sprite_utils::*;
pub use wgpu_ext::{FilterMode, RenderContext};

/// A simple 2D sprite based renderer for a riddle Window.
pub type Renderer = WGPURenderer<WindowWGPUDevice>;

/// Strong handle to a [`Renderer`].
pub type RendererHandle = WGPURendererHandle<WindowWGPUDevice>;

/// Weak handle to a [`Renderer`].
pub type RendererWeak = WGPURendererWeak<WindowWGPUDevice>;

/// A sprite for the default Window renderer.
pub type Sprite = WGPUSprite<WindowWGPUDevice>;

/// Construct a set of [`Sprite`]s from a set of `riddle_image::Image`s which share a texture atlas.
pub type SpriteAtlasBuilder<'a> = WGPUSpriteAtlasBuilder<'a, WindowWGPUDevice>;

/// A target which can be both rendered to and referenced as a [`Sprite`] for rendering.
pub type SpriteRenderTarget = WGPUSpriteRenderTarget<WindowWGPUDevice>;