mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-29 23:28:12 +08:00
Only create parent ref if var args are used in context + Cleanup
This commit is contained in:
@@ -272,11 +272,9 @@ impl Default for OwnedContextImpl {
|
|||||||
|
|
||||||
impl core::hash::Hash for OwnedContextImpl {
|
impl core::hash::Hash for OwnedContextImpl {
|
||||||
fn hash<H: core::hash::Hasher>(&self, state: &mut H) {
|
fn hash<H: core::hash::Hasher>(&self, state: &mut H) {
|
||||||
debug!("Calculating hash for {:#?}", self);
|
|
||||||
self.footprint.hash(state);
|
self.footprint.hash(state);
|
||||||
// TODO: Reenable before committing
|
self.varargs.as_ref().map(|x| Arc::as_ptr(x).addr()).hash(state);
|
||||||
// self.varargs.as_ref().map(|x| Arc::as_ptr(x).addr()).hash(state);
|
self.parent.as_ref().map(|x| Arc::as_ptr(x).addr()).hash(state);
|
||||||
// self.parent.as_ref().map(|x| Arc::as_ptr(x).addr()).hash(state);
|
|
||||||
self.index.hash(state);
|
self.index.hash(state);
|
||||||
self.real_time.map(|x| x.to_bits()).hash(state);
|
self.real_time.map(|x| x.to_bits()).hash(state);
|
||||||
self.animation_time.map(|x| x.to_bits()).hash(state);
|
self.animation_time.map(|x| x.to_bits()).hash(state);
|
||||||
@@ -290,7 +288,10 @@ impl OwnedContextImpl {
|
|||||||
let index = value.try_index();
|
let index = value.try_index();
|
||||||
let time = value.try_time();
|
let time = value.try_time();
|
||||||
let frame_time = value.try_animation_time();
|
let frame_time = value.try_animation_time();
|
||||||
let parent = value.arc_clone();
|
let parent = match value.varargs_len() {
|
||||||
|
Ok(x) if x > 0 => value.arc_clone(),
|
||||||
|
_ => None,
|
||||||
|
};
|
||||||
OwnedContextImpl {
|
OwnedContextImpl {
|
||||||
footprint,
|
footprint,
|
||||||
varargs: None,
|
varargs: None,
|
||||||
|
|||||||
@@ -217,15 +217,29 @@ async fn boundless_footprint<T: 'n + 'static>(
|
|||||||
Context -> GraphicGroupTable,
|
Context -> GraphicGroupTable,
|
||||||
Context -> ImageFrameTable<Color>,
|
Context -> ImageFrameTable<Color>,
|
||||||
Context -> TextureFrameTable,
|
Context -> TextureFrameTable,
|
||||||
|
Context -> String,
|
||||||
|
Context -> f64,
|
||||||
)]
|
)]
|
||||||
transform_target: impl Node<Context<'static>, Output = Instances<T>>,
|
transform_target: impl Node<Context<'static>, Output = T>,
|
||||||
) -> Instances<T> {
|
) -> T {
|
||||||
let ctx = OwnedContextImpl::from(ctx).with_footprint(Footprint::BOUNDLESS).with_real_time(0.).erase_parent();
|
let ctx = OwnedContextImpl::from(ctx).with_footprint(Footprint::BOUNDLESS);
|
||||||
|
|
||||||
let mut hasher = std::collections::hash_map::DefaultHasher::new();
|
transform_target.eval(ctx.into_context()).await
|
||||||
ctx.hash(&mut hasher);
|
}
|
||||||
let hash = hasher.finish();
|
#[node_macro::node(category("Debug"))]
|
||||||
debug!("The context with hash {hash} is now: {ctx:#?}");
|
async fn freeze_real_time<T: 'n + 'static>(
|
||||||
|
ctx: impl Ctx + CloneVarArgs + ExtractAll,
|
||||||
|
#[implementations(
|
||||||
|
Context -> VectorDataTable,
|
||||||
|
Context -> GraphicGroupTable,
|
||||||
|
Context -> ImageFrameTable<Color>,
|
||||||
|
Context -> TextureFrameTable,
|
||||||
|
Context -> String,
|
||||||
|
Context -> f64,
|
||||||
|
)]
|
||||||
|
transform_target: impl Node<Context<'static>, Output = T>,
|
||||||
|
) -> T {
|
||||||
|
let ctx = OwnedContextImpl::from(ctx).with_real_time(0.);
|
||||||
|
|
||||||
transform_target.eval(ctx.into_context()).await
|
transform_target.eval(ctx.into_context()).await
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -307,6 +307,8 @@ fn node_registry() -> HashMap<ProtoNodeIdentifier, HashMap<NodeIOTypes, NodeCons
|
|||||||
async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => wgpu_executor::WindowHandle]),
|
async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => wgpu_executor::WindowHandle]),
|
||||||
async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => graphene_std::SurfaceFrame]),
|
async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => graphene_std::SurfaceFrame]),
|
||||||
async_node!(graphene_core::memo::MemoNode<_, _>, input: UVec2, fn_params: [UVec2 => graphene_std::SurfaceFrame]),
|
async_node!(graphene_core::memo::MemoNode<_, _>, input: UVec2, fn_params: [UVec2 => graphene_std::SurfaceFrame]),
|
||||||
|
async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => f64]),
|
||||||
|
async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => String]),
|
||||||
async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => RenderOutput]),
|
async_node!(graphene_core::memo::MemoNode<_, _>, input: Context, fn_params: [Context => RenderOutput]),
|
||||||
async_node!(graphene_core::memo::ImpureMemoNode<_, _, _>, input: Context, fn_params: [Context => GraphicElement]),
|
async_node!(graphene_core::memo::ImpureMemoNode<_, _, _>, input: Context, fn_params: [Context => GraphicElement]),
|
||||||
async_node!(graphene_core::memo::ImpureMemoNode<_, _, _>, input: Context, fn_params: [Context => GraphicGroupTable]),
|
async_node!(graphene_core::memo::ImpureMemoNode<_, _, _>, input: Context, fn_params: [Context => GraphicGroupTable]),
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ pub fn wrap_network_in_scope(mut network: NodeNetwork, editor_api: Arc<WasmEdito
|
|||||||
DocumentNode {
|
DocumentNode {
|
||||||
manual_composition: Some(concrete!(Context)),
|
manual_composition: Some(concrete!(Context)),
|
||||||
inputs: vec![NodeInput::node(NodeId(0), 0)],
|
inputs: vec![NodeInput::node(NodeId(0), 0)],
|
||||||
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::memo::MemoNode")),
|
implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::memo::ImpureMemoNode")),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
// TODO: Add conversion step
|
// TODO: Add conversion step
|
||||||
|
|||||||
Reference in New Issue
Block a user