mirror of
https://github.com/OpenMW/openmw.git
synced 2025-12-08 07:34:31 +00:00
Shaders: Hot reload, togglable by lua debug command See merge request OpenMW/openmw!2238 (cherry picked from commit4078f19c74)8d194a16Shaders: rudimentary hot reloader on shaders4e7c1c5bAdded break when the operation failed6b38d622Added lua bindings to toggle hot reload (disabled by default) or to trigger a reload31d41252forgot memory includef78fa989fixed include, cleaned comments and indentationfc8838c7Renamed lua binding, and use action to avoid concurrency issueaa51d6deMissing chrono include ?68d06989Fixed cyclical included checkb6d7293aRemoved weird lines that I thought were necessary to please the compiler9a475b0cfixed blank lines and missing breakscdd95f78replaced empty function body by defaulta1c8dc9dC++17 compat ?7b78bf4bFix files with different defines weren't added to the hot reload managercc9d4364includes now work when the same shader has different defines15751c57Lua debug api doc3ab0a991Hot reload done only once every 200 ms, no point in beeing fasterdf69fc76Post processing shaders now use the same lua commands, no more launcher option...c71f3508changed overview.rst of post processing603b30e1Added some variable names to make it clearer what their function wasbaadc06eMerge branch 'master' into 'SHADER_HOT_RELOAD'decfbc53Fix threading issuesb14cc673adds missing decleration16a4b571adds missing include166717d6Makes sure threads are only stopped once ,and that they will be re-started25c1f0caRenamed variable to fix case issue
77 lines
2.8 KiB
C++
77 lines
2.8 KiB
C++
#include "debugbindings.hpp"
|
|
#include "context.hpp"
|
|
#include "luamanagerimp.hpp"
|
|
|
|
#include "../mwbase/environment.hpp"
|
|
#include "../mwbase/world.hpp"
|
|
#include "../mwrender/renderingmanager.hpp"
|
|
#include "../mwrender/postprocessor.hpp"
|
|
|
|
#include <components/resource/resourcesystem.hpp>
|
|
#include <components/resource/scenemanager.hpp>
|
|
#include <components/shader/shadermanager.hpp>
|
|
|
|
#include <components/lua/luastate.hpp>
|
|
|
|
namespace MWLua
|
|
{
|
|
sol::table initDebugPackage(const Context& context)
|
|
{
|
|
sol::table api = context.mLua->newTable();
|
|
|
|
api["RENDER_MODE"] = LuaUtil::makeStrictReadOnly(context.mLua->tableFromPairs<std::string_view, MWRender::RenderMode>({
|
|
{"CollisionDebug", MWRender::Render_CollisionDebug},
|
|
{"Wireframe", MWRender::Render_Wireframe},
|
|
{"Pathgrid", MWRender::Render_Pathgrid},
|
|
{"Water", MWRender::Render_Water},
|
|
{"Scene", MWRender::Render_Scene},
|
|
{"NavMesh", MWRender::Render_NavMesh},
|
|
{"ActorsPaths", MWRender::Render_ActorsPaths},
|
|
{"RecastMesh", MWRender::Render_RecastMesh},
|
|
}));
|
|
|
|
api["toggleRenderMode"] = [context] (MWRender::RenderMode value)
|
|
{
|
|
context.mLuaManager->addAction([value]
|
|
{
|
|
MWBase::Environment::get().getWorld()->toggleRenderMode(value);
|
|
});
|
|
};
|
|
|
|
api["NAV_MESH_RENDER_MODE"] = LuaUtil::makeStrictReadOnly(context.mLua->tableFromPairs<std::string_view, MWRender::NavMeshMode>({
|
|
{"AreaType", MWRender::NavMeshMode::AreaType},
|
|
{"UpdateFrequency", MWRender::NavMeshMode::UpdateFrequency},
|
|
}));
|
|
|
|
api["setNavMeshRenderMode"] = [context] (MWRender::NavMeshMode value)
|
|
{
|
|
context.mLuaManager->addAction([value]
|
|
{
|
|
MWBase::Environment::get().getWorld()->getRenderingManager()->setNavMeshMode(value);
|
|
});
|
|
};
|
|
|
|
api["triggerShaderReload"] = [context]()
|
|
{
|
|
context.mLuaManager->addAction([]
|
|
{
|
|
auto world = MWBase::Environment::get().getWorld();
|
|
|
|
world->getRenderingManager()->getResourceSystem()->getSceneManager()->getShaderManager().triggerShaderReload();
|
|
world->getPostProcessor()->triggerShaderReload();
|
|
});
|
|
};
|
|
|
|
api["setShaderHotReloadEnabled"] = [context](bool value)
|
|
{
|
|
context.mLuaManager->addAction([value]
|
|
{
|
|
auto world = MWBase::Environment::get().getWorld();
|
|
world->getRenderingManager()->getResourceSystem()->getSceneManager()->getShaderManager().setHotReloadEnabled(value);
|
|
world->getPostProcessor()->mEnableLiveReload = value;
|
|
});
|
|
};
|
|
|
|
return LuaUtil::makeReadOnly(api);
|
|
}
|
|
}
|