render_plugin: Begin add window plugin
Some checks failed
Build legacy Nix package on Ubuntu / build (push) Failing after 3m7s

This commit is contained in:
Florian RICHER 2025-05-18 19:28:34 +02:00
parent 0ee29a3649
commit ae0a2be097
Signed by: florian.richer
GPG key ID: C73D37CBED7BFC77
8 changed files with 134 additions and 48 deletions

View file

@ -1,11 +1,21 @@
use bevy_app::{App, AppLabel, Last, Plugin, SubApp};
use bevy_ecs::{
schedule::{IntoScheduleConfigs, Schedule, ScheduleLabel, SystemSet},
system::Commands,
system::{Commands, Res},
world::World,
};
use engine_vulkan::{
VulkanCommandBufferAllocator, VulkanDescriptorSetAllocator, VulkanDevice, VulkanGraphicsQueue,
VulkanMemoryAllocator,
};
use engine_window::raw_handle::WindowWrapper;
use window::WindowRenderPlugin;
pub mod window;
#[derive(Debug, Hash, PartialEq, Eq, Clone, SystemSet)]
pub enum RenderSystems {
ManageViews,
Prepare,
Queue,
Render,
@ -33,33 +43,69 @@ pub struct RenderApp;
pub struct RenderPlugin;
impl Plugin for RenderPlugin {
fn build(&self, app: &mut App) {
fn build(&self, _app: &mut App) {}
fn ready(&self, app: &App) -> bool {
let world = app.world();
world.get_resource::<WindowWrapper>().is_some()
&& world.get_resource::<VulkanDevice>().is_some()
&& world.get_resource::<VulkanGraphicsQueue>().is_some()
&& world.get_resource::<VulkanMemoryAllocator>().is_some()
&& world
.get_resource::<VulkanCommandBufferAllocator>()
.is_some()
&& world
.get_resource::<VulkanDescriptorSetAllocator>()
.is_some()
}
fn finish(&self, app: &mut App) {
let mut render_app = SubApp::new();
render_app.update_schedule = Some(Render.intern());
render_app.add_schedule(Render::base_schedule());
render_app.add_systems(Render, test_prepare.in_set(RenderSystems::Prepare));
render_app.add_systems(Render, test_queue.in_set(RenderSystems::Queue));
render_app.add_systems(Render, test_render.in_set(RenderSystems::Render));
render_app.add_systems(Render, test_present.in_set(RenderSystems::Present));
extract_app_resources(app.world_mut(), render_app.world_mut());
app.insert_sub_app(RenderApp, render_app);
app.add_plugins(WindowRenderPlugin);
}
fn cleanup(&self, app: &mut App) {
app.remove_sub_app(RenderApp);
}
}
fn test_prepare(mut commands: Commands) {
log::info!("test_prepare");
}
fn extract_app_resources(world: &mut World, render_world: &mut World) {
let window_wrapper = world
.get_resource::<WindowWrapper>()
.expect("Failed to get WindowWrapper. Check is WindowPlugin is added before RenderPlugin.");
fn test_queue(mut commands: Commands) {
log::info!("test_queue");
}
let vulkan_device = world
.get_resource::<VulkanDevice>()
.expect("Failed to get Vulkan device. Check is VulkanPlugin is added before RenderPlugin.");
fn test_render(mut commands: Commands) {
log::info!("test_render");
}
let vulkan_graphics_queue = world.get_resource::<VulkanGraphicsQueue>().expect(
"Failed to get Vulkan graphics queue. Check is VulkanPlugin is added before RenderPlugin.",
);
fn test_present(mut commands: Commands) {
log::info!("test_present");
let vulkan_memory_allocator = world
.get_resource::<VulkanMemoryAllocator>()
.expect("Failed to get Vulkan memory allocator. Check is VulkanPlugin is added before RenderPlugin.");
let vulkan_command_buffer_allocator = world
.get_resource::<VulkanCommandBufferAllocator>()
.expect("Failed to get Vulkan command buffer allocator. Check is VulkanPlugin is added before RenderPlugin.");
let vulkan_descriptor_set_allocator = world
.get_resource::<VulkanDescriptorSetAllocator>()
.expect("Failed to get Vulkan descriptor set allocator. Check is VulkanPlugin is added before RenderPlugin.");
render_world.insert_resource(vulkan_device.clone());
render_world.insert_resource(vulkan_graphics_queue.clone());
render_world.insert_resource(vulkan_memory_allocator.clone());
render_world.insert_resource(vulkan_command_buffer_allocator.clone());
render_world.insert_resource(vulkan_descriptor_set_allocator.clone());
render_world.insert_resource(window_wrapper.clone());
}