1
0
Fork 0
mirror of https://github.com/doukutsu-rs/doukutsu-rs synced 2024-11-16 02:43:02 +00:00
doukutsu-rs/src/framework/backend.rs

68 lines
1.9 KiB
Rust
Raw Normal View History

2021-02-05 22:47:13 +00:00
use imgui::DrawData;
use crate::common::{Color, Point, Rect};
2021-01-28 22:33:43 +00:00
use crate::framework::context::Context;
use crate::framework::error::GameResult;
2021-02-05 09:47:30 +00:00
use crate::framework::graphics::BlendMode;
2021-02-05 22:47:13 +00:00
use crate::Game;
2021-01-27 18:20:47 +00:00
2021-01-28 22:33:43 +00:00
pub trait Backend {
fn create_event_loop(&self) -> GameResult<Box<dyn BackendEventLoop>>;
2021-01-27 18:20:47 +00:00
}
2021-01-28 22:33:43 +00:00
pub trait BackendEventLoop {
fn run(&mut self, game: &mut Game, ctx: &mut Context);
fn new_renderer(&self) -> GameResult<Box<dyn BackendRenderer>>;
}
pub trait BackendRenderer {
fn clear(&mut self, color: Color);
fn present(&mut self) -> GameResult;
2021-02-05 09:47:30 +00:00
fn create_texture_mutable(&mut self, width: u16, height: u16) -> GameResult<Box<dyn BackendTexture>>;
2021-01-28 22:33:43 +00:00
fn create_texture(&mut self, width: u16, height: u16, data: &[u8]) -> GameResult<Box<dyn BackendTexture>>;
2021-02-05 09:47:30 +00:00
fn set_blend_mode(&mut self, blend: BlendMode) -> GameResult;
fn set_render_target(&mut self, texture: Option<&Box<dyn BackendTexture>>) -> GameResult;
2021-02-05 22:47:13 +00:00
2021-02-12 23:03:38 +00:00
fn draw_rect(&mut self, rect: Rect, color: Color) -> GameResult;
fn draw_outline_rect(&mut self, rect: Rect, line_width: usize, color: Color) -> GameResult;
2021-02-05 22:47:13 +00:00
fn imgui(&self) -> GameResult<&mut imgui::Context>;
fn render_imgui(&mut self, draw_data: &DrawData) -> GameResult;
fn prepare_frame(&self, ui: &imgui::Ui) -> GameResult;
2021-01-28 22:33:43 +00:00
}
pub trait BackendTexture {
fn dimensions(&self) -> (u16, u16);
2021-02-05 22:47:13 +00:00
2021-01-28 22:33:43 +00:00
fn add(&mut self, command: SpriteBatchCommand);
2021-02-05 22:47:13 +00:00
2021-01-28 22:33:43 +00:00
fn clear(&mut self);
2021-02-05 22:47:13 +00:00
2021-01-28 22:33:43 +00:00
fn draw(&mut self) -> GameResult;
}
pub fn init_backend() -> GameResult<Box<dyn Backend>> {
2021-02-17 07:59:29 +00:00
#[cfg(feature = "backend_sdl")]
{
return crate::framework::backend_sdl2::SDL2Backend::new()
}
log::warn!("No backend compiled in, using null backend instead.");
crate::framework::backend_null::NullBackend::new()
2021-01-28 22:33:43 +00:00
}
pub enum SpriteBatchCommand {
DrawRect(Rect<f32>, Rect<f32>),
DrawRectFlip(Rect<f32>, Rect<f32>, bool, bool),
2021-01-28 22:33:43 +00:00
DrawRectTinted(Rect<f32>, Rect<f32>, Color),
}