diff --git a/Cargo.toml b/Cargo.toml index d57dd35..33caa5b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,8 +4,9 @@ resolver = "2" members = [ "crates/renderer", "crates/window", - "crates/game" - ] + "crates/game", + "crates/text", "crates/bevy_vulkan_render", +] [profile.debug-release] inherits = "release" diff --git a/crates/bevy_vulkan_render/Cargo.toml b/crates/bevy_vulkan_render/Cargo.toml new file mode 100644 index 0000000..042ae0f --- /dev/null +++ b/crates/bevy_vulkan_render/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "bevy_vulkan_render" +version = "0.1.0" +edition = "2024" + +[dependencies] +bevy_ecs = { workspace = true } +bevy_app = { workspace = true } +bevy_tasks = { workspace = true } +bevy_window = { workspace = true } +renderer = { path = "../renderer" } \ No newline at end of file diff --git a/crates/bevy_vulkan_render/src/lib.rs b/crates/bevy_vulkan_render/src/lib.rs new file mode 100644 index 0000000..cfd69c0 --- /dev/null +++ b/crates/bevy_vulkan_render/src/lib.rs @@ -0,0 +1,54 @@ +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; + +use bevy_app::AppLabel; +use bevy_ecs::schedule::ScheduleLabel; +use bevy_window::{PrimaryWindow, RawHandleWrapperHolder}; + +/// The main render schedule. +#[derive(ScheduleLabel, Debug, Hash, PartialEq, Eq, Clone, Default)] +pub struct Render; + +/// The startup schedule of the [`RenderApp`] +#[derive(ScheduleLabel, Debug, Hash, PartialEq, Eq, Clone, Default)] +pub struct RenderStartup; + +#[derive(Debug, Default)] +pub struct VulkanRenderPlugin; + +/// A label for the rendering sub-app. +#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq, AppLabel)] +pub struct RenderApp; + +impl Plugin for VulkanRenderPlugin { + fn build(&self, app: &mut bevy_app::App) { + app.add_systems(Startup, startup); + } +} + +fn init_vulkan(app: &mut App) { + let mut window_query = app + .world_mut() + .query_filtered::<&RawHandleWrapperHolder, With>(); + + let primary_window = window_query.single(app.world()).ok().cloned(); +} + +fn initialize_render_app(app: &mut App) { + let mut render_app = SubApp::new(); + render_app.update_schedule = Some(Render.intern()); + + let mut should_run_startup = true; + render_app.set_extract(move |main, render| { + if should_run_startup { + render.run_schedule(RenderStartup); + should_run_startup = false; + } + + // extract logic here + }); + + app.insert_sub_app(RenderApp, render_app); +} + +fn startup() {}