Reload shaders on graphic settings change

This commit is contained in:
Lwmte 2024-12-24 09:10:07 +01:00
parent f04dcd42cc
commit 3f749b4856
3 changed files with 8 additions and 7 deletions

View file

@ -628,6 +628,7 @@ namespace TEN::Gui
g_Renderer.ChangeScreenResolution(CurrentSettings.Configuration.ScreenWidth, CurrentSettings.Configuration.ScreenHeight, g_Renderer.ChangeScreenResolution(CurrentSettings.Configuration.ScreenWidth, CurrentSettings.Configuration.ScreenHeight,
CurrentSettings.Configuration.EnableWindowedMode); CurrentSettings.Configuration.EnableWindowedMode);
g_Renderer.ReloadShaders();
g_Renderer.SetGraphicsSettingsChanged(); g_Renderer.SetGraphicsSettingsChanged();
MenuToDisplay = fromPauseMenu ? Menu::Pause : Menu::Options; MenuToDisplay = fromPauseMenu ? Menu::Pause : Menu::Options;

View file

@ -16,7 +16,7 @@ namespace TEN::Renderer::Utils
TENLog("Loading shaders...", LogLevel::Info); TENLog("Loading shaders...", LogLevel::Info);
// Unbind any currently bound shader. // Unbind any currently bound shader.
Bind(Shader::None); Bind(Shader::None, true);
// Reset compile counter. // Reset compile counter.
_compileCounter = 0; _compileCounter = 0;
@ -27,7 +27,7 @@ namespace TEN::Renderer::Utils
const D3D_SHADER_MACRO roomDefinesShadowMap[] = { "SHADOW_MAP", "", nullptr, nullptr }; const D3D_SHADER_MACRO roomDefinesShadowMap[] = { "SHADOW_MAP", "", nullptr, nullptr };
Load(Shader::Rooms, "Rooms", "", ShaderType::PixelAndVertex); Load(Shader::Rooms, "Rooms", "", ShaderType::PixelAndVertex);
Load(Shader::RoomsAnimated, "Rooms", "", ShaderType::Vertex, &roomDefinesAnimated[0]); Load(Shader::RoomsAnimated, "Rooms", "", ShaderType::Vertex, roomDefinesAnimated);
Load(Shader::Items, "Items", "", ShaderType::PixelAndVertex); Load(Shader::Items, "Items", "", ShaderType::PixelAndVertex);
Load(Shader::Statics, "Statics", "", ShaderType::PixelAndVertex); Load(Shader::Statics, "Statics", "", ShaderType::PixelAndVertex);
Load(Shader::Sky, "Sky", "", ShaderType::PixelAndVertex); Load(Shader::Sky, "Sky", "", ShaderType::PixelAndVertex);
@ -290,13 +290,13 @@ namespace TEN::Renderer::Utils
_shaders[(int)shader] = LoadOrCompile(fileName, funcName, type, defines); _shaders[(int)shader] = LoadOrCompile(fileName, funcName, type, defines);
} }
void ShaderManager::Bind(Shader shader) void ShaderManager::Bind(Shader shader, bool forceNull)
{ {
auto& shaderObj = _shaders[(int)shader]; auto& shaderObj = _shaders[(int)shader];
if (shaderObj.Vertex.Shader != nullptr) _context->VSSetShader(shaderObj.Vertex.Shader.Get(), nullptr, 0); if (shaderObj.Vertex.Shader != nullptr || forceNull) _context->VSSetShader(shaderObj.Vertex.Shader.Get(), nullptr, 0);
if (shaderObj.Pixel.Shader != nullptr) _context->PSSetShader(shaderObj.Pixel.Shader.Get(), nullptr, 0); if (shaderObj.Pixel.Shader != nullptr || forceNull) _context->PSSetShader(shaderObj.Pixel.Shader.Get(), nullptr, 0);
if (shaderObj.Compute.Shader != nullptr) _context->CSSetShader(shaderObj.Compute.Shader.Get(), nullptr, 0); if (shaderObj.Compute.Shader != nullptr || forceNull) _context->CSSetShader(shaderObj.Compute.Shader.Get(), nullptr, 0);
} }
const RendererShader& ShaderManager::Get(Shader shader) const RendererShader& ShaderManager::Get(Shader shader)

View file

@ -78,7 +78,7 @@ namespace TEN::Renderer::Utils
void Initialize(ComPtr<ID3D11Device>& device, ComPtr<ID3D11DeviceContext>& context); void Initialize(ComPtr<ID3D11Device>& device, ComPtr<ID3D11DeviceContext>& context);
void LoadAllShaders(int width, int height); void LoadAllShaders(int width, int height);
void Bind(Shader shader); void Bind(Shader shader, bool forceNull = false);
const RendererShader& Get(Shader shader); const RendererShader& Get(Shader shader);
}; };
} }