Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--assets/opensb/interface/opensb/shaders/shaders.lua21
-rw-r--r--assets/opensb/scripts/opensb/universeclient/loadconfig.lua14
-rw-r--r--source/client/StarClientApplication.cpp15
-rw-r--r--source/client/StarClientApplication.hpp6
-rw-r--r--source/client/StarRenderingLuaBindings.cpp3
5 files changed, 45 insertions, 14 deletions
diff --git a/assets/opensb/interface/opensb/shaders/shaders.lua b/assets/opensb/interface/opensb/shaders/shaders.lua
index f9b6a32..befbabf 100644
--- a/assets/opensb/interface/opensb/shaders/shaders.lua
+++ b/assets/opensb/interface/opensb/shaders/shaders.lua
@@ -184,6 +184,18 @@ local function addOption(data, i, added)
end
end
+local function updateParameter(parameter,oname,value)
+ if parameter.isPasses then
+ for k,v in next, parameter.layers do
+ renderer.setPostProcessLayerPasses(v, value)
+ end
+ else
+ for k,v in next, parameter.effects do
+ renderer.setEffectParameter(v, oname, value)
+ end
+ end
+end
+
function sliderOptionModified(option, odata)
local oname = string.sub(option, optionOffset)
local parameter = groups[activeGroup].parameters[oname]
@@ -191,15 +203,12 @@ function sliderOptionModified(option, odata)
widget.setText(fmt("%s.%s",OPTIONS_WIDGET,option.."_value"), fmt(digitRegex(parameter.delta),value))
- for k,v in next, parameter.effects do
- renderer.setEffectParameter(v, oname, value)
- end
+ updateParameter(parameter,oname,value)
shaderConfig[activeGroup].parameters[oname] = value
root.setConfiguration("postProcessGroups",shaderConfig)
end
function selectOptionPressed(button,bdata)
- sb.logInfo(sb.print(bdata))
for k,v in next, bdata.buttons do
if v.index ~= bdata.index then
@@ -212,9 +221,7 @@ function selectOptionPressed(button,bdata)
local oname = bdata.option.name
local parameter = groups[activeGroup].parameters[oname]
- for k,v in next, parameter.effects do
- renderer.setEffectParameter(v, oname, value)
- end
+ updateParameter(parameter,oname,value)
shaderConfig[activeGroup].parameters[oname] = value
root.setConfiguration("postProcessGroups",shaderConfig)
end
diff --git a/assets/opensb/scripts/opensb/universeclient/loadconfig.lua b/assets/opensb/scripts/opensb/universeclient/loadconfig.lua
index c0fc845..0898bc0 100644
--- a/assets/opensb/scripts/opensb/universeclient/loadconfig.lua
+++ b/assets/opensb/scripts/opensb/universeclient/loadconfig.lua
@@ -11,9 +11,17 @@ function module.init()
local group = postProcessGroups[k]
if group and v.parameters then
for k2,v2 in next, group.parameters do
- if v.parameters[k2] ~= nil then
- for _,e in next, v2.effects do
- renderer.setEffectParameter(e,k2,v.parameters[k2])
+ local param = v.parameters[k2]
+ if param ~= nil then
+ if v2.isPasses then
+ -- this parameter controls passes
+ for _,l in next, v2.layers do
+ renderer.setPostProcessLayerPasses(l,param)
+ end
+ else
+ for _,e in next, v2.effects do
+ renderer.setEffectParameter(e,k2,param)
+ end
end
end
end
diff --git a/source/client/StarClientApplication.cpp b/source/client/StarClientApplication.cpp
index 3c7ec8d..7c1af16 100644
--- a/source/client/StarClientApplication.cpp
+++ b/source/client/StarClientApplication.cpp
@@ -492,6 +492,7 @@ void ClientApplication::renderReload() {
// define post process layers and optionally assign them to groups
m_postProcessLayers.clear();
+ m_labelledPostProcessLayers.clear();
auto postProcessLayers = assets->json("/client.config:postProcessLayers").toArray();
for (auto& layer : postProcessLayers) {
auto effects = jsonToStringList(layer.getArray("effects"));
@@ -502,18 +503,28 @@ void ClientApplication::renderReload() {
if (gname) {
group = &m_postProcessGroups.get(gname.value());
}
+ // I'd think a string map for all of these would be better, but the order does matter here, and does make sense to depend on mod priority, so...
+ // guess a string map of indices works
+ // I tried pointers but for whatever reason the behaviour was highly inconsistent and only worked after reload...
+ auto label = layer.optString("name");
+ if (label) {
+ m_labelledPostProcessLayers.add(label.value(),m_postProcessLayers.count());
+ }
m_postProcessLayers.append(PostProcessLayer{ std::move(effects), (unsigned)layer.getUInt("passes", 1), group });
}
loadEffectConfig("interface");
}
-void ClientApplication::setPostProcessGroupEnabled(String group, bool enabled, Maybe<bool> save) {
+void ClientApplication::setPostProcessLayerPasses(String const& layer, unsigned const& passes) {
+ m_postProcessLayers.at(m_labelledPostProcessLayers.get(layer)).passes = passes;
+}
+void ClientApplication::setPostProcessGroupEnabled(String const& group, bool const& enabled, Maybe<bool> const& save) {
m_postProcessGroups.get(group).enabled = enabled;
if (save && save.value())
m_root->configuration()->setPath(strf("{}.{}.enabled", postProcessGroupsRoot, group),enabled);
}
-bool ClientApplication::postProcessGroupEnabled(String group) {
+bool ClientApplication::postProcessGroupEnabled(String const& group) {
return m_postProcessGroups.get(group).enabled;
}
diff --git a/source/client/StarClientApplication.hpp b/source/client/StarClientApplication.hpp
index 86b50a3..2fcddb7 100644
--- a/source/client/StarClientApplication.hpp
+++ b/source/client/StarClientApplication.hpp
@@ -19,8 +19,9 @@ STAR_CLASS(Voice);
class ClientApplication : public Application {
public:
- void setPostProcessGroupEnabled(String group, bool enabled, Maybe<bool> save);
- bool postProcessGroupEnabled(String group);
+ void setPostProcessLayerPasses(String const& layer, unsigned const& passes);
+ void setPostProcessGroupEnabled(String const& group, bool const& enabled, Maybe<bool> const& save);
+ bool postProcessGroupEnabled(String const& group);
Json postProcessGroups();
protected:
@@ -116,6 +117,7 @@ private:
StringMap<PostProcessGroup> m_postProcessGroups;
List<PostProcessLayer> m_postProcessLayers;
+ StringMap<size_t> m_labelledPostProcessLayers;
// Valid if main app state == SinglePlayer
UniverseServerPtr m_universeServer;
diff --git a/source/client/StarRenderingLuaBindings.cpp b/source/client/StarRenderingLuaBindings.cpp
index 39dc1a1..4493f71 100644
--- a/source/client/StarRenderingLuaBindings.cpp
+++ b/source/client/StarRenderingLuaBindings.cpp
@@ -37,6 +37,9 @@ LuaCallbacks LuaBindings::makeRenderingCallbacks(ClientApplication* app) {
auto renderer = app->renderer();
return renderer->getEffectScriptableParameter(effectName, effectParameter);
});
+
+ // not saved; should be loaded by Lua again
+ callbacks.registerCallbackWithSignature<void, String, unsigned>("setPostProcessLayerPasses", bind(mem_fn(&ClientApplication::setPostProcessLayerPasses), app, _1, _2));
return callbacks;
}