2024-08-23 11:22:09 +00:00
|
|
|
#![deny(rust_2018_idioms)]
|
|
|
|
#![deny(unused_must_use)]
|
|
|
|
|
|
|
|
pub mod input;
|
|
|
|
pub mod presentationcore;
|
|
|
|
mod renderbackend;
|
|
|
|
pub mod traits;
|
|
|
|
pub mod vri;
|
|
|
|
pub mod wsi;
|
|
|
|
pub mod xri;
|
|
|
|
|
|
|
|
pub mod prelude;
|
|
|
|
|
|
|
|
use anyhow::Result;
|
|
|
|
|
|
|
|
use traits::RenderCore;
|
|
|
|
use ui::prelude::*;
|
|
|
|
use vulkan_rs::prelude::*;
|
2025-02-26 13:51:44 +00:00
|
|
|
use wsi::vulkanwindowrendercore::VulkanWindowRenderCore;
|
2024-08-23 11:22:09 +00:00
|
|
|
|
|
|
|
use crate::prelude::*;
|
|
|
|
|
|
|
|
use std::sync::{Arc, Mutex};
|
|
|
|
|
|
|
|
#[derive(Debug, Clone, Copy)]
|
|
|
|
pub struct RenderCoreCreateInfo {
|
|
|
|
pub usage: VkImageUsageFlagBits,
|
|
|
|
pub format: VkFormat,
|
|
|
|
pub vsync: bool,
|
|
|
|
}
|
|
|
|
|
2025-02-26 13:51:44 +00:00
|
|
|
pub fn create_render_core<S: TScene + 'static>(
|
2024-08-23 11:22:09 +00:00
|
|
|
presentation_core: &PresentationCore,
|
|
|
|
device: &Arc<Device>,
|
|
|
|
queue: &Arc<Mutex<Queue>>,
|
|
|
|
create_info: RenderCoreCreateInfo,
|
2025-02-26 13:51:44 +00:00
|
|
|
) -> Result<(Box<dyn RenderCore>, TargetMode<()>)> {
|
2024-08-23 11:22:09 +00:00
|
|
|
match presentation_core.backend() {
|
|
|
|
PresentationBackend::Window(wsi) => {
|
|
|
|
let (render_core, target_mode) =
|
2025-02-26 13:51:44 +00:00
|
|
|
VulkanWindowRenderCore::<S>::new(wsi.clone(), device, queue, create_info)?;
|
2024-08-23 11:22:09 +00:00
|
|
|
|
|
|
|
Ok((Box::new(render_core), target_mode))
|
|
|
|
}
|
|
|
|
PresentationBackend::OpenXR(xri) => {
|
|
|
|
let (render_core, target_mode) =
|
|
|
|
xri::openxrrendercore::OpenXRRenderCore::new(xri, device, queue, create_info)?;
|
|
|
|
|
|
|
|
Ok((Box::new(render_core), target_mode))
|
|
|
|
}
|
|
|
|
PresentationBackend::OpenVR(vri) => {
|
|
|
|
let (render_core, target_mode) =
|
|
|
|
vri::openvrrendercore::OpenVRRenderCore::new(vri, device, queue, create_info)?;
|
|
|
|
|
|
|
|
Ok((Box::new(render_core), target_mode))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|