feat: add a headless mode, driven by clap CLI args
--headless renders the current view straight to a PNG and exits, with no window/event loop: it builds its own offscreen wgpu device and reuses the same reference-orbit + ExportRender path as the "Export PNG" button. --width/--height set the output resolution (default 1920x1080); not yet supported with --buddhabrot. Refactors FractalApp::new's state construction and CLI handling into default_state()/apply_cli() so headless mode can reuse them, and factors the PNG tile-render/readback/encode loop into a shared export_to_png_blocking() used by both the windowed export path and headless. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018GFBP9qrNg6NGJWzzP36xe
This commit is contained in:
+15
@@ -16,6 +16,8 @@ mod view;
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
mod cli;
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
mod headless;
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
mod worker;
|
||||
|
||||
use app::FractalApp;
|
||||
@@ -49,11 +51,24 @@ fn wgpu_options() -> eframe::egui_wgpu::WgpuConfiguration {
|
||||
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
fn main() -> eframe::Result {
|
||||
use clap::Parser as _;
|
||||
|
||||
env_logger::builder()
|
||||
.filter_level(log::LevelFilter::Info)
|
||||
.parse_default_env()
|
||||
.init();
|
||||
|
||||
let cli = cli::Cli::parse();
|
||||
if cli.headless {
|
||||
return match headless::run(cli) {
|
||||
Ok(()) => Ok(()),
|
||||
Err(e) => {
|
||||
eprintln!("error: {e}");
|
||||
std::process::exit(1);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
let native_options = eframe::NativeOptions {
|
||||
renderer: eframe::Renderer::Wgpu,
|
||||
wgpu_options: wgpu_options(),
|
||||
|
||||
Reference in New Issue
Block a user