-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
burn_dino/crates/bevy_burn_dino/src/main.rs
Line 561 in b56826d
..DinoVisionTransformerConfig::vits(None, None) // TODO: supply image size fron config |
// ..default()
// });
builder.spawn(UiImage {
image: pca_image.image.clone(),
image_mode: NodeImageMode::Stretch,
..default()
});
});
commands.spawn(Camera2d::default());
}
pub fn viewer_app() -> App {
let args = parse_args::<DinoImportConfig>();
let mut app = App::new();
app.insert_resource(args.clone());
#[cfg(target_arch = "wasm32")]
let primary_window = Some(Window {
// fit_canvas_to_parent: true,
canvas: Some("#bevy".to_string()),
mode: bevy::window::WindowMode::Windowed,
prevent_default_event_handling: true,
title: args.name.clone(),
#[cfg(feature = "perftest")]
present_mode: bevy::window::PresentMode::AutoNoVsync,
#[cfg(not(feature = "perftest"))]
present_mode: bevy::window::PresentMode::AutoVsync,
..default()
});
#[cfg(not(target_arch = "wasm32"))]
let primary_window = Some(Window {
mode: bevy::window::WindowMode::Windowed,
prevent_default_event_handling: false,
resolution: (1024.0, 1024.0).into(),
title: "bevy_burn_dino".to_string(),
#[cfg(feature = "perftest")]
present_mode: bevy::window::PresentMode::AutoNoVsync,
#[cfg(not(feature = "perftest"))]
present_mode: bevy::window::PresentMode::AutoVsync,
..default()
});
app.insert_resource(ClearColor(Color::srgba(0.0, 0.0, 0.0, 0.0)));
let default_plugins = DefaultPlugins
.set(ImagePlugin::default_nearest())
.set(RenderPlugin {
render_creation: RenderCreation::Automatic(WgpuSettings {
features: WgpuFeatures::TEXTURE_ADAPTER_SPECIFIC_FORMAT_FEATURES
| WgpuFeatures::SHADER_F16,
..Default::default()
}),
..Default::default()
})
.set(WindowPlugin {
primary_window,
..default()
});
app.add_plugins(default_plugins);
#[cfg(feature = "editor")]
if args.editor {
app.register_type::<BevyZeroverseConfig>();
app.add_plugins(WorldInspectorPlugin::new());
}
// TODO: add viewer configs
if args.press_esc_to_close {
app.add_systems(Update, press_esc_close);
}
if args.show_fps {
app.add_plugins(FrameTimeDiagnosticsPlugin);
app.add_systems(Startup, fps_display_setup);
app.add_systems(Update, fps_update_system);
}
app
}
fn press_esc_close(
keys: Res<ButtonInput<KeyCode>>,
mut exit: EventWriter<AppExit>
) {
if keys.just_pressed(KeyCode::Escape) {
exit.send(AppExit::Success);
}
}
fn fps_display_setup(
mut commands: Commands,
asset_server: Res<AssetServer>,
) {
commands.spawn((
Text("fps: ".to_string()),
TextFont {
font: asset_server.load("fonts/Caveat-Bold.ttf"),
font_size: 60.0,
..Default::default()
},
TextColor(Color::WHITE),
Node {
position_type: PositionType::Absolute,
bottom: Val::Px(5.0),
left: Val::Px(15.0),
..default()
},
ZIndex(2),
)).with_child((
FpsText,
TextColor(Color::Srgba(GOLD)),
TextFont {
font: asset_server.load("fonts/Caveat-Bold.ttf"),
font_size: 60.0,
..Default::default()
},
TextSpan::default(),
));
}
#[derive(Component)]
struct FpsText;
fn fps_update_system(
diagnostics: Res<DiagnosticsStore>,
mut query: Query<&mut TextSpan, With<FpsText>>,
) {
for mut text in &mut query {
if let Some(fps) = diagnostics.get(&FrameTimeDiagnosticsPlugin::FPS) {
if let Some(value) = fps.smoothed() {
**text = format!("{value:.2}");
}
}
}
}
fn run_app() {
// TODO: move model load to startup/async task
let device = Default::default();
let config = DinoVisionTransformerConfig {
..DinoVisionTransformerConfig::vits(None, None) // TODO: supply image size fron config
};
let dino = load_model::<Wgpu>(&config, &device);
let pca_config = PcaTransformConfig::new(
config.embedding_dimension,
3,
);
let pca_transform = load_pca_model::<Wgpu>(&pca_config, &device);
let mut app = viewer_app();
app.init_resource::<PcaFeatures>();
app.insert_resource(DinoModel {
config,
device: device,
model: Arc::new(Mutex::new(dino)),
});
app.insert_resource(PcaTransformModel {
model: Arc::new(Mutex::new(pca_transform)),
});
app.add_systems(Startup, setup_ui);
app.add_systems(Update, process_frames);