From d0f3ad75b8f0dbad7f49391a7f69f8580ee5e76d Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Thu, 11 Feb 2016 10:15:48 -0800 Subject: [PATCH] Nest Persistent in Config to compile on nix --- .../render-utils/src/AmbientOcclusionEffect.h | 4 +- .../render-utils/src/AntialiasingEffect.h | 4 +- libraries/render-utils/src/RenderShadowTask.h | 4 +- libraries/render/src/render/Task.h | 132 +++++++++--------- 4 files changed, 73 insertions(+), 71 deletions(-) diff --git a/libraries/render-utils/src/AmbientOcclusionEffect.h b/libraries/render-utils/src/AmbientOcclusionEffect.h index 442c108af7..717c9dc4fc 100644 --- a/libraries/render-utils/src/AmbientOcclusionEffect.h +++ b/libraries/render-utils/src/AmbientOcclusionEffect.h @@ -16,7 +16,7 @@ #include "render/DrawTask.h" -class AmbientOcclusionEffectConfig : public render::Job::PersistentConfig { +class AmbientOcclusionEffectConfig : public render::Job::Config::Persistent { Q_OBJECT Q_PROPERTY(bool enabled MEMBER enabled NOTIFY dirty) Q_PROPERTY(bool ditheringEnabled MEMBER ditheringEnabled NOTIFY dirty) @@ -32,7 +32,7 @@ class AmbientOcclusionEffectConfig : public render::Job::PersistentConfig { Q_PROPERTY(int blurRadius MEMBER blurRadius WRITE setBlurRadius) Q_PROPERTY(double gpuTime READ getGpuTime) public: - AmbientOcclusionEffectConfig() : render::Job::PersistentConfig("Ambient Occlusion", false) {} + AmbientOcclusionEffectConfig() : render::Job::Config::Persistent("Ambient Occlusion", false) {} const int MAX_RESOLUTION_LEVEL = 4; const int MAX_BLUR_RADIUS = 6; diff --git a/libraries/render-utils/src/AntialiasingEffect.h b/libraries/render-utils/src/AntialiasingEffect.h index 000760a2e2..6185ed07dc 100644 --- a/libraries/render-utils/src/AntialiasingEffect.h +++ b/libraries/render-utils/src/AntialiasingEffect.h @@ -16,11 +16,11 @@ #include "render/DrawTask.h" -class AntiAliasingConfig : public render::Job::PersistentConfig { +class AntiAliasingConfig : public render::Job::Config::Persistent { Q_OBJECT Q_PROPERTY(bool enabled MEMBER enabled) public: - AntiAliasingConfig() : render::Job::PersistentConfig("Antialiasing", false) {} + AntiAliasingConfig() : render::Job::Config::Persistent("Antialiasing", false) {} }; class Antialiasing { diff --git a/libraries/render-utils/src/RenderShadowTask.h b/libraries/render-utils/src/RenderShadowTask.h index 177a42aff7..679302b69f 100644 --- a/libraries/render-utils/src/RenderShadowTask.h +++ b/libraries/render-utils/src/RenderShadowTask.h @@ -31,11 +31,11 @@ protected: render::ShapePlumberPointer _shapePlumber; }; -class RenderShadowTaskConfig : public render::Task::PersistentConfig { +class RenderShadowTaskConfig : public render::Task::Config::Persistent { Q_OBJECT Q_PROPERTY(bool enabled MEMBER enabled NOTIFY dirty) public: - RenderShadowTaskConfig() : render::Task::PersistentConfig("Shadows", false) {} + RenderShadowTaskConfig() : render::Task::Config::Persistent("Shadows", false) {} signals: void dirty(); diff --git a/libraries/render/src/render/Task.h b/libraries/render/src/render/Task.h index 2d29e5eedd..77d179472b 100644 --- a/libraries/render/src/render/Task.h +++ b/libraries/render/src/render/Task.h @@ -61,10 +61,75 @@ class Job; class Task; class JobNoIO {}; +template class PersistentConfig : public C { +public: + const QString DEFAULT = "Default"; + const QString NONE = "None"; + + PersistentConfig() = delete; + PersistentConfig(const QString& path) : + _preset(QStringList() << "Render" << "Engine" << path, DEFAULT) { } + PersistentConfig(const QStringList& path) : + _preset(QStringList() << "Render" << "Engine" << path, DEFAULT) { } + PersistentConfig(const QString& path, bool enabled) : C(enabled), + _preset(QStringList() << "Render" << "Engine" << path, enabled ? DEFAULT : NONE) { } + PersistentConfig(const QStringList& path, bool enabled) : C(enabled), + _preset(QStringList() << "Render" << "Engine" << path, enabled ? DEFAULT : NONE) { } + + QStringList getPresetList() { + if (_presets.empty()) { + setPresetList(QJsonObject()); + } + return _presets.keys(); + } + + virtual void setPresetList(const QJsonObject& list) override { + assert(_presets.empty()); + + _default = toJsonValue(*this).toObject().toVariantMap(); + + _presets.unite(list.toVariantMap()); + if (C::alwaysEnabled || C::enabled) { + _presets.insert(DEFAULT, _default); + } + if (!C::alwaysEnabled) { + _presets.insert(NONE, QVariantMap{{ "enabled", false }}); + } + + auto preset = _preset.get(); + if (preset != _preset.getDefault() && _presets.contains(preset)) { + // Load the persisted configuration + C::load(_presets[preset].toMap()); + } + } + + QString getPreset() { return _preset.get(); } + + void setPreset(const QString& preset) { + _preset.set(preset); + if (_presets.contains(preset)) { + // Always start back at default to remain deterministic + QVariantMap config = _default; + QVariantMap presetConfig = _presets[preset].toMap(); + for (auto it = presetConfig.cbegin(); it != presetConfig.cend(); it++) { + config.insert(it.key(), it.value()); + } + C::load(config); + } + } + +protected: + QVariantMap _default; + QVariantMap _presets; + Setting::Handle _preset; +}; + // A default Config is always on; to create an enableable Config, use the ctor JobConfig(bool enabled) class JobConfig : public QObject { Q_OBJECT public: + using Persistent = PersistentConfig; + JobConfig() = default; JobConfig(bool enabled) : alwaysEnabled{ false }, enabled{ enabled } {} @@ -96,6 +161,8 @@ signals: class TaskConfig : public JobConfig { Q_OBJECT public: + using Persistent = PersistentConfig; + TaskConfig() = default ; TaskConfig(bool enabled) : JobConfig(enabled) {} @@ -116,69 +183,6 @@ private: Task* _task; }; -template class PersistentConfig : public C { -public: - const QString DEFAULT = "Default"; - const QString NONE = "None"; - - PersistentConfig() = delete; - PersistentConfig(const QString& path) : - _preset(QStringList() << "Render" << "Engine" << path, DEFAULT) { } - PersistentConfig(const QStringList& path) : - _preset(QStringList() << "Render" << "Engine" << path, DEFAULT) { } - PersistentConfig(const QString& path, bool enabled) : C(enabled), - _preset(QStringList() << "Render" << "Engine" << path, enabled ? DEFAULT : NONE) { } - PersistentConfig(const QStringList& path, bool enabled) : C(enabled), - _preset(QStringList() << "Render" << "Engine" << path, enabled ? DEFAULT : NONE) { } - - QStringList getPresetList() { - if (_presets.empty()) { - setPresetList(QJsonObject()); - } - return _presets.keys(); - } - - virtual void setPresetList(const QJsonObject& list) override { - assert(_presets.empty()); - - _default = toJsonValue(*this).toObject().toVariantMap(); - - _presets.unite(list.toVariantMap()); - if (alwaysEnabled || enabled) { - _presets.insert(DEFAULT, _default); - } - if (!alwaysEnabled) { - _presets.insert(NONE, QVariantMap{{ "enabled", false }}); - } - - auto preset = _preset.get(); - if (preset != _preset.getDefault() && _presets.contains(preset)) { - // Load the persisted configuration - load(_presets[preset].toMap()); - } - } - - QString getPreset() { return _preset.get(); } - - void setPreset(const QString& preset) { - _preset.set(preset); - if (_presets.contains(preset)) { - // Always start back at default to remain deterministic - QVariantMap config = _default; - QVariantMap presetConfig = _presets[preset].toMap(); - for (auto it = presetConfig.cbegin(); it != presetConfig.cend(); it++) { - config.insert(it.key(), it.value()); - } - load(config); - } - } - -protected: - QVariantMap _default; - QVariantMap _presets; - Setting::Handle _preset; -}; - template void jobConfigure(T& data, const C& configuration) { data.configure(configuration); } @@ -201,7 +205,6 @@ template void jobRun(T& data, const SceneContextPoin class Job { public: using Config = JobConfig; - using PersistentConfig = PersistentConfig; using QConfigPointer = std::shared_ptr; using None = JobNoIO; @@ -289,7 +292,6 @@ public: class Task { public: using Config = TaskConfig; - using PersistentConfig = PersistentConfig; using QConfigPointer = Job::QConfigPointer; using None = Job::None;