Macro for Loading Internal Binary Assets (#6478)
# Objective The `load_internal_asset` macro is helpful when creating rendering plugins, but it doesn't support load binary assets (like those compiled as spir-v). ## Solution Add a `load_internal_binary_asset` macro that use `include_bytes!`.
This commit is contained in:
		
							parent
							
								
									1170b30785
								
							
						
					
					
						commit
						0aa17d0aca
					
				| @ -443,6 +443,44 @@ macro_rules! load_internal_asset { | |||||||
|     }}; |     }}; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | /// Loads an internal binary asset.
 | ||||||
|  | ///
 | ||||||
|  | /// Internal binary assets (e.g. spir-v shaders) are bundled directly into the app and can't be hot reloaded
 | ||||||
|  | /// using the conventional API. See `DebugAssetServerPlugin`.
 | ||||||
|  | #[cfg(feature = "debug_asset_server")] | ||||||
|  | #[macro_export] | ||||||
|  | macro_rules! load_internal_binary_asset { | ||||||
|  |     ($app: ident, $handle: ident, $path_str: expr, $loader: expr) => {{ | ||||||
|  |         { | ||||||
|  |             let mut debug_app = $app | ||||||
|  |                 .world | ||||||
|  |                 .non_send_resource_mut::<$crate::debug_asset_server::DebugAssetApp>(); | ||||||
|  |             $crate::debug_asset_server::register_handle_with_loader( | ||||||
|  |                 $loader, | ||||||
|  |                 &mut debug_app, | ||||||
|  |                 $handle, | ||||||
|  |                 file!(), | ||||||
|  |                 $path_str, | ||||||
|  |             ); | ||||||
|  |         } | ||||||
|  |         let mut assets = $app.world.resource_mut::<$crate::Assets<_>>(); | ||||||
|  |         assets.set_untracked($handle, ($loader)(include_bytes!($path_str).as_ref())); | ||||||
|  |     }}; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /// Loads an internal binary asset.
 | ||||||
|  | ///
 | ||||||
|  | /// Internal binary assets (e.g. spir-v shaders) are bundled directly into the app and can't be hot reloaded
 | ||||||
|  | /// using the conventional API. See `DebugAssetServerPlugin`.
 | ||||||
|  | #[cfg(not(feature = "debug_asset_server"))] | ||||||
|  | #[macro_export] | ||||||
|  | macro_rules! load_internal_binary_asset { | ||||||
|  |     ($app: ident, $handle: ident, $path_str: expr, $loader: expr) => {{ | ||||||
|  |         let mut assets = $app.world.resource_mut::<$crate::Assets<_>>(); | ||||||
|  |         assets.set_untracked($handle, ($loader)(include_bytes!($path_str).as_ref())); | ||||||
|  |     }}; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| #[cfg(test)] | #[cfg(test)] | ||||||
| mod tests { | mod tests { | ||||||
|     use bevy_app::App; |     use bevy_app::App; | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 研究社交
						研究社交