Source code for simvx.graphics.renderer.resource_registry
"""ResourceRegistry — string-keyed bag of offscreen resources shared between passes.
Accessed only at setup/resize time. Passes resolve inputs once during setup() and
cache handles as direct instance attributes — no per-frame registry lookups.
"""
from __future__ import annotations
from typing import Any
__all__ = ["ResourceRegistry"]
[docs]
class ResourceRegistry:
"""String-keyed resource namespace shared between render passes."""
__slots__ = ("_entries",)
def __init__(self) -> None:
self._entries: dict[str, Any] = {}
[docs]
def register(self, name: str, handle: Any) -> None:
"""Register a named resource (image view, buffer, sampler, etc.)."""
self._entries[name] = handle
[docs]
def get(self, name: str) -> Any:
"""Retrieve a resource by name. Raises KeyError if not registered."""
return self._entries[name]
[docs]
def try_get(self, name: str) -> Any | None:
"""Retrieve a resource by name, or None if not registered."""
return self._entries.get(name)
[docs]
def has(self, name: str) -> bool:
"""Check whether a resource is registered."""
return name in self._entries
[docs]
def remove(self, name: str) -> None:
"""Remove a resource entry (e.g. before re-registering on resize)."""
self._entries.pop(name, None)
[docs]
def clear(self) -> None:
"""Remove all entries."""
self._entries.clear()
[docs]
def names(self) -> frozenset[str]:
"""Return all registered resource names."""
return frozenset(self._entries)