// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved.
#pragma once
#include "Engine/Core/Config/Settings.h"
#include "Engine/Serialization/Serialization.h"
#include "Engine/Graphics/Enums.h"
///
/// Graphics rendering settings.
///
///
class GraphicsSettings : public Settings
{
public:
///
/// Enables rendering synchronization with the refresh rate of the display device to avoid "tearing" artifacts.
///
bool UseVSync = false;
///
/// Anti Aliasing quality setting.
///
Quality AAQuality = Quality::Medium;
///
/// Screen Space Reflections quality setting.
///
Quality SSRQuality = Quality::Medium;
///
/// Screen Space Ambient Occlusion quality setting.
///
Quality SSAOQuality = Quality::Medium;
///
/// Volumetric Fog quality setting.
///
Quality VolumetricFogQuality = Quality::High;
///
/// The shadows quality.
///
Quality ShadowsQuality = Quality::Medium;
///
/// The shadow maps quality (textures resolution).
///
Quality ShadowMapsQuality = Quality::Medium;
///
/// Enables cascades splits blending for directional light shadows.
///
bool AllowCSMBlending = false;
public:
// [Settings]
void Apply() override;
void RestoreDefault() final override
{
UseVSync = false;
AAQuality = Quality::Medium;
SSRQuality = Quality::Medium;
SSAOQuality = Quality::Medium;
VolumetricFogQuality = Quality::High;
ShadowsQuality = Quality::Medium;
ShadowMapsQuality = Quality::Medium;
AllowCSMBlending = false;
}
void Deserialize(DeserializeStream& stream, ISerializeModifier* modifier) final override
{
DESERIALIZE(UseVSync);
DESERIALIZE(AAQuality);
DESERIALIZE(SSRQuality);
DESERIALIZE(SSAOQuality);
DESERIALIZE(VolumetricFogQuality);
DESERIALIZE(ShadowsQuality);
DESERIALIZE(ShadowMapsQuality);
DESERIALIZE(AllowCSMBlending);
}
};