Skip to main content

mittens_engine/engine/graphics/
mod.rs

1pub mod bounds;
2pub mod mesh;
3pub mod pipeline_descriptor_set_layouts;
4pub mod post_processing;
5pub mod primitives;
6pub mod render_assets;
7pub mod render_info;
8pub mod skin;
9pub mod visual_world;
10pub mod vulkano_renderer;
11pub(crate) mod vulkano_swapchain;
12pub mod xr_renderer;
13pub mod xr_swapchain;
14
15pub use mesh::{CpuMesh, CpuVertex, MeshFactory};
16pub use post_processing::{
17    BloomConfig, BloomSource, BlurPassConfig, BokehConfig, EmissivePassConfig,
18    PostProcessingConfig, PostProcessingRenderer,
19};
20#[allow(unused_imports)]
21pub use primitives::{
22    GpuRenderable, Material, MaterialHandle, MeshHandle, Renderable, TextureHandle, Transform,
23    TransformMatrix,
24};
25
26pub use render_assets::{BuiltinMeshType, RenderAssets};
27pub use skin::{Skin, SkinId};
28pub use visual_world::TextureFiltering;
29pub use visual_world::VisualWorld;
30pub use visual_world::{CameraData, CameraTarget, VisualCamera};
31pub(crate) mod vulkano_texture_upload;
32pub use vulkano_renderer::VulkanoRenderer;
33pub use xr_swapchain::XRSwapchain;
34
35#[derive(Debug, Clone, Copy, PartialEq, Eq)]
36pub enum MsaaMode {
37    Off,
38    Msaa4x,
39}
40
41impl Default for MsaaMode {
42    fn default() -> Self {
43        Self::Msaa4x
44    }
45}
46
47/// Minimal Vulkan handle bundle for OpenXR session creation.
48///
49/// OpenXR wants raw Vulkan handles as opaque pointers.
50#[derive(Debug, Clone, Copy)]
51pub struct XrVulkanGraphics {
52    pub vk_instance: openxr::sys::platform::VkInstance,
53    pub vk_physical_device: openxr::sys::platform::VkPhysicalDevice,
54    pub vk_device: openxr::sys::platform::VkDevice,
55    pub vk_queue: *const std::ffi::c_void,
56    pub queue_family_index: u32,
57    pub queue_index: u32,
58}
59
60pub use render_info::RenderInfo;
61/// Trait for uploading CPU meshes to GPU.
62/// This abstraction allows different renderer implementations
63/// to provide mesh uploading functionality without exposing renderer-specific details.
64pub trait MeshUploader {
65    fn upload_mesh(&mut self, mesh: &CpuMesh) -> Result<MeshHandle, Box<dyn std::error::Error>>;
66}
67
68/// Trait for uploading decoded textures to the GPU.
69///
70/// Textures are provided as RGBA8 pixels.
71pub trait TextureUploader {
72    fn upload_texture_rgba8(
73        &mut self,
74        rgba: &[u8],
75        width: u32,
76        height: u32,
77    ) -> Result<TextureHandle, Box<dyn std::error::Error>>;
78
79    fn upload_texture_bc7(
80        &mut self,
81        bc7_blocks: &[u8],
82        width: u32,
83        height: u32,
84        srgb: bool,
85    ) -> Result<TextureHandle, Box<dyn std::error::Error>>;
86}
87
88/// Convenience super-trait for types that can upload both meshes and textures.
89pub trait RenderUploader: MeshUploader + TextureUploader {}
90
91impl<T> RenderUploader for T where T: MeshUploader + TextureUploader {}
92
93/// Graphics/Vulkan placeholder.
94pub struct Graphics;
95
96impl Graphics {
97    pub fn new() -> Self {
98        Self
99    }
100}