48 lines
20 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="A render node that can be added to a `RenderGraph`."><title>Node in maplibre::render::graph - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="maplibre" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc trait"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">&#9776;</button></nav><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../maplibre/index.html">maplibre</a><span class="version">0.1.0</span></h2></div><h2 class="location"><a href="#">Node</a></h2><div class="sidebar-elems"><section><h3><a href="#required-methods">Required Methods</a></h3><ul class="block"><li><a href="#tymethod.run">run</a></li></ul><h3><a href="#provided-methods">Provided Methods</a></h3><ul class="block"><li><a href="#method.input">input</a></li><li><a href="#method.output">output</a></li><li><a href="#method.update">update</a></li></ul><h3><a href="#implementations">Methods</a></h3><ul class="block method"><li><a href="#method.downcast">downcast</a></li><li><a href="#method.downcast_mut">downcast_mut</a></li><li><a href="#method.downcast_rc">downcast_rc</a></li><li><a href="#method.downcast_ref">downcast_ref</a></li><li><a href="#method.is">is</a></li></ul><h3><a href="#implementors">Implementors</a></h3></section><h2><a href="index.html">In maplibre::render::graph</a></h2></div></nav><div class="sidebar-resizer"></div>
<main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><div id="sidebar-button" tabindex="-1"><a href="../../../maplibre/all.html" title="show sidebar"></a></div><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1>Trait <a href="../../index.html">maplibre</a>::<wbr><a href="../index.html">render</a>::<wbr><a href="index.html">graph</a>::<wbr><a class="trait" href="#">Node</a><button id="copy-path" title="Copy item path to clipboard"><img src="../../../static.files/clipboard-7571035ce49a181d.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="src" href="../../../src/maplibre/render/graph/node.rs.html#47-73">source</a> · <button id="toggle-all-docs" title="collapse all docs">[<span>&#x2212;</span>]</button></span></div><pre class="rust item-decl"><code>pub trait Node: Downcast + <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> + <a class="trait" href="https://doc.rust-lang.org/1.76.0/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> + 'static {
// Required method
fn <a href="#tymethod.run" class="fn">run</a>(
&amp;self,
graph: &amp;mut <a class="struct" href="context/struct.RenderGraphContext.html" title="struct maplibre::render::graph::context::RenderGraphContext">RenderGraphContext</a>&lt;'_&gt;,
render_context: &amp;mut <a class="struct" href="node/struct.RenderContext.html" title="struct maplibre::render::graph::node::RenderContext">RenderContext</a>&lt;'_&gt;,
resources: &amp;<a class="struct" href="../struct.RenderResources.html" title="struct maplibre::render::RenderResources">RenderResources</a>,
world: &amp;<a class="struct" href="../../tcs/world/struct.World.html" title="struct maplibre::tcs::world::World">World</a>
) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.76.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.76.0/std/primitive.unit.html">()</a>, <a class="enum" href="node/enum.NodeRunError.html" title="enum maplibre::render::graph::node::NodeRunError">NodeRunError</a>&gt;;
// Provided methods
fn <a href="#method.input" class="fn">input</a>(&amp;self) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.76.0/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="struct" href="node_slot/struct.SlotInfo.html" title="struct maplibre::render::graph::node_slot::SlotInfo">SlotInfo</a>&gt; { ... }
<span class="item-spacer"></span> fn <a href="#method.output" class="fn">output</a>(&amp;self) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.76.0/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="struct" href="node_slot/struct.SlotInfo.html" title="struct maplibre::render::graph::node_slot::SlotInfo">SlotInfo</a>&gt; { ... }
<span class="item-spacer"></span> fn <a href="#method.update" class="fn">update</a>(&amp;mut self, _state: &amp;mut <a class="struct" href="../struct.RenderResources.html" title="struct maplibre::render::RenderResources">RenderResources</a>) { ... }
}</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>A render node that can be added to a <a href="graph/struct.RenderGraph.html" title="struct maplibre::render::graph::graph::RenderGraph"><code>RenderGraph</code></a>.</p>
<p>Nodes are the fundamental part of the graph and used to extend its functionality, by
generating draw calls and/or running subgraphs.
They are added via the <code>render_graph::add_node(my_node)</code> method.</p>
<p>To determine their position in the graph and ensure that all required dependencies (inputs)
are already executed, <a href="edge/enum.Edge.html" title="enum maplibre::render::graph::edge::Edge"><code>Edges</code></a> are used.</p>
<p>A node can produce outputs used as dependencies by other nodes.
Those inputs and outputs are called slots and are the default way of passing render data
inside the graph. For more information see <a href="node_slot/enum.SlotType.html" title="enum maplibre::render::graph::node_slot::SlotType"><code>SlotType</code></a>.</p>
</div></details><h2 id="required-methods" class="section-header">Required Methods<a href="#required-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="tymethod.run" class="method"><a class="src rightside" href="../../../src/maplibre/render/graph/node.rs.html#66-72">source</a><h4 class="code-header">fn <a href="#tymethod.run" class="fn">run</a>(
&amp;self,
graph: &amp;mut <a class="struct" href="context/struct.RenderGraphContext.html" title="struct maplibre::render::graph::context::RenderGraphContext">RenderGraphContext</a>&lt;'_&gt;,
render_context: &amp;mut <a class="struct" href="node/struct.RenderContext.html" title="struct maplibre::render::graph::node::RenderContext">RenderContext</a>&lt;'_&gt;,
resources: &amp;<a class="struct" href="../struct.RenderResources.html" title="struct maplibre::render::RenderResources">RenderResources</a>,
world: &amp;<a class="struct" href="../../tcs/world/struct.World.html" title="struct maplibre::tcs::world::World">World</a>
) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.76.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.76.0/std/primitive.unit.html">()</a>, <a class="enum" href="node/enum.NodeRunError.html" title="enum maplibre::render::graph::node::NodeRunError">NodeRunError</a>&gt;</h4></section></summary><div class="docblock"><p>Runs the graph node logic, issues draw calls, updates the output slots and
optionally queues up subgraphs for execution. The graph data, input and output values are
passed via the <a href="context/struct.RenderGraphContext.html" title="struct maplibre::render::graph::context::RenderGraphContext"><code>RenderGraphContext</code></a>.</p>
</div></details></div><h2 id="provided-methods" class="section-header">Provided Methods<a href="#provided-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="method.input" class="method"><a class="src rightside" href="../../../src/maplibre/render/graph/node.rs.html#50-52">source</a><h4 class="code-header">fn <a href="#method.input" class="fn">input</a>(&amp;self) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.76.0/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="struct" href="node_slot/struct.SlotInfo.html" title="struct maplibre::render::graph::node_slot::SlotInfo">SlotInfo</a>&gt;</h4></section></summary><div class="docblock"><p>Specifies the required input slots for this node.
They will then be available during the run method inside the <a href="context/struct.RenderGraphContext.html" title="struct maplibre::render::graph::context::RenderGraphContext"><code>RenderGraphContext</code></a>.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.output" class="method"><a class="src rightside" href="../../../src/maplibre/render/graph/node.rs.html#56-58">source</a><h4 class="code-header">fn <a href="#method.output" class="fn">output</a>(&amp;self) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.76.0/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="struct" href="node_slot/struct.SlotInfo.html" title="struct maplibre::render::graph::node_slot::SlotInfo">SlotInfo</a>&gt;</h4></section></summary><div class="docblock"><p>Specifies the produced output slots for this node.
They can then be passed one inside <a href="context/struct.RenderGraphContext.html" title="struct maplibre::render::graph::context::RenderGraphContext"><code>RenderGraphContext</code></a> during the run method.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.update" class="method"><a class="src rightside" href="../../../src/maplibre/render/graph/node.rs.html#61">source</a><h4 class="code-header">fn <a href="#method.update" class="fn">update</a>(&amp;mut self, _state: &amp;mut <a class="struct" href="../struct.RenderResources.html" title="struct maplibre::render::RenderResources">RenderResources</a>)</h4></section></summary><div class="docblock"><p>Updates internal node state using the current <a href="../struct.RenderResources.html" title="struct maplibre::render::RenderResources"><code>RenderResources</code></a> prior to the run method.</p>
</div></details></div><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-dyn+Node" class="impl"><a class="src rightside" href="../../../src/maplibre/render/graph/node.rs.html#75">source</a><a href="#impl-dyn+Node" class="anchor">§</a><h3 class="code-header">impl dyn <a class="trait" href="node/trait.Node.html" title="trait maplibre::render::graph::node::Node">Node</a></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.is" class="method"><a class="src rightside" href="../../../src/maplibre/render/graph/node.rs.html#75">source</a><h4 class="code-header">pub fn <a href="#method.is" class="fn">is</a>&lt;__T: <a class="trait" href="node/trait.Node.html" title="trait maplibre::render::graph::node::Node">Node</a>&gt;(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.76.0/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Returns true if the trait object wraps an object of type <code>__T</code>.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.downcast" class="method"><a class="src rightside" href="../../../src/maplibre/render/graph/node.rs.html#75">source</a><h4 class="code-header">pub fn <a href="#method.downcast" class="fn">downcast</a>&lt;__T: <a class="trait" href="node/trait.Node.html" title="trait maplibre::render::graph::node::Node">Node</a>&gt;(self: <a class="struct" href="https://doc.rust-lang.org/1.76.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;Self&gt;) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.76.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.76.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;__T&gt;, <a class="struct" href="https://doc.rust-lang.org/1.76.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;Self&gt;&gt;</h4></section></summary><div class="docblock"><p>Returns a boxed object from a boxed trait object if the underlying object is of type
<code>__T</code>. Returns the original boxed trait if it isnt.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.downcast_rc" class="method"><a class="src rightside" href="../../../src/maplibre/render/graph/node.rs.html#75">source</a><h4 class="code-header">pub fn <a href="#method.downcast_rc" class="fn">downcast_rc</a>&lt;__T: <a class="trait" href="node/trait.Node.html" title="trait maplibre::render::graph::node::Node">Node</a>&gt;(self: <a class="struct" href="https://doc.rust-lang.org/1.76.0/alloc/rc/struct.Rc.html" title="struct alloc::rc::Rc">Rc</a>&lt;Self&gt;) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.76.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.76.0/alloc/rc/struct.Rc.html" title="struct alloc::rc::Rc">Rc</a>&lt;__T&gt;, <a class="struct" href="https://doc.rust-lang.org/1.76.0/alloc/rc/struct.Rc.html" title="struct alloc::rc::Rc">Rc</a>&lt;Self&gt;&gt;</h4></section></summary><div class="docblock"><p>Returns an <code>Rc</code>-ed object from an <code>Rc</code>-ed trait object if the underlying object is of
type <code>__T</code>. Returns the original <code>Rc</code>-ed trait if it isnt.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.downcast_ref" class="method"><a class="src rightside" href="../../../src/maplibre/render/graph/node.rs.html#75">source</a><h4 class="code-header">pub fn <a href="#method.downcast_ref" class="fn">downcast_ref</a>&lt;__T: <a class="trait" href="node/trait.Node.html" title="trait maplibre::render::graph::node::Node">Node</a>&gt;(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.76.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.76.0/std/primitive.reference.html">&amp;__T</a>&gt;</h4></section></summary><div class="docblock"><p>Returns a reference to the object within the trait object if it is of type <code>__T</code>, or
<code>None</code> if it isnt.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="method.downcast_mut" class="method"><a class="src rightside" href="../../../src/maplibre/render/graph/node.rs.html#75">source</a><h4 class="code-header">pub fn <a href="#method.downcast_mut" class="fn">downcast_mut</a>&lt;__T: <a class="trait" href="node/trait.Node.html" title="trait maplibre::render::graph::node::Node">Node</a>&gt;(&amp;mut self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.76.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.76.0/std/primitive.reference.html">&amp;mut __T</a>&gt;</h4></section></summary><div class="docblock"><p>Returns a mutable reference to the object within the trait object if it is of type
<code>__T</code>, or <code>None</code> if it isnt.</p>
</div></details></div></details></div><h2 id="implementors" class="section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"><section id="impl-Node-for-DebugPassNode" class="impl"><a class="src rightside" href="../../../src/maplibre/debug/debug_pass.rs.html#26-79">source</a><a href="#impl-Node-for-DebugPassNode" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="node/trait.Node.html" title="trait maplibre::render::graph::node::Node">Node</a> for <a class="struct" href="../../debug/debug_pass/struct.DebugPassNode.html" title="struct maplibre::debug::debug_pass::DebugPassNode">DebugPassNode</a></h3></section><section id="impl-Node-for-MainPassDriverNode" class="impl"><a class="src rightside" href="../../../src/maplibre/render/main_pass.rs.html#117-129">source</a><a href="#impl-Node-for-MainPassDriverNode" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="node/trait.Node.html" title="trait maplibre::render::graph::node::Node">Node</a> for <a class="struct" href="../main_pass/struct.MainPassDriverNode.html" title="struct maplibre::render::main_pass::MainPassDriverNode">MainPassDriverNode</a></h3></section><section id="impl-Node-for-MainPassNode" class="impl"><a class="src rightside" href="../../../src/maplibre/render/main_pass.rs.html#30-113">source</a><a href="#impl-Node-for-MainPassNode" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="node/trait.Node.html" title="trait maplibre::render::graph::node::Node">Node</a> for <a class="struct" href="../main_pass/struct.MainPassNode.html" title="struct maplibre::render::main_pass::MainPassNode">MainPassNode</a></h3></section><section id="impl-Node-for-GraphInputNode" class="impl"><a class="src rightside" href="../../../src/maplibre/render/graph/graph.rs.html#554-576">source</a><a href="#impl-Node-for-GraphInputNode" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="node/trait.Node.html" title="trait maplibre::render::graph::node::Node">Node</a> for <a class="struct" href="graph/struct.GraphInputNode.html" title="struct maplibre::render::graph::graph::GraphInputNode">GraphInputNode</a></h3></section><section id="impl-Node-for-EmptyNode" class="impl"><a class="src rightside" href="../../../src/maplibre/render/graph/node.rs.html#328-338">source</a><a href="#impl-Node-for-EmptyNode" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="node/trait.Node.html" title="trait maplibre::render::graph::node::Node">Node</a> for <a class="struct" href="node/struct.EmptyNode.html" title="struct maplibre::render::graph::node::EmptyNode">EmptyNode</a></h3></section></div><script src="../../../trait.impl/maplibre/render/graph/node/trait.Node.js" async></script></section></div></main></body></html>