simvx.graphics.renderer.pipeline_manager

PipelineManager: owns the forward renderer’s 3D graphics pipelines.

Extracted from Renderer so pipeline creation, rebuild-on-HDR-switch, resize, and cleanup live in one place. Renderer re-exports the pipeline handles as attributes so SceneContentRenderer keeps accessing renderer._pipeline etc. without change.

Module Contents

Classes

PipelineManager

Owns the 3D forward-render pipelines and their shader modules.

Data

API

simvx.graphics.renderer.pipeline_manager.TANGENT_MESH_BINDINGS

()

simvx.graphics.renderer.pipeline_manager.__all__

[‘PipelineManager’]

class simvx.graphics.renderer.pipeline_manager.PipelineManager(engine: Any)[source]

Owns the 3D forward-render pipelines and their shader modules.

Initialization

setup(ssbo_layout: Any, joint_layout: Any) None[source]

Compile shaders and build the four 3D pipelines against the engine render pass.

set_probe_blend_count(count: int) None[source]

Set the top-K reflection-probe blend width.

PROBE_BLEND_COUNT is a compile-time constant in cube_textured.frag, so a change recompiles the lit fragment permutations and rebuilds the mesh pipelines (device-wait-idle; rare transition, driven by WorldEnvironment.probe_blend_count). No-op when unchanged. Values are clamped to [1, 8] (0 = probes-off is handled by the capture gate, never by a shader permutation: a zero-length top-K array is invalid GLSL, and with zero live probes the blend loop is already a no-op).

rebuild_for_render_pass(render_pass: Any) None[source]

Rebuild all four pipelines against render_pass (e.g. HDR target).

rebuild_for_resize(width: int, height: int, render_pass: Any) None[source]

Rebuild all four pipelines for a new framebuffer size.

cleanup() None[source]

Destroy pipelines, layouts, and shader modules.

tangent_pipelines() tuple[Any, Any, Any][source]

The (opaque, double-sided, transparent) tangent pipeline triple.

Built lazily on first request (compiling the HAS_TANGENTS shader permutations), then kept in sync with the base pipelines by every rebuild. Callers only ask when a registered mesh carries real tangents, so a tangent-free renderer never compiles or creates any of this.