move export overide desision from reneder node to node runtime

This commit is contained in:
Timon Schelling
2025-10-08 22:01:55 +00:00
parent e018b49c56
commit 9a33973e6e
5 changed files with 48 additions and 49 deletions

View File

@@ -42,7 +42,6 @@ async fn render_intermediate<'a: 'n, T: 'static + Render + WasmNotSend + Send +
Context -> Table<GradientStops>,
)]
data: impl Node<Context<'static>, Output = T>,
editor_api: impl Node<Context<'static>, Output = &'a WasmEditorApi>,
) -> RenderIntermediate {
let render_params = ctx
.vararg(0)
@@ -58,38 +57,29 @@ async fn render_intermediate<'a: 'n, T: 'static + Render + WasmNotSend + Send +
data.collect_metadata(&mut metadata, footprint, None);
let contains_artboard = data.contains_artboard();
let use_vello = {
let editor_api = editor_api.eval(None).await;
#[cfg(target_family = "wasm")]
{
editor_api.editor_preferences.use_vello() && !render_params.for_export && matches!(render_params.render_output_type, graphene_svg_renderer::RenderOutputType::Vello)
match &render_params.render_output_type {
RenderOutputTypeRequest::Vello => {
let mut scene = vello::Scene::new();
let mut context = wgpu_executor::RenderContext::default();
data.render_to_vello(&mut scene, Default::default(), &mut context, render_params);
RenderIntermediate {
ty: RenderIntermediateType::Vello(Arc::new((scene, context))),
metadata,
contains_artboard,
}
}
#[cfg(not(target_family = "wasm"))]
{
(editor_api.editor_preferences.use_vello() || render_params.for_export) && matches!(render_params.render_output_type, graphene_svg_renderer::RenderOutputType::Vello)
}
};
RenderOutputTypeRequest::Svg => {
let mut render = SvgRender::new();
if use_vello {
let mut scene = vello::Scene::new();
data.render_svg(&mut render, render_params);
let mut context = wgpu_executor::RenderContext::default();
data.render_to_vello(&mut scene, Default::default(), &mut context, render_params);
RenderIntermediate {
ty: RenderIntermediateType::Vello(Arc::new((scene, context))),
metadata,
contains_artboard,
}
} else {
let mut render = SvgRender::new();
data.render_svg(&mut render, render_params);
RenderIntermediate {
ty: RenderIntermediateType::Svg(Arc::new((render.svg.to_svg_string(), render.image_data, render.svg_defs.clone()))),
metadata,
contains_artboard,
RenderIntermediate {
ty: RenderIntermediateType::Svg(Arc::new((render.svg.to_svg_string(), render.image_data, render.svg_defs.clone()))),
metadata,
contains_artboard,
}
}
}
}
@@ -104,8 +94,7 @@ async fn create_context<'a: 'n>(
let render_output_type = match render_config.export_format {
ExportFormat::Svg => RenderOutputTypeRequest::Svg,
ExportFormat::Texture => RenderOutputTypeRequest::Vello,
ExportFormat::Canvas => RenderOutputTypeRequest::Vello,
ExportFormat::Raster => RenderOutputTypeRequest::Vello,
};
let render_params = RenderParams {
@@ -153,12 +142,7 @@ async fn render<'a: 'n>(
None
};
let mut output_format = render_params.render_output_type;
// TODO: Actually request the right thing upfront
if let RenderIntermediateType::Svg(_) = ty {
output_format = RenderOutputTypeRequest::Svg;
}
let data = match (output_format, &ty) {
let data = match (render_params.render_output_type, &ty) {
(RenderOutputTypeRequest::Svg, RenderIntermediateType::Svg(svg_data)) => {
let mut svg_renderer = SvgRender::new();
if !contains_artboard && !render_params.hide_artboards {