simvx.graphics.renderer.render_graph

RenderGraph — declarative pass scheduler.

Topologically sorts passes by declared input/output dependencies at compile() time. Frame-time iteration is a tight loop over pre-computed tuples — no per-frame graph traversal, no per-frame validation.

Module Contents

Classes

RenderGraph

Schedules render passes by declared dependencies.

Data

API

simvx.graphics.renderer.render_graph.__all__

[‘RenderGraph’]

simvx.graphics.renderer.render_graph.log[source]

‘getLogger(…)’

class simvx.graphics.renderer.render_graph.RenderGraph[source]

Schedules render passes by declared dependencies.

Usage::

graph = RenderGraph()
graph.add(shadow_pass)
graph.add(ssao_pass)
graph.compile()          # once at setup
graph.record_pre_render(cmd, frame)  # every frame
graph.record_render(cmd, frame)      # every frame

Initialization

__slots__

(‘_passes’, ‘_pre_render_order’, ‘_render_order’)

add(pass_: simvx.graphics.renderer.render_pass.RenderPass) None[source]

Register a pass. Call before compile().

compile() None[source]

Topologically sort passes by input/output dependencies. Called once.

Validates no cycles, no dangling inputs, no duplicate outputs. Splits result into pre_render and render tuples.

record_pre_render(cmd: Any, frame: simvx.graphics.renderer.render_pass.FrameContext) None[source]

Record all pre-render passes in dependency order.

record_render(cmd: Any, frame: simvx.graphics.renderer.render_pass.FrameContext) None[source]

Record all render-stage passes in dependency order.

resize(width: int, height: int) None[source]

Propagate resize to all passes.

destroy() None[source]

Destroy all passes.

property passes: list[simvx.graphics.renderer.render_pass.RenderPass]

All registered passes (unordered).

property pre_render_order: tuple[simvx.graphics.renderer.render_pass.RenderPass, ...]

Compiled pre-render execution order.

property render_order: tuple[simvx.graphics.renderer.render_pass.RenderPass, ...]

Compiled render execution order.