diff options
Diffstat (limited to 'engine/src/rendering')
| -rw-r--r-- | engine/src/rendering/backend/opengl.rs | 39 | ||||
| -rw-r--r-- | engine/src/rendering/main_render_pass.rs | 13 | ||||
| -rw-r--r-- | engine/src/rendering/shader.rs | 19 | ||||
| -rw-r--r-- | engine/src/rendering/shader/default.rs | 16 |
4 files changed, 71 insertions, 16 deletions
diff --git a/engine/src/rendering/backend/opengl.rs b/engine/src/rendering/backend/opengl.rs index 41d6968..c545ccc 100644 --- a/engine/src/rendering/backend/opengl.rs +++ b/engine/src/rendering/backend/opengl.rs @@ -196,10 +196,13 @@ fn prepare_windows( windowing_context: Single<WindowingContext>, graphics_props: Single<GraphicsProperties>, mut actions: Actions, -) +) -> Result<(), crate::Error> { + let windowing_context = windowing_context.get()?; + let graphics_props = graphics_props.get()?; + let Some(display_handle) = windowing_context.display_handle() else { - return; + return Ok(()); }; for (window_ent_id, (window, mut window_creation_attrs)) in @@ -259,6 +262,8 @@ fn prepare_windows( actions.add_components(window_ent_id, (CreationReady,)); } } + + Ok(()) } #[tracing::instrument(skip_all)] @@ -271,8 +276,15 @@ fn init_window_graphics( graphics_props: Single<GraphicsProperties>, mut graphics_ctx: Single<GraphicsContext>, mut actions: Actions, -) +) -> Result<(), crate::Error> { + let Ok(graphics_ctx) = graphics_ctx.get_mut() else { + unreachable!(); + }; + + let windowing_context = windowing_context.get()?; + let graphics_props = graphics_props.get()?; + for (window_ent_id, (window, window_gl_config)) in window_query.iter_with_euids() { tracing::info!( window_entity_id=%window_ent_id, @@ -409,6 +421,8 @@ fn init_window_graphics( }, ); } + + Ok(()) } #[tracing::instrument(skip_all)] @@ -418,8 +432,17 @@ fn handle_commands( mut command_queue: Single<CommandQueue>, assets: Single<Assets>, shader_context: Single<ShaderContext>, -) +) -> Result<(), crate::Error> { + let Ok(graphics_ctx) = graphics_ctx.get_mut() else { + unreachable!(); + }; + + let object_store = object_store.get_mut()?; + let command_queue = command_queue.get_mut()?; + let assets = assets.get()?; + let shader_context = shader_context.get()?; + let GraphicsContext { ref gl_context, ref mut surfaces, @@ -429,7 +452,7 @@ fn handle_commands( } = *graphics_ctx; let Some(gl_context) = gl_context else { - return; + return Ok(()); }; let mut activated_gl_shader_program: Option<(ObjectId, GlShaderProgram)> = None; @@ -676,8 +699,8 @@ fn handle_commands( Command::CreateTexture(texture_asset) => { if let Err(err) = create_texture_object( gl_context, - &mut object_store, - &assets, + object_store, + assets, &texture_asset, ) { tracing::error!("Failed to create texture object: {err}"); @@ -1015,6 +1038,8 @@ fn handle_commands( } } } + + Ok(()) } fn create_gl_context( diff --git a/engine/src/rendering/main_render_pass.rs b/engine/src/rendering/main_render_pass.rs index ec30dc5..02e0ca0 100644 --- a/engine/src/rendering/main_render_pass.rs +++ b/engine/src/rendering/main_render_pass.rs @@ -3,6 +3,7 @@ use crate::draw_flags::{DrawFlags, NoDraw, PolygonModeConfig}; use crate::ecs::query::term::{With, Without}; use crate::ecs::sole::Single; use crate::ecs::Query; +use crate::error; use crate::model::{MaterialSearchResult, Model}; use crate::rendering::object::{Id as ObjectId, Store as ObjectStore}; use crate::rendering::shader::default::ASSET_LABEL as DEFAULT_SHADER_ASSET_LABEL; @@ -42,13 +43,17 @@ pub fn add_main_render_passes( shader_context: Single<ShaderContext>, mut render_passes: Single<RenderPasses>, mut object_store: Single<ObjectStore>, -) +) -> Result<(), crate::Error> { + let assets = assets.get()?; + let shader_context = shader_context.get()?; + let render_passes = render_passes.get_mut()?; + let object_store = object_store.get_mut()?; + let Some(default_shader_asset) = assets .get_handle_to_loaded::<ShaderModuleSource>(DEFAULT_SHADER_ASSET_LABEL.clone()) else { - tracing::error!("Default shader asset is not loaded"); - return; + return Err(error!("Default shader asset is not loaded")); }; let render_pass = render_passes.passes.push_front_mut(RenderPass { @@ -237,4 +242,6 @@ pub fn add_main_render_passes( } } } + + Ok(()) } diff --git a/engine/src/rendering/shader.rs b/engine/src/rendering/shader.rs index 961bea2..6b68e1e 100644 --- a/engine/src/rendering/shader.rs +++ b/engine/src/rendering/shader.rs @@ -1016,14 +1016,27 @@ pub(super) fn prepare(collector: &mut crate::ecs::extension::Collector<'_>) ); } -fn initialize(mut assets: Single<Assets>) +fn initialize(mut assets: Single<Assets>) -> Result<(), crate::Error> { + let assets = assets.get_mut()?; + assets.set_importer::<_, _>(["slang"], import_slang_asset); + + Ok(()) } #[tracing::instrument(skip_all)] -fn load_modules(mut context: Single<Context>, assets: Single<Assets>) +fn load_modules( + mut context: Single<Context>, + assets: Single<Assets>, +) -> Result<(), crate::Error> { + let Ok(context) = context.get_mut() else { + unreachable!(); + }; + + let assets = assets.get()?; + for AssetEvent::Stored(asset_id, asset_label) in assets.events().last_tick_events() { let asset_handle = AssetHandle::<ModuleSource>::from_id(*asset_id); @@ -1124,6 +1137,8 @@ fn load_modules(mut context: Single<Context>, assets: Single<Assets>) ); } } + + Ok(()) } fn load_module( diff --git a/engine/src/rendering/shader/default.rs b/engine/src/rendering/shader/default.rs index a60fd61..3194706 100644 --- a/engine/src/rendering/shader/default.rs +++ b/engine/src/rendering/shader/default.rs @@ -42,9 +42,9 @@ pub static ASSET_LABEL: LazyLock<AssetLabel> = LazyLock::new(|| AssetLabel { name: Some("default_shader".into()), }); -pub fn initialize(mut assets: Single<Assets>) +pub fn initialize(mut assets: Single<Assets>) -> Result<(), crate::Error> { - assets.store_with_label( + assets.get_mut()?.store_with_label( ASSET_LABEL.clone(), ShaderModuleSource { name: "default_shader.slang".into(), @@ -54,6 +54,8 @@ pub fn initialize(mut assets: Single<Assets>) | ShaderEntrypointFlags::FRAGMENT, }, ); + + Ok(()) } pub fn enqueue_set_shader_bindings( @@ -66,11 +68,15 @@ pub fn enqueue_set_shader_bindings( shader_context: Single<ShaderContext>, global_light: Single<GlobalLight>, mut actions: Actions, -) +) -> Result<(), crate::Error> { + let assets = assets.get()?; + let shader_context = shader_context.get()?; + let global_light = global_light.get()?; + let Some((camera, camera_world_pos, _)) = camera_query.iter().next() else { tracing::trace!("No current camera"); - return; + return Ok(()); }; let default_shader_asset = assets @@ -344,6 +350,8 @@ pub fn enqueue_set_shader_bindings( actions.add_components(entity_id, (shader_bindings.clone(),)); } } + + Ok(()) } fn create_model_matrix(transform: Transform) -> Matrix<f32, 4, 4> |
