Index: ps/trunk/binaries/data/mods/public/gui/options/options.json =================================================================== --- ps/trunk/binaries/data/mods/public/gui/options/options.json +++ ps/trunk/binaries/data/mods/public/gui/options/options.json @@ -99,23 +99,20 @@ "type": "boolean", "label": "Prefer GLSL", "tooltip": "Use OpenGL 2.0 shaders (recommended).", - "config": "preferglsl", - "function": "Renderer_SetPreferGLSLEnabled" + "config": "preferglsl" }, { "type": "boolean", "label": "Fog", "tooltip": "Enable Fog.", "dependencies": ["preferglsl"], - "config": "fog", - "function": "Renderer_SetFogEnabled" + "config": "fog" }, { "type": "boolean", "label": "Post-processing", "tooltip": "Use screen-space post-processing filters (HDR, Bloom, DOF, etc).", - "config": "postproc", - "function": "Renderer_SetPostProcEnabled" + "config": "postproc" }, { "type": "dropdown", @@ -130,8 +127,7 @@ { "value": "msaa4", "label": "MSAA (x4)", "tooltip": "Slow, but high-quality anti-aliasing, uses 4 samples per pixel. Supported for GL3.3+." }, { "value": "msaa8", "label": "MSAA (x8)", "tooltip": "Slow, but high-quality anti-aliasing, uses 8 samples per pixel. Supported for GL3.3+." }, { "value": "msaa16", "label": "MSAA (x16)", "tooltip": "Slow, but high-quality anti-aliasing, uses 16 samples per pixel. Supported for GL3.3+." } - ], - "function": "Renderer_UpdateAntiAliasingTechnique" + ] }, { "type": "dropdown", @@ -142,8 +138,7 @@ "list": [ { "value": "disabled", "label": "Disabled", "tooltip": "Do not use sharpening." }, { "value": "cas", "label": "FidelityFX CAS", "tooltip": "Contrast adaptive sharpening, a fast, contrast based sharpening pass." } - ], - "function": "Renderer_UpdateSharpeningTechnique" + ] }, { "type": "slider", @@ -152,8 +147,7 @@ "dependencies": ["postproc", "preferglsl"], "config": "sharpness", "min": 0, - "max": 1, - "function": "Renderer_UpdateSharpnessFactor" + "max": 1 }, { "type": "slider", @@ -167,8 +161,7 @@ "type": "boolean", "label": "Shadows", "tooltip": "Enable shadows.", - "config": "shadows", - "function": "Renderer_SetShadowsEnabled" + "config": "shadows" }, { "type": "dropdown", @@ -176,7 +169,6 @@ "tooltip": "Shadow map resolution. High values can crash the game when using a graphics card with low memory!", "dependencies": ["shadows"], "config": "shadowquality", - "function": "Renderer_RecreateShadowMap", "list": [ { "value": -2, "label": "Very Low" }, { "value": -1, "label": "Low" }, @@ -190,83 +182,72 @@ "label": "Shadow filtering", "tooltip": "Smooth shadows.", "dependencies": ["shadows"], - "config": "shadowpcf", - "function": "Renderer_SetShadowPCFEnabled" + "config": "shadowpcf" }, { "type": "boolean", "label": "Unit silhouettes", "tooltip": "Show outlines of units behind structures.", - "config": "silhouettes", - "function": "Renderer_SetSilhouettesEnabled" + "config": "silhouettes" }, { "type": "boolean", "label": "Particles", "tooltip": "Enable particles.", - "config": "particles", - "function": "Renderer_SetParticlesEnabled" + "config": "particles" }, { "type": "boolean", "label": "Water effects", "tooltip": "When OFF, use the lowest settings possible to render water. This makes other settings irrelevant.", - "config": "watereffects", - "function": "Renderer_SetWaterEffectsEnabled" + "config": "watereffects" }, { "type": "boolean", "label": "High-quality water effects", "tooltip": "Use higher-quality effects for water, rendering coastal waves, shore foam, and ships trails.", "dependencies": ["watereffects"], - "config": "waterfancyeffects", - "function": "Renderer_SetWaterFancyEffectsEnabled" + "config": "waterfancyeffects" }, { "type": "boolean", "label": "Water reflections", "tooltip": "Allow water to reflect a mirror image.", "dependencies": ["watereffects"], - "config": "waterreflection", - "function": "Renderer_SetWaterReflectionEnabled" + "config": "waterreflection" }, { "type": "boolean", "label": "Water refraction", "tooltip": "Use a real water refraction map and not transparency.", "dependencies": ["watereffects"], - "config": "waterrefraction", - "function": "Renderer_SetWaterRefractionEnabled" + "config": "waterrefraction" }, { "type": "boolean", "label": "Real water depth", "tooltip": "Use actual water depth in rendering calculations.", "dependencies": ["watereffects", "waterrefraction"], - "config": "waterrealdepth", - "function": "Renderer_SetWaterRealDepthEnabled" + "config": "waterrealdepth" }, { "type": "boolean", "label": "Shadows on water", "tooltip": "Cast shadows on water.", "dependencies": ["watereffects"], - "config": "shadowsonwater", - "function": "Renderer_SetWaterShadowsEnabled" + "config": "shadowsonwater" }, { "type": "boolean", "label": "Smooth vision", "tooltip": "Lift darkness and fog-of-war smoothly.", - "config": "smoothlos", - "function": "Renderer_SetSmoothLOSEnabled" + "config": "smoothlos" }, { "type": "boolean", "label": "Show sky", "tooltip": "Render Sky.", - "config": "showsky", - "function": "Renderer_SetShowSkyEnabled" + "config": "showsky" }, { "type": "boolean", Index: ps/trunk/binaries/data/mods/public/gui/session/session.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/session/session.js +++ ps/trunk/binaries/data/mods/public/gui/session/session.js @@ -653,7 +653,7 @@ let isPlayingCinemaPath = GetSimState().cinemaPlaying && !g_Disconnected; Engine.GetGUIObjectByName("session").hidden = !g_ShowGUI || isPlayingCinemaPath; - Engine.Renderer_SetSilhouettesEnabled(!isPlayingCinemaPath && Engine.ConfigDB_GetValue("user", "silhouettes") == "true"); + Engine.ConfigDB_CreateValue("user", "silhouettes", !isPlayingCinemaPath && Engine.ConfigDB_GetValue("user", "silhouettes") == "true" ? "true" : "false"); } // TODO: Use event subscription onSimulationUpdate, onEntitySelectionChange, onPlayerViewChange, ... instead Index: ps/trunk/source/ps/ConfigDB.h =================================================================== --- ps/trunk/source/ps/ConfigDB.h +++ ps/trunk/source/ps/ConfigDB.h @@ -51,7 +51,7 @@ CFG_LAST }; -typedef std::vector CConfigValueSet; +using CConfigValueSet = std::vector; #define g_ConfigDB CConfigDB::GetSingleton() @@ -167,8 +167,34 @@ bool WriteValueToFile(EConfigNamespace ns, const CStr& name, const CStr& value); + + // Opaque data type so that callers that hook into ConfigDB can delete their hooks. + class hook_t + { + friend class CConfigDB; + public: + // Point the moved-from hook to end, which is checked for in UnregisterHook, + // to avoid a double-erase error. + hook_t(hook_t&& h) { ptr = std::move(h.ptr); h.ptr = m_Hooks.end(); } + hook_t(const hook_t&) = delete; + private: + hook_t(std::multimap>::iterator p) : ptr(p) {}; + + std::multimap>::iterator ptr; + }; + + /** + * Register a simple lambda that will be called anytime the value changes in any namespace + * This is simple on purpose, the hook is responsible for checking if it should do something. + * When RegisterHookAndCall is called, the hook is immediately triggered. + */ + hook_t RegisterHookAndCall(const CStr& name, std::function hook); + + void UnregisterHook(hook_t&& hook); + private: static std::map m_Map[]; + static std::multimap> m_Hooks; static VfsPath m_ConfigFile[]; static bool m_HasChanges[]; }; Index: ps/trunk/source/ps/ConfigDB.cpp =================================================================== --- ps/trunk/source/ps/ConfigDB.cpp +++ ps/trunk/source/ps/ConfigDB.cpp @@ -36,6 +36,13 @@ VfsPath CConfigDB::m_ConfigFile[CFG_LAST]; bool CConfigDB::m_HasChanges[CFG_LAST]; +std::multimap> CConfigDB::m_Hooks; + +void TriggerAllHooks(const std::multimap>& hooks, const CStr& name) +{ + std::for_each(hooks.lower_bound(name), hooks.upper_bound(name), [](const std::pair>& hook) { hook.second(); }); +} + static std::recursive_mutex cfgdb_mutex; // These entries will not be printed to logfiles, so that logfiles can be shared without leaking personal or sensitive data @@ -202,6 +209,8 @@ it = m_Map[ns].insert(m_Map[ns].begin(), make_pair(name, CConfigValueSet(1))); it->second[0] = value; + + TriggerAllHooks(m_Hooks, name); } void CConfigDB::SetValueBool(EConfigNamespace ns, const CStr& name, const bool value) @@ -231,6 +240,8 @@ if (it == m_Map[ns].end()) return; m_Map[ns].erase(it); + + TriggerAllHooks(m_Hooks, name); } void CConfigDB::SetConfigFile(EConfigNamespace ns, const VfsPath& path) @@ -464,4 +475,16 @@ return ret; } +CConfigDB::hook_t CConfigDB::RegisterHookAndCall(const CStr& name, std::function hook) +{ + hook(); + return m_Hooks.emplace(name, hook); +} + +void CConfigDB::UnregisterHook(CConfigDB::hook_t&& hook) +{ + if (hook.ptr != m_Hooks.end()) + m_Hooks.erase(hook.ptr); +} + #undef CHECK_NS Index: ps/trunk/source/renderer/Renderer.h =================================================================== --- ps/trunk/source/renderer/Renderer.h +++ ps/trunk/source/renderer/Renderer.h @@ -304,7 +304,7 @@ friend class ShaderInstancingModelRenderer; friend class TerrainRenderer; friend class WaterRenderer; - friend struct SRenderingOptions; + friend class CRenderingOptions; //BEGIN: Implementation of SceneCollector void Submit(CPatch* patch); Index: ps/trunk/source/renderer/RenderingOptions.h =================================================================== --- ps/trunk/source/renderer/RenderingOptions.h +++ ps/trunk/source/renderer/RenderingOptions.h @@ -45,13 +45,16 @@ static CStr8 ToString(RenderPath); }; -struct SRenderingOptions +class CRenderingOptions { // The renderer needs access to our private variables directly because capabilities have not yet been extracted // and thus sometimes it needs to change the rendering options without the side-effects. friend class CRenderer; - SRenderingOptions(); +public: + CRenderingOptions(); + ~CRenderingOptions(); + void ReadConfig(); #define OPTION_DEFAULT_SETTER(NAME, TYPE) \ @@ -108,8 +111,24 @@ #undef OPTION_DEF #undef OPTION #undef OPTION_WITH_SIDE_EFFECT + +private: + /** + * Registers a config hook for config variable @name that updates @variable. + * Also immediately updates variable with the value of the config. + */ + template + void SetupConfig(CStr8 name, T& variable); + /** + * Registers a config hook for config variable @name. + * Also immediately triggers the hook. + */ + void SetupConfig(CStr8 name, std::function hook); + + class ConfigHooks; + std::unique_ptr m_ConfigHooks; // Hide this via PImpl to avoid including ConfigDB.h here. }; -extern SRenderingOptions g_RenderingOptions; +extern CRenderingOptions g_RenderingOptions; #endif // INCLUDED_RENDERINGOPTIONS Index: ps/trunk/source/renderer/RenderingOptions.cpp =================================================================== --- ps/trunk/source/renderer/RenderingOptions.cpp +++ ps/trunk/source/renderer/RenderingOptions.cpp @@ -23,8 +23,20 @@ #include "ps/ConfigDB.h" #include "ps/CStr.h" #include "renderer/Renderer.h" +#include "renderer/PostprocManager.h" +#include "renderer/ShadowMap.h" -SRenderingOptions g_RenderingOptions; +CRenderingOptions g_RenderingOptions; + +class CRenderingOptions::ConfigHooks +{ +public: + std::vector::iterator begin() { return hooks.begin(); } + std::vector::iterator end() { return hooks.end(); } + void insert(CConfigDB::hook_t&& hook) { return hooks.emplace_back(std::move(hook)); } +private: + std::vector hooks; +}; RenderPath RenderPathEnum::FromString(const CStr8& name) { @@ -53,7 +65,7 @@ return "default"; // Silence warning about reaching end of non-void function. } -SRenderingOptions::SRenderingOptions() +CRenderingOptions::CRenderingOptions() : m_ConfigHooks(new ConfigHooks()) { m_NoVBO = false; m_RenderPath = RenderPath::DEFAULT; @@ -81,64 +93,121 @@ m_RenderActors = true; } -void SRenderingOptions::ReadConfig() +CRenderingOptions::~CRenderingOptions() { - CFG_GET_VAL("shadows", m_Shadows); - CFG_GET_VAL("shadowpcf", m_ShadowPCF); - - CFG_GET_VAL("preferglsl", m_PreferGLSL); - CFG_GET_VAL("postproc", m_PostProc); - CFG_GET_VAL("smoothlos", m_SmoothLOS); - - CStr renderPath; - CFG_GET_VAL("renderpath", renderPath); - SetRenderPath(RenderPathEnum::FromString(renderPath)); - - CFG_GET_VAL("watereffects", m_WaterEffects); - CFG_GET_VAL("waterfancyeffects", m_WaterFancyEffects); - CFG_GET_VAL("waterrealdepth", m_WaterRealDepth); - CFG_GET_VAL("waterrefraction", m_WaterRefraction); - CFG_GET_VAL("waterreflection", m_WaterReflection); - CFG_GET_VAL("watershadows", m_WaterShadows); - - CFG_GET_VAL("particles", m_Particles); - CFG_GET_VAL("fog", m_Fog); - CFG_GET_VAL("silhouettes", m_Silhouettes); - CFG_GET_VAL("showsky", m_ShowSky); - - CFG_GET_VAL("novbo", m_NoVBO); + // This is currently irrelevant since CConfigDB is deleted before CRenderingOptions + // (as only the latter is a static variable), but the check is a good idea regardless. + if (!CConfigDB::IsInitialised()) + return; + for (CConfigDB::hook_t& hook : *m_ConfigHooks) + g_ConfigDB.UnregisterHook(std::move(hook)); +} + +template +void CRenderingOptions::SetupConfig(CStr8 name, T& variable) +{ + m_ConfigHooks->insert(g_ConfigDB.RegisterHookAndCall(name, [name, &variable]() { CFG_GET_VAL(name, variable); })); +} + +void CRenderingOptions::SetupConfig(CStr8 name, std::function hook) +{ + m_ConfigHooks->insert(g_ConfigDB.RegisterHookAndCall(name, hook)); +} + +void CRenderingOptions::ReadConfig() +{ + SetupConfig("preferglsl", [this]() { + bool enabled; + CFG_GET_VAL("preferglsl", enabled); + SetPreferGLSL(enabled); + }); + + SetupConfig("shadowquality", []() { + g_Renderer.GetShadowMap().RecreateTexture(); + }); + + SetupConfig("shadows", [this]() { + bool enabled; + CFG_GET_VAL("shadows", enabled); + SetShadows(enabled); + }); + SetupConfig("shadowpcf", [this]() { + bool enabled; + CFG_GET_VAL("shadowpcf", enabled); + SetShadowPCF(enabled); + }); + + SetupConfig("antialiasing", []() { + g_Renderer.GetPostprocManager().UpdateAntiAliasingTechnique(); + }); + + SetupConfig("sharpness", []() { + g_Renderer.GetPostprocManager().UpdateSharpnessFactor(); + }); + + SetupConfig("sharpening", []() { + g_Renderer.GetPostprocManager().UpdateSharpeningTechnique(); + }); + + SetupConfig("postproc", m_PostProc); + SetupConfig("smoothlos", m_SmoothLOS); + + SetupConfig("renderpath", [this]() { + CStr renderPath; + CFG_GET_VAL("renderpath", renderPath); + SetRenderPath(RenderPathEnum::FromString(renderPath)); + }); + + SetupConfig("watereffects", m_WaterEffects); + SetupConfig("waterfancyeffects", m_WaterFancyEffects); + SetupConfig("waterrealdepth", m_WaterRealDepth); + SetupConfig("waterrefraction", m_WaterRefraction); + SetupConfig("waterreflection", m_WaterReflection); + SetupConfig("watershadows", m_WaterShadows); + + SetupConfig("particles", m_Particles); + SetupConfig("fog", [this]() { + bool enabled; + CFG_GET_VAL("fog", enabled); + SetFog(enabled); + }); + SetupConfig("silhouettes", m_Silhouettes); + SetupConfig("showsky", m_ShowSky); + + SetupConfig("novbo", m_NoVBO); + + SetupConfig("forcealphatest", m_ForceAlphaTest); + SetupConfig("gpuskinning", [this]() { + bool enabled; + CFG_GET_VAL("gpuskinning", enabled); + if (enabled && !m_PreferGLSL) + LOGWARNING("GPUSkinning has been disabled, because it is not supported with PreferGLSL disabled."); + else if (enabled) + m_GPUSkinning = true; + }); - CFG_GET_VAL("forcealphatest", m_ForceAlphaTest); - CFG_GET_VAL("gpuskinning", m_GPUSkinning); - - CFG_GET_VAL("renderactors", m_RenderActors); - - if (m_GPUSkinning && !m_PreferGLSL) - { - LOGWARNING("GPUSkinning have been disabled, because it is not supported with PreferGLSL disabled."); - m_GPUSkinning = false; - } + SetupConfig("renderactors", m_RenderActors); } -void SRenderingOptions::SetShadows(bool value) +void CRenderingOptions::SetShadows(bool value) { m_Shadows = value; g_Renderer.MakeShadersDirty(); } -void SRenderingOptions::SetShadowPCF(bool value) +void CRenderingOptions::SetShadowPCF(bool value) { m_ShadowPCF = value; g_Renderer.MakeShadersDirty(); } -void SRenderingOptions::SetFog(bool value) +void CRenderingOptions::SetFog(bool value) { m_Fog = value; g_Renderer.MakeShadersDirty(); } -void SRenderingOptions::SetPreferGLSL(bool value) +void CRenderingOptions::SetPreferGLSL(bool value) { if (m_GPUSkinning && !value) { @@ -154,7 +223,7 @@ } -void SRenderingOptions::SetRenderPath(RenderPath value) +void CRenderingOptions::SetRenderPath(RenderPath value) { m_RenderPath = value; g_Renderer.SetRenderPath(m_RenderPath); Index: ps/trunk/source/renderer/scripting/JSInterface_Renderer.h =================================================================== --- ps/trunk/source/renderer/scripting/JSInterface_Renderer.h +++ ps/trunk/source/renderer/scripting/JSInterface_Renderer.h @@ -20,38 +20,11 @@ #include "scriptinterface/ScriptInterface.h" -#define DECLARE_BOOLEAN_SCRIPT_SETTING(NAME) \ - bool Get##NAME##Enabled(ScriptInterface::CmptPrivate* pCmptPrivate); \ - void Set##NAME##Enabled(ScriptInterface::CmptPrivate* pCmptPrivate, bool Enabled); - namespace JSI_Renderer { std::string GetRenderPath(ScriptInterface::CmptPrivate* pCmptPrivate); - void SetRenderPath(ScriptInterface::CmptPrivate* pCmptPrivate, const std::string& name); - void UpdateAntiAliasingTechnique(ScriptInterface::CmptPrivate* pCmptPrivate); - void UpdateSharpeningTechnique(ScriptInterface::CmptPrivate* pCmptPrivate); - void UpdateSharpnessFactor(ScriptInterface::CmptPrivate* pCmptPrivate); - void RecreateShadowMap(ScriptInterface::CmptPrivate* pCmptPrivate); bool TextureExists(ScriptInterface::CmptPrivate* pCmptPrivate, const std::wstring& filename); - DECLARE_BOOLEAN_SCRIPT_SETTING(Shadows); - DECLARE_BOOLEAN_SCRIPT_SETTING(ShadowPCF); - DECLARE_BOOLEAN_SCRIPT_SETTING(Particles); - DECLARE_BOOLEAN_SCRIPT_SETTING(PreferGLSL); - DECLARE_BOOLEAN_SCRIPT_SETTING(WaterEffects); - DECLARE_BOOLEAN_SCRIPT_SETTING(WaterFancyEffects); - DECLARE_BOOLEAN_SCRIPT_SETTING(WaterRealDepth); - DECLARE_BOOLEAN_SCRIPT_SETTING(WaterReflection); - DECLARE_BOOLEAN_SCRIPT_SETTING(WaterRefraction); - DECLARE_BOOLEAN_SCRIPT_SETTING(WaterShadows); - DECLARE_BOOLEAN_SCRIPT_SETTING(Fog); - DECLARE_BOOLEAN_SCRIPT_SETTING(Silhouettes); - DECLARE_BOOLEAN_SCRIPT_SETTING(ShowSky); - DECLARE_BOOLEAN_SCRIPT_SETTING(SmoothLOS); - DECLARE_BOOLEAN_SCRIPT_SETTING(PostProc); - DECLARE_BOOLEAN_SCRIPT_SETTING(DisplayFrustum); - DECLARE_BOOLEAN_SCRIPT_SETTING(DisplayShadowsFrustum); - void RegisterScriptFunctions(const ScriptInterface& scriptInterface); } Index: ps/trunk/source/renderer/scripting/JSInterface_Renderer.cpp =================================================================== --- ps/trunk/source/renderer/scripting/JSInterface_Renderer.cpp +++ ps/trunk/source/renderer/scripting/JSInterface_Renderer.cpp @@ -20,38 +20,21 @@ #include "JSInterface_Renderer.h" #include "graphics/TextureManager.h" -#include "renderer/PostprocManager.h" #include "renderer/RenderingOptions.h" #include "renderer/Renderer.h" -#include "renderer/ShadowMap.h" #include "scriptinterface/ScriptInterface.h" #define IMPLEMENT_BOOLEAN_SCRIPT_SETTING(NAME) \ -bool JSI_Renderer::Get##NAME##Enabled(ScriptInterface::CmptPrivate* UNUSED(pCmptPrivate)) \ +bool Get##NAME##Enabled(ScriptInterface::CmptPrivate* UNUSED(pCmptPrivate)) \ { \ return g_RenderingOptions.Get##NAME(); \ } \ \ -void JSI_Renderer::Set##NAME##Enabled(ScriptInterface::CmptPrivate* UNUSED(pCmptPrivate), bool enabled) \ +void Set##NAME##Enabled(ScriptInterface::CmptPrivate* UNUSED(pCmptPrivate), bool enabled) \ { \ g_RenderingOptions.Set##NAME(enabled); \ } -IMPLEMENT_BOOLEAN_SCRIPT_SETTING(Shadows); -IMPLEMENT_BOOLEAN_SCRIPT_SETTING(ShadowPCF); -IMPLEMENT_BOOLEAN_SCRIPT_SETTING(Particles); -IMPLEMENT_BOOLEAN_SCRIPT_SETTING(PreferGLSL); -IMPLEMENT_BOOLEAN_SCRIPT_SETTING(WaterEffects); -IMPLEMENT_BOOLEAN_SCRIPT_SETTING(WaterFancyEffects); -IMPLEMENT_BOOLEAN_SCRIPT_SETTING(WaterRealDepth); -IMPLEMENT_BOOLEAN_SCRIPT_SETTING(WaterReflection); -IMPLEMENT_BOOLEAN_SCRIPT_SETTING(WaterRefraction); -IMPLEMENT_BOOLEAN_SCRIPT_SETTING(WaterShadows); -IMPLEMENT_BOOLEAN_SCRIPT_SETTING(Fog); -IMPLEMENT_BOOLEAN_SCRIPT_SETTING(Silhouettes); -IMPLEMENT_BOOLEAN_SCRIPT_SETTING(ShowSky); -IMPLEMENT_BOOLEAN_SCRIPT_SETTING(SmoothLOS); -IMPLEMENT_BOOLEAN_SCRIPT_SETTING(PostProc); IMPLEMENT_BOOLEAN_SCRIPT_SETTING(DisplayFrustum); IMPLEMENT_BOOLEAN_SCRIPT_SETTING(DisplayShadowsFrustum); @@ -62,64 +45,19 @@ return RenderPathEnum::ToString(g_RenderingOptions.GetRenderPath()); } -void JSI_Renderer::SetRenderPath(ScriptInterface::CmptPrivate* UNUSED(pCmptPrivate), const std::string& name) -{ - g_RenderingOptions.SetRenderPath(RenderPathEnum::FromString(name)); -} - -void JSI_Renderer::UpdateAntiAliasingTechnique(ScriptInterface::CmptPrivate* UNUSED(pCmptPrivate)) -{ - g_Renderer.GetPostprocManager().UpdateAntiAliasingTechnique(); -} - -void JSI_Renderer::UpdateSharpeningTechnique(ScriptInterface::CmptPrivate* UNUSED(pCmptPrivate)) -{ - g_Renderer.GetPostprocManager().UpdateSharpeningTechnique(); -} - -void JSI_Renderer::UpdateSharpnessFactor(ScriptInterface::CmptPrivate* UNUSED(pCmptPrivate)) -{ - g_Renderer.GetPostprocManager().UpdateSharpnessFactor(); -} - -void JSI_Renderer::RecreateShadowMap(ScriptInterface::CmptPrivate* UNUSED(pCmptPrivate)) -{ - g_Renderer.GetShadowMap().RecreateTexture(); -} - bool JSI_Renderer::TextureExists(ScriptInterface::CmptPrivate* UNUSED(pCmptPrivate), const std::wstring& filename) { return g_Renderer.GetTextureManager().TextureExists(filename); } #define REGISTER_BOOLEAN_SCRIPT_SETTING(NAME) \ -scriptInterface.RegisterFunction("Renderer_Get" #NAME "Enabled"); \ -scriptInterface.RegisterFunction("Renderer_Set" #NAME "Enabled"); +scriptInterface.RegisterFunction("Renderer_Get" #NAME "Enabled"); \ +scriptInterface.RegisterFunction("Renderer_Set" #NAME "Enabled"); void JSI_Renderer::RegisterScriptFunctions(const ScriptInterface& scriptInterface) { scriptInterface.RegisterFunction("Renderer_GetRenderPath"); - scriptInterface.RegisterFunction("Renderer_SetRenderPath"); - scriptInterface.RegisterFunction("Renderer_RecreateShadowMap"); - scriptInterface.RegisterFunction("Renderer_UpdateAntiAliasingTechnique"); - scriptInterface.RegisterFunction("Renderer_UpdateSharpeningTechnique"); - scriptInterface.RegisterFunction("Renderer_UpdateSharpnessFactor"); scriptInterface.RegisterFunction("TextureExists"); - REGISTER_BOOLEAN_SCRIPT_SETTING(Shadows); - REGISTER_BOOLEAN_SCRIPT_SETTING(ShadowPCF); - REGISTER_BOOLEAN_SCRIPT_SETTING(Particles); - REGISTER_BOOLEAN_SCRIPT_SETTING(PreferGLSL); - REGISTER_BOOLEAN_SCRIPT_SETTING(WaterEffects); - REGISTER_BOOLEAN_SCRIPT_SETTING(WaterFancyEffects); - REGISTER_BOOLEAN_SCRIPT_SETTING(WaterRealDepth); - REGISTER_BOOLEAN_SCRIPT_SETTING(WaterReflection); - REGISTER_BOOLEAN_SCRIPT_SETTING(WaterRefraction); - REGISTER_BOOLEAN_SCRIPT_SETTING(WaterShadows); - REGISTER_BOOLEAN_SCRIPT_SETTING(Fog); - REGISTER_BOOLEAN_SCRIPT_SETTING(Silhouettes); - REGISTER_BOOLEAN_SCRIPT_SETTING(ShowSky); - REGISTER_BOOLEAN_SCRIPT_SETTING(SmoothLOS); - REGISTER_BOOLEAN_SCRIPT_SETTING(PostProc); REGISTER_BOOLEAN_SCRIPT_SETTING(DisplayFrustum); REGISTER_BOOLEAN_SCRIPT_SETTING(DisplayShadowsFrustum); }