librashader/librashader-runtime-gl/src/render_target.rs
2022-11-30 00:39:50 -05:00

45 lines
1.1 KiB
Rust

use crate::framebuffer::Viewport;
use crate::gl::Framebuffer;
#[rustfmt::skip]
static DEFAULT_MVP: &[f32; 16] = &[
2f32, 0.0, 0.0, 0.0,
0.0, 2.0, 0.0, 0.0,
0.0, 0.0, 2.0, 0.0,
-1.0, -1.0, 0.0, 1.0,
];
#[derive(Debug, Copy, Clone)]
pub(crate) struct RenderTarget<'a, T: Framebuffer> {
pub mvp: &'a [f32; 16],
pub framebuffer: &'a T,
pub x: i32,
pub y: i32
}
impl<'a, T: Framebuffer> RenderTarget<'a, T> {
pub fn new(backbuffer: &'a T, mvp: Option<&'a [f32; 16]>, x: i32, y: i32) -> Self {
if let Some(mvp) = mvp {
RenderTarget {
framebuffer: backbuffer,
x,
mvp,
y,
}
} else {
RenderTarget {
framebuffer: backbuffer,
x,
mvp: DEFAULT_MVP,
y,
}
}
}
}
impl<'a, T: Framebuffer> From<&Viewport<'a, T>> for RenderTarget<'a, T> {
fn from(value: &Viewport<'a, T>) -> Self {
RenderTarget::new(value.output, value.mvp, value.x, value.y)
}
}