mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-03-29 22:20:33 +00:00
Added lua bindings to toggle hot reload (disabled by default) or to trigger a reload
This commit is contained in:
parent
4e7c1c5bef
commit
6b38d62223
@ -6,6 +6,10 @@
|
||||
#include "../mwbase/world.hpp"
|
||||
#include "../mwrender/renderingmanager.hpp"
|
||||
|
||||
#include <components/resource/resourcesystem.hpp>
|
||||
#include <components/resource/scenemanager.hpp>
|
||||
#include <components/shader/shadermanager.hpp>
|
||||
|
||||
#include <components/lua/luastate.hpp>
|
||||
|
||||
namespace MWLua
|
||||
@ -46,6 +50,16 @@ namespace MWLua
|
||||
});
|
||||
};
|
||||
|
||||
api["triggerShaderReload"] = [context]()
|
||||
{
|
||||
MWBase::Environment::get().getWorld()->getRenderingManager()->getResourceSystem()->getSceneManager()->getShaderManager().triggerShaderReload();
|
||||
};
|
||||
|
||||
api["togggleShaderHotReload"] = [context](bool value)
|
||||
{
|
||||
MWBase::Environment::get().getWorld()->getRenderingManager()->getResourceSystem()->getSceneManager()->getShaderManager().setHotReloadEnabled(value);
|
||||
};
|
||||
|
||||
return LuaUtil::makeReadOnly(api);
|
||||
}
|
||||
}
|
||||
|
@ -367,8 +367,10 @@ namespace Shader
|
||||
std::filesystem::file_time_type mLastAutoRecompileTime;
|
||||
using KeysHolder = std::set<ShaderManager::MapKey>;
|
||||
std::unordered_map<std::string, KeysHolder> mShaderFiles;
|
||||
bool mHotReloadEnabled;
|
||||
HotReloadManager()
|
||||
{
|
||||
mHotReloadEnabled = false;
|
||||
mLastAutoRecompileTime = std::chrono::file_clock::now();
|
||||
}
|
||||
|
||||
@ -392,6 +394,12 @@ namespace Shader
|
||||
}
|
||||
|
||||
void update(ShaderManager& Manager)
|
||||
{
|
||||
if (mHotReloadEnabled)
|
||||
reloadTouchedShaders(Manager);
|
||||
}
|
||||
|
||||
void reloadTouchedShaders(ShaderManager& Manager)
|
||||
{
|
||||
for (auto& shader : mShaderFiles)
|
||||
{
|
||||
@ -635,4 +643,14 @@ namespace Shader
|
||||
mHotReloadManager->update(*this);
|
||||
}
|
||||
|
||||
void ShaderManager::setHotReloadEnabled(bool value)
|
||||
{
|
||||
mHotReloadManager->mHotReloadEnabled = value;
|
||||
}
|
||||
|
||||
void ShaderManager::triggerShaderReload()
|
||||
{
|
||||
mHotReloadManager->reloadTouchedShaders(*this);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -69,6 +69,8 @@ namespace Shader
|
||||
int reserveGlobalTextureUnits(Slot slot);
|
||||
|
||||
void update();
|
||||
void setHotReloadEnabled(bool value);
|
||||
void triggerShaderReload();
|
||||
private:
|
||||
void getLinkedShaders(osg::ref_ptr<osg::Shader> shader, const std::vector<std::string>& linkedShaderNames, const DefineMap& defines);
|
||||
void addLinkedShaders(osg::ref_ptr<osg::Shader> shader, osg::ref_ptr<osg::Program> program);
|
||||
|
Loading…
x
Reference in New Issue
Block a user