use super::*;
pub use hexga_graphics::*;
pub mod prelude
{
pub use super::Pen;
pub(crate) use super::{AppGraphics, GpuMessage, wgpu};
pub use hexga_graphics::prelude::*;
}
pub struct Pen;
#[derive(Debug)]
pub struct AppGraphics {
}
impl AppGraphics
{
pub(crate) fn new() -> Self { Self {} }
pub(crate) async fn init_gpu(
instance: gpu::GpuInstance,
surface: Option<graphics::GpuSurface<'static>>,
window: Arc<WinitWindow>,
mut param: GpuParam,
) -> GpuResult<Self>
{
let gpu_init = GpuInit::from_instance_and_surface(instance, surface, param).await?;
let output = Gpu::from_init(gpu_init).await?;
Ok(Self::new())
}
pub(crate) async fn async_init_gpu(
instance: gpu::GpuInstance,
surface: Option<graphics::GpuSurface<'static>>,
window: Arc<WinitWindow>,
param: GpuParam,
proxy: EventLoopProxy,
)
{
let _ = proxy.send_event(AppInternalEvent::Gpu(
Self::init_gpu(instance, surface, window, param).await,
));
}
pub(crate) fn init(
window: Arc<WinitWindow>,
mut param: GpuParam,
proxy: EventLoopProxy,
) -> GpuResult
{
let surface_size: Point2 = window.inner_size().convert();
let surface_size = surface_size.max(one());
if param.compatible_surface.is_none()
{
param.compatible_surface = Some(window.clone().into());
}
let instance = gpu::GpuInstance::new(¶m.instance);
let surface = Some(
instance
.wgpu
.create_surface(param.compatible_surface.take().expect("missing surface"))?
.into(),
);
Self::async_init_gpu(instance, surface, window, param, proxy).spawn();
Ok(())
}
}
pub(crate) type GpuMessage = GpuResult<AppGraphics>;