renderer init: create a detached task only on wasm, block otherwise (#9830)
# Objective - When initializing the renderer, Bevy currently create a detached task - This is needed on wasm but not on native ## Solution - Don't create a detached task on native but block on the future
This commit is contained in:
parent
73e06e33da
commit
401b2e77f3
@ -251,8 +251,7 @@ impl Plugin for RenderPlugin {
|
|||||||
let primary_window = system_state.get(&app.world).get_single().ok().cloned();
|
let primary_window = system_state.get(&app.world).get_single().ok().cloned();
|
||||||
|
|
||||||
let settings = self.wgpu_settings.clone();
|
let settings = self.wgpu_settings.clone();
|
||||||
bevy_tasks::IoTaskPool::get()
|
let async_renderer = async move {
|
||||||
.spawn_local(async move {
|
|
||||||
let instance = wgpu::Instance::new(wgpu::InstanceDescriptor {
|
let instance = wgpu::Instance::new(wgpu::InstanceDescriptor {
|
||||||
backends,
|
backends,
|
||||||
dx12_shader_compiler: settings.dx12_shader_compiler.clone(),
|
dx12_shader_compiler: settings.dx12_shader_compiler.clone(),
|
||||||
@ -272,11 +271,7 @@ impl Plugin for RenderPlugin {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let (device, queue, adapter_info, render_adapter) =
|
let (device, queue, adapter_info, render_adapter) =
|
||||||
renderer::initialize_renderer(
|
renderer::initialize_renderer(&instance, &settings, &request_adapter_options)
|
||||||
&instance,
|
|
||||||
&settings,
|
|
||||||
&request_adapter_options,
|
|
||||||
)
|
|
||||||
.await;
|
.await;
|
||||||
debug!("Configured wgpu adapter Limits: {:#?}", device.limits());
|
debug!("Configured wgpu adapter Limits: {:#?}", device.limits());
|
||||||
debug!("Configured wgpu adapter Features: {:#?}", device.features());
|
debug!("Configured wgpu adapter Features: {:#?}", device.features());
|
||||||
@ -284,8 +279,15 @@ impl Plugin for RenderPlugin {
|
|||||||
future_renderer_resources_wrapper.lock().unwrap();
|
future_renderer_resources_wrapper.lock().unwrap();
|
||||||
*future_renderer_resources_inner =
|
*future_renderer_resources_inner =
|
||||||
Some((device, queue, adapter_info, render_adapter, instance));
|
Some((device, queue, adapter_info, render_adapter, instance));
|
||||||
})
|
};
|
||||||
|
// In wasm, spawn a task and detach it for execution
|
||||||
|
#[cfg(target_arch = "wasm32")]
|
||||||
|
bevy_tasks::IoTaskPool::get()
|
||||||
|
.spawn_local(async_renderer)
|
||||||
.detach();
|
.detach();
|
||||||
|
// Otherwise, just block for it to complete
|
||||||
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
futures_lite::future::block_on(async_renderer);
|
||||||
|
|
||||||
app.init_resource::<ScratchMainWorld>();
|
app.init_resource::<ScratchMainWorld>();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user