use super::*;
#[derive(Debug)]
pub struct GpuSurface<'a>
{
pub wgpu: wgpu::Surface<'a>,
}
impl<'a> From<wgpu::Surface<'a>> for GpuSurface<'a>
{
fn from(surface: wgpu::Surface<'a>) -> Self { Self { wgpu: surface } }
}
impl<'a> From<GpuSurface<'a>> for wgpu::Surface<'a>
{
fn from(surface: GpuSurface<'a>) -> Self { surface.wgpu }
}
#[derive(Debug)]
pub struct GpuConfiguredSurface<'a>
{
pub wgpu: WgpuConfiguredSurface<'a>,
}
#[derive(Debug)]
pub struct WgpuConfiguredSurface<'a>
{
pub surface: GpuSurface<'a>,
pub configuration: wgpu::SurfaceConfiguration,
}
impl<'a> GpuConfiguredSurface<'a>
{
pub fn from_surface(surface: GpuSurface<'a>, size: Point2) -> Self
{
let size = size.max(one());
let configuration = surface.wgpu.get_default_config(&Gpu.wgpu.adapter, size.x as _, size.y as _).unwrap();
surface.wgpu.configure(&Gpu.wgpu.device, &configuration);
Self{ wgpu: WgpuConfiguredSurface { surface, configuration } }
}
fn size(&self) -> Point2
{
point2(self.wgpu.configuration.width as _, self.wgpu.configuration.height as _)
}
}
impl<'a> SetSize<int, 2> for GpuConfiguredSurface<'a>
{
fn set_size(&mut self, size: Vector<int, 2>) -> &mut Self {
let size = size.max(one());
self.wgpu.configuration.width = size.x as _;
self.wgpu.configuration.height = size.y as _;
self.wgpu.surface.wgpu.configure(&Gpu.wgpu.device, &self.wgpu.configuration);
self
}
}
impl<'a> GetSize<int, 2> for GpuConfiguredSurface<'a>
{
fn size(&self) -> Vector<int,2> {
point2(self.wgpu.configuration.width as _, self.wgpu.configuration.height as _)
}
}