Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: simplify feature implementation #326

Draft
wants to merge 8 commits into
base: dev
Choose a base branch
from
Draft
10 changes: 9 additions & 1 deletion src/Feature.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,11 @@

#include "State.h"

void Feature::Load(json&)
void Feature::Load(json& o_json)
{
if (o_json[GetName()].is_object())
LoadSettings(o_json[GetName()]);

// Convert string to wstring
auto ini_filename = std::format("{}.ini", GetShortName());
std::wstring ini_filename_w;
Expand Down Expand Up @@ -63,6 +66,11 @@ void Feature::Load(json&)
}
}

void Feature::Save(json& o_json)
{
SaveSettings(o_json[GetName()]);
}

bool Feature::ValidateCache(CSimpleIniA& a_ini)
{
auto name = GetName();
Expand Down
17 changes: 10 additions & 7 deletions src/Feature.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,22 +18,25 @@ struct Feature
*/
virtual bool SupportsVR() { return false; }

virtual void SetupResources() = 0;
virtual void Reset() = 0;
virtual void SetupResources() {}
virtual void Reset() {}

virtual void DrawSettings() = 0;
virtual void Draw(const RE::BSShader* shader, const uint32_t descriptor) = 0;
virtual void DrawSettings() {}
virtual void Draw(const RE::BSShader*, const uint32_t) {}
virtual void DrawDeferred() {}
virtual void DrawPreProcess() {}
virtual void Prepass() {}

virtual void DataLoaded() {}
virtual void PostPostLoad() {}

virtual void Load(json& o_json);
virtual void Save(json& o_json) = 0;
void Load(json& o_json);
void Save(json& o_json);

virtual void RestoreDefaultSettings() = 0;
virtual void SaveSettings(json&) {}
virtual void LoadSettings(json&) {}

virtual void RestoreDefaultSettings() {}

virtual bool ValidateCache(CSimpleIniA& a_ini);
virtual void WriteDiskCacheInfo(CSimpleIniA& a_ini);
Expand Down
21 changes: 0 additions & 21 deletions src/Features/CloudShadows.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,6 @@
#include "Deferred.h"
#include "Util.h"

void CloudShadows::DrawSettings()
{
}

void CloudShadows::CheckResourcesSide(int side)
{
static Util::FrameChecker frame_checker[6];
Expand Down Expand Up @@ -98,19 +94,6 @@ void CloudShadows::Prepass()
context->PSSetShaderResources(27, 1, &srv);
}

void CloudShadows::Draw(const RE::BSShader*, const uint32_t)
{
}

void CloudShadows::Load(json& o_json)
{
Feature::Load(o_json);
}

void CloudShadows::Save(json&)
{
}

void CloudShadows::SetupResources()
{
auto renderer = RE::BSGraphics::Renderer::GetSingleton();
Expand Down Expand Up @@ -138,7 +121,3 @@ void CloudShadows::SetupResources()
}
}
}

void CloudShadows::RestoreDefaultSettings()
{
}
15 changes: 2 additions & 13 deletions src/Features/CloudShadows.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ struct CloudShadows : Feature
return &singleton;
}

virtual inline std::string GetName() override { return "Cloud Shadows"; }
virtual inline std::string GetShortName() override { return "CloudShadows"; }
virtual inline std::string GetName() { return "Cloud Shadows"; }
virtual inline std::string GetShortName() { return "CloudShadows"; }
virtual inline std::string_view GetShaderDefineName() override { return "CLOUD_SHADOWS"; }
virtual inline bool HasShaderDefine(RE::BSShader::Type) override { return true; }

Expand All @@ -26,22 +26,11 @@ struct CloudShadows : Feature

virtual void SetupResources() override;

virtual inline void Reset() override {}

virtual void DrawSettings() override;

void CheckResourcesSide(int side);
void ModifySky(RE::BSRenderPass* Pass);

virtual void Prepass() override;

virtual void Draw(const RE::BSShader* shader, const uint32_t descriptor) override;

virtual void Load(json& o_json) override;
virtual void Save(json& o_json) override;

virtual void RestoreDefaultSettings() override;

virtual inline void PostPostLoad() override { Hooks::Install(); }

struct Hooks
Expand Down
21 changes: 0 additions & 21 deletions src/Features/DynamicCubemaps.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -401,14 +401,6 @@ void DynamicCubemaps::PostDeferred()
context->PSSetShaderResources(64, 2, views);
}

void DynamicCubemaps::Prepass()
{
}

void DynamicCubemaps::Draw(const RE::BSShader*, const uint32_t)
{
}

void DynamicCubemaps::SetupResources()
{
GetComputeShaderUpdate();
Expand Down Expand Up @@ -521,16 +513,3 @@ void DynamicCubemaps::Reset()
else
activeReflections = false;
}

void DynamicCubemaps::Load(json& o_json)
{
Feature::Load(o_json);
}

void DynamicCubemaps::Save(json&)
{
}

void DynamicCubemaps::RestoreDefaultSettings()
{
}
17 changes: 4 additions & 13 deletions src/Features/DynamicCubemaps.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,22 +92,15 @@ struct DynamicCubemaps : Feature

virtual inline std::string GetName() { return "Dynamic Cubemaps"; }
virtual inline std::string GetShortName() { return "DynamicCubemaps"; }
inline std::string_view GetShaderDefineName() override { return "DYNAMIC_CUBEMAPS"; }
virtual inline std::string_view GetShaderDefineName() override { return "DYNAMIC_CUBEMAPS"; }
bool HasShaderDefine(RE::BSShader::Type) override { return true; };

virtual void SetupResources();
virtual void Reset();
virtual void SetupResources() override;
virtual void Reset() override;

virtual void DrawSettings();
virtual void DrawSettings() override;
virtual void DataLoaded() override;

virtual void Draw(const RE::BSShader* shader, const uint32_t descriptor);

virtual void Load(json& o_json);
virtual void Save(json& o_json);

virtual void RestoreDefaultSettings();

std::vector<std::string> iniVRCubeMapSettings{
{ "bAutoWaterSilhouetteReflections:Water" }, //IniSettings 0x1eaa018
{ "bForceHighDetailReflections:Water" }, //IniSettings 0x1eaa030
Expand All @@ -130,8 +123,6 @@ struct DynamicCubemaps : Feature

void UpdateCubemapCapture();

virtual void Prepass() override;

void Inferrence(bool a_reflections);

void Irradiance(bool a_reflections);
Expand Down
11 changes: 4 additions & 7 deletions src/Features/ExtendedMaterials.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,17 +73,14 @@ void ExtendedMaterials::DrawSettings()
}
}

void ExtendedMaterials::Load(json& o_json)
void ExtendedMaterials::LoadSettings(json& o_json)
{
if (o_json[GetName()].is_object())
settings = o_json[GetName()];

Feature::Load(o_json);
settings = o_json;
}

void ExtendedMaterials::Save(json& o_json)
void ExtendedMaterials::SaveSettings(json& o_json)
{
o_json[GetName()] = settings;
o_json = settings;
}

void ExtendedMaterials::RestoreDefaultSettings()
Expand Down
15 changes: 5 additions & 10 deletions src/Features/ExtendedMaterials.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ struct ExtendedMaterials : Feature

virtual inline std::string GetName() { return "Extended Materials"; }
virtual inline std::string GetShortName() { return "ExtendedMaterials"; }
inline std::string_view GetShaderDefineName() override { return "EXTENDED_MATERIALS"; }
virtual inline std::string_view GetShaderDefineName() override { return "EXTENDED_MATERIALS"; }

bool HasShaderDefine(RE::BSShader::Type shaderType) override;

Expand All @@ -28,19 +28,14 @@ struct ExtendedMaterials : Feature

Settings settings;

virtual void SetupResources(){};
virtual inline void Reset() {}

virtual void DataLoaded() override;

virtual void DrawSettings();

virtual void Draw(const RE::BSShader*, const uint32_t){};
virtual void DrawSettings() override;

virtual void Load(json& o_json);
virtual void Save(json& o_json);
virtual void LoadSettings(json& o_json) override;
virtual void SaveSettings(json& o_json) override;

virtual void RestoreDefaultSettings();
virtual void RestoreDefaultSettings() override;

bool SupportsVR() override { return true; };
};
11 changes: 4 additions & 7 deletions src/Features/GrassCollision.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -187,17 +187,14 @@ void GrassCollision::Update()
context->VSSetConstantBuffers(5, ARRAYSIZE(buffers), buffers);
}

void GrassCollision::Load(json& o_json)
void GrassCollision::LoadSettings(json& o_json)
{
if (o_json[GetName()].is_object())
settings = o_json[GetName()];

Feature::Load(o_json);
settings = o_json;
}

void GrassCollision::Save(json& o_json)
void GrassCollision::SaveSettings(json& o_json)
{
o_json[GetName()] = settings;
o_json = settings;
}

void GrassCollision::RestoreDefaultSettings()
Expand Down
15 changes: 7 additions & 8 deletions src/Features/GrassCollision.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ struct GrassCollision : Feature

virtual inline std::string GetName() { return "Grass Collision"; }
virtual inline std::string GetShortName() { return "GrassCollision"; }
inline std::string_view GetShaderDefineName() override { return "GRASS_COLLISION"; }
virtual inline std::string_view GetShaderDefineName() override { return "GRASS_COLLISION"; }

bool HasShaderDefine(RE::BSShader::Type shaderType) override;

Expand Down Expand Up @@ -46,18 +46,17 @@ struct GrassCollision : Feature
ConstantBuffer* perFrame = nullptr;
int eyeCount = !REL::Module::IsVR() ? 1 : 2;

virtual void SetupResources();
virtual void Reset();
virtual void SetupResources() override;
virtual void Reset() override;

virtual void DrawSettings();
virtual void DrawSettings() override;
void UpdateCollisions(PerFrame& perFrame);
void Update();
virtual void Draw(const RE::BSShader*, const uint32_t){};

virtual void Load(json& o_json);
virtual void Save(json& o_json);
virtual void LoadSettings(json& o_json) override;
virtual void SaveSettings(json& o_json) override;

virtual void RestoreDefaultSettings();
virtual void RestoreDefaultSettings() override;

virtual void PostPostLoad() override;

Expand Down
11 changes: 4 additions & 7 deletions src/Features/GrassLighting.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,17 +66,14 @@ void GrassLighting::DrawSettings()
}
}

void GrassLighting::Load(json& o_json)
void GrassLighting::LoadSettings(json& o_json)
{
if (o_json[GetName()].is_object())
settings = o_json[GetName()];

Feature::Load(o_json);
settings = o_json;
}

void GrassLighting::Save(json& o_json)
void GrassLighting::SaveSettings(json& o_json)
{
o_json[GetName()] = settings;
o_json = settings;
}

void GrassLighting::RestoreDefaultSettings()
Expand Down
13 changes: 4 additions & 9 deletions src/Features/GrassLighting.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,12 @@ struct GrassLighting : Feature

Settings settings;

virtual void SetupResources(){};
virtual void DrawSettings() override;

virtual void DrawSettings();
virtual void Reset(){};
virtual void LoadSettings(json& o_json) override;
virtual void SaveSettings(json& o_json) override;

virtual void Draw(const RE::BSShader*, const uint32_t){};

virtual void Load(json& o_json);
virtual void Save(json& o_json);

virtual void RestoreDefaultSettings();
virtual void RestoreDefaultSettings() override;

bool SupportsVR() override { return true; };
};
14 changes: 4 additions & 10 deletions src/Features/LightLimitFix.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -245,16 +245,14 @@ void LightLimitFix::Reset()
std::swap(particleLights, queuedParticleLights);
}

void LightLimitFix::Load(json& o_json)
void LightLimitFix::LoadSettings(json& o_json)
{
if (o_json[GetName()].is_object())
settings = o_json[GetName()];
Feature::Load(o_json);
settings = o_json;
}

void LightLimitFix::Save(json& o_json)
void LightLimitFix::SaveSettings(json& o_json)
{
o_json[GetName()] = settings;
o_json = settings;
}

void LightLimitFix::RestoreDefaultSettings()
Expand Down Expand Up @@ -557,10 +555,6 @@ bool LightLimitFix::AddParticleLight(RE::BSRenderPass* a_pass, LightLimitFix::Co
return true;
}

void LightLimitFix::Draw(const RE::BSShader*, const uint32_t)
{
}

void LightLimitFix::PostPostLoad()
{
ParticleLights::GetSingleton()->GetConfigs();
Expand Down
Loading
Loading