Source code for simvx.graphics.renderer.viewport_manager

"""Viewport management for multi-viewport rendering."""


from __future__ import annotations

import logging
from typing import Any

import numpy as np

from .._types import Viewport

log = logging.getLogger(__name__)

__all__ = ["ViewportManager"]


[docs] class ViewportManager: """Manages multiple viewports for rendering.""" def __init__(self): self._viewports: dict[int, Viewport] = {} self._next_id = 0
[docs] def create_viewport( self, x: int, y: int, width: int, height: int, camera_view: np.ndarray, camera_proj: np.ndarray, render_target: Any | None = None, ) -> int: """Create a viewport, returns viewport ID.""" vp_id = self._next_id self._next_id += 1 self._viewports[vp_id] = Viewport( x=x, y=y, width=width, height=height, camera_view=camera_view, camera_proj=camera_proj, render_target=render_target, ) return vp_id
[docs] def update_viewport(self, vp_id: int, **kwargs: Any) -> None: """Update viewport properties.""" vp = self._viewports[vp_id] for key, value in kwargs.items(): setattr(vp, key, value)
[docs] def get_viewport(self, vp_id: int) -> Viewport: """Get viewport by ID.""" return self._viewports[vp_id]
[docs] def get_all(self) -> list[tuple[int, Viewport]]: """Get all viewports as (id, viewport) pairs.""" return list(self._viewports.items())
[docs] def remove_viewport(self, vp_id: int) -> None: """Remove a viewport.""" del self._viewports[vp_id]
[docs] def clear(self) -> None: """Remove all viewports and reset ID counter.""" self._viewports.clear() self._next_id = 0 # Reset so next viewport gets ID 0