Source code for isaaclab.renderers.renderer
# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
"""Factory for creating renderer instances."""
from __future__ import annotations
from isaaclab.utils.backend_utils import FactoryBase
from .base_renderer import BaseRenderer
from .renderer_cfg import RendererCfg
# This is mapping of where backends live in the isaaclab_<backend> package.
_RENDERER_TYPE_TO_BACKEND = {"isaac_rtx": "physx", "newton_warp": "newton", "ovrtx": "ov"}
[docs]
class Renderer(FactoryBase, BaseRenderer):
"""Factory for creating renderer instances."""
_backend_class_names = {
"physx": "IsaacRtxRenderer",
"newton": "NewtonWarpRenderer",
"ov": "OVRTXRenderer",
}
@classmethod
def _get_backend(cls, cfg: RendererCfg, *args, **kwargs) -> str:
return _RENDERER_TYPE_TO_BACKEND.get(cfg.renderer_type, "physx")
[docs]
def __new__(cls, cfg: RendererCfg, *args, **kwargs) -> BaseRenderer:
"""Create a new instance of a renderer based on the backend."""
# The `FactoryBase` __new__ method will handle the logic and return
# an instance of the correct backend-specific renderer class.
result = super().__new__(cls, cfg, *args, **kwargs)
if not isinstance(result, BaseRenderer):
name = type(result).__name__
bases = type(result).__bases__
raise TypeError(
f"Backend renderer {name!r} must inherit from BaseRenderer, but it inherits from {bases!r}."
)
return result