VisuTwin Canvas
C++ 3D Engine — Metal Backend
Loading...
Searching...
No Matches
shadowRendererLocal.h
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2025-2026 Arnis Lektauers
3//
4// Created by Arnis Lektauers on 11.09.2025.
5//
6#pragma once
7
8#include <scene/frameGraph.h>
9
10#include "shadowRenderer.h"
11#include "shadowMap.h"
12#include "scene/camera.h"
13#include "scene/light.h"
14
15namespace visutwin::canvas
16{
18 {
19 public:
20 ShadowRendererLocal(Renderer* renderer, ShadowRenderer* shadowRenderer) : _renderer(renderer), _shadowRenderer(shadowRenderer) {}
21
22 Camera* prepareLights(std::vector<Light*>& shadowLights, const std::vector<Light*>& lights);
23
24 std::vector<Light*>& shadowLights() { return _shadowLights; }
25
26 // Prepare render passes for rendering of shadows for local non-clustered lights.
27 // Each shadow face is a separate render pass as it renders to a separate render target.
28 void buildNonClusteredRenderPasses(FrameGraph* frameGraph, const std::vector<Light*>& localLights);
29
30 // Position shadow cameras for local (spot/point) lights and allocate shadow maps.
31 // Mirrors Renderer::cullShadowmaps() but for local lights.
32 void cullLocalLights(const std::vector<Light*>& localLights,
33 const std::shared_ptr<GraphicsDevice>& device,
34 std::vector<std::unique_ptr<ShadowMap>>& ownedShadowMaps);
35
36 private:
37 Renderer* _renderer;
38 ShadowRenderer* _shadowRenderer;
39
40 std::shared_ptr<GraphicsDevice> _device;
41
42 // Temporary list to collect lights to render shadows for
43 std::vector<Light*> _shadowLights;
44 };
45}
Perspective or orthographic camera with projection matrix, jitter (TAA), and render target binding.
Definition camera.h:40
void buildNonClusteredRenderPasses(FrameGraph *frameGraph, const std::vector< Light * > &localLights)
ShadowRendererLocal(Renderer *renderer, ShadowRenderer *shadowRenderer)
Camera * prepareLights(std::vector< Light * > &shadowLights, const std::vector< Light * > &lights)
void cullLocalLights(const std::vector< Light * > &localLights, const std::shared_ptr< GraphicsDevice > &device, std::vector< std::unique_ptr< ShadowMap > > &ownedShadowMaps)
std::vector< Light * > & shadowLights()