diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2024-12-29 15:29:20 +1100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-12-29 15:29:20 +1100 |
commit | b953042e56f67c3e60391ed8911f7561c5ea609e (patch) | |
tree | 1d820dd92b439eb03611987c9730fc4f52f50152 /source/client/StarRenderingLuaBindings.cpp | |
parent | 75ff3cbba9b44a357af0e24ec99a0c28fcdf8d43 (diff) | |
parent | ec6c8f0c3c72cd7a9c9ea97721f12225cff42406 (diff) |
Merge pull request #158 from Bottinator22/main
Scriptable shader uniforms
Diffstat (limited to 'source/client/StarRenderingLuaBindings.cpp')
-rw-r--r-- | source/client/StarRenderingLuaBindings.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/source/client/StarRenderingLuaBindings.cpp b/source/client/StarRenderingLuaBindings.cpp index 4c9e7a2..39dc1a1 100644 --- a/source/client/StarRenderingLuaBindings.cpp +++ b/source/client/StarRenderingLuaBindings.cpp @@ -1,6 +1,8 @@ #include "StarRenderingLuaBindings.hpp" +#include "StarJsonExtra.hpp" #include "StarLuaConverters.hpp" #include "StarClientApplication.hpp" +#include "StarRenderer.hpp" namespace Star { @@ -11,8 +13,30 @@ LuaCallbacks LuaBindings::makeRenderingCallbacks(ClientApplication* app) { callbacks.registerCallbackWithSignature<void, String, bool, Maybe<bool>>("setPostProcessGroupEnabled", bind(mem_fn(&ClientApplication::setPostProcessGroupEnabled), app, _1, _2, _3)); callbacks.registerCallbackWithSignature<bool, String>("postProcessGroupEnabled", bind(mem_fn(&ClientApplication::postProcessGroupEnabled), app, _1)); + // not entirely necessary (root.assetJson can achieve the same purpose) but may as well callbacks.registerCallbackWithSignature<Json>("postProcessGroups", bind(mem_fn(&ClientApplication::postProcessGroups), app)); + + // typedef Variant<float, int, Vec2F, Vec3F, Vec4F, bool> RenderEffectParameter; + // feel free to change this if there's a better way to do this + // specifically checks if the effect parameter is an int since Lua prefers converting the values to floats + callbacks.registerCallback("setEffectParameter", [app](String const& effectName, String const& effectParameter, RenderEffectParameter const& value) { + auto renderer = app->renderer(); + auto mtype = renderer->getEffectScriptableParameterType(effectName, effectParameter); + if (mtype) { + auto type = mtype.value(); + if (type == 1 && value.is<float>()) { + renderer->setEffectScriptableParameter(effectName, effectParameter, (int)value.get<float>()); + } else { + renderer->setEffectScriptableParameter(effectName, effectParameter, value); + } + } + }); + + callbacks.registerCallback("getEffectParameter", [app](String const& effectName, String const& effectParameter) { + auto renderer = app->renderer(); + return renderer->getEffectScriptableParameter(effectName, effectParameter); + }); return callbacks; } |