Graphics: Rework shadowing (add cascaded shadow mapping)
- Add support for per-viewer shadows - Add cascaded shadow mapping for directional lights (wip) - Rework the way lights are sent to the shaders (they are now selected once per viewer) - Fixes PointLight shadow mapping (using a dedicated pass) - Lights out of frustum for every viewers are no longer processed (wip)
This commit is contained in:
committed by
Jérôme Leclercq
parent
a08850946a
commit
9aebb4f745
@@ -12,6 +12,7 @@
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
class AbstractViewer;
|
||||
class BakedFrameGraph;
|
||||
class FrameGraph;
|
||||
class FramePass;
|
||||
@@ -22,25 +23,33 @@ namespace Nz
|
||||
class NAZARA_GRAPHICS_API LightShadowData
|
||||
{
|
||||
public:
|
||||
LightShadowData() = default;
|
||||
inline LightShadowData();
|
||||
LightShadowData(const LightShadowData&) = delete;
|
||||
LightShadowData(LightShadowData&&) = delete;
|
||||
virtual ~LightShadowData();
|
||||
|
||||
virtual void PrepareRendering(RenderFrame& renderFrame) = 0;
|
||||
inline bool IsPerViewer() const;
|
||||
|
||||
virtual void PrepareRendering(RenderFrame& renderFrame, const AbstractViewer* viewer) = 0;
|
||||
|
||||
virtual void RegisterMaterialInstance(const MaterialInstance& matInstance) = 0;
|
||||
virtual void RegisterPassInputs(FramePass& pass) = 0;
|
||||
virtual void RegisterToFrameGraph(FrameGraph& frameGraph) = 0;
|
||||
virtual void RegisterPassInputs(FramePass& pass, const AbstractViewer* viewer) = 0;
|
||||
virtual void RegisterToFrameGraph(FrameGraph& frameGraph, const AbstractViewer* viewer) = 0;
|
||||
virtual void RegisterViewer(const AbstractViewer* viewer);
|
||||
|
||||
virtual const Texture* RetrieveLightShadowmap(const BakedFrameGraph& bakedGraph) const = 0;
|
||||
virtual const Texture* RetrieveLightShadowmap(const BakedFrameGraph& bakedGraph, const AbstractViewer* viewer) const = 0;
|
||||
|
||||
virtual void UnregisterMaterialInstance(const MaterialInstance& matInstance) = 0;
|
||||
virtual void UnregisterViewer(const AbstractViewer* viewer);
|
||||
|
||||
LightShadowData& operator=(const LightShadowData&) = delete;
|
||||
LightShadowData& operator=(LightShadowData&&) = delete;
|
||||
|
||||
protected:
|
||||
inline void UpdatePerViewerStatus(bool isPerViewer);
|
||||
|
||||
private:
|
||||
bool m_isPerViewer;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user