use bevy::{prelude::*, winit::WinitPlugin};
use bevy_app_compute::prelude::{
AppComputePlugin, AppComputeWorker, AppComputeWorkerPlugin, ComputeWorker,
};
const MAX_FRAMES_TO_READY: i16 = 10;
pub fn build_app<T>() -> App
where
T: ComputeWorker,
{
let mut app = App::new();
app.add_plugins(DefaultPlugins.build().disable::<WinitPlugin>())
.add_plugins(AppComputePlugin)
.add_plugins(AppComputeWorkerPlugin::<T>::default());
app.finish();
app.cleanup();
let mut is_ready = false;
for _ in 0..MAX_FRAMES_TO_READY {
app.update();
let compute_worker = app.world().get_resource::<AppComputeWorker<T>>();
if compute_worker.unwrap().ready() {
is_ready = true;
break;
}
}
if !is_ready {
panic!("Compute worker didn't complete in {MAX_FRAMES_TO_READY} frames.")
}
app
}