diff --git a/libraries/render-utils/src/DebugDeferredBuffer.h b/libraries/render-utils/src/DebugDeferredBuffer.h index 7a95972c83..f5c2d3f8a1 100644 --- a/libraries/render-utils/src/DebugDeferredBuffer.h +++ b/libraries/render-utils/src/DebugDeferredBuffer.h @@ -16,12 +16,20 @@ #include +class DebugDeferredBufferConfig : public render::Job::Config { + Q_OBJECT +public: + DebugDeferredBufferConfig() : render::Job::Config(false) {} +}; + class DebugDeferredBuffer { public: - using JobModel = render::Job::Model; + using Config = DebugDeferredBufferConfig; + using JobModel = render::Job::Model; DebugDeferredBuffer(); + void configure(const Config&) {} void run(const render::SceneContextPointer& sceneContext, const render::RenderContextPointer& renderContext); private: diff --git a/libraries/render/src/render/Task.cpp b/libraries/render/src/render/Task.cpp index 21cb1e5be1..c1c607c587 100644 --- a/libraries/render/src/render/Task.cpp +++ b/libraries/render/src/render/Task.cpp @@ -21,5 +21,5 @@ using namespace render; void TaskConfig::refresh() { - _task.configure(*this); + _task->configure(*this); } diff --git a/libraries/render/src/render/Task.h b/libraries/render/src/render/Task.h index f592ad1b2b..b608ca987a 100644 --- a/libraries/render/src/render/Task.h +++ b/libraries/render/src/render/Task.h @@ -56,10 +56,11 @@ protected: class JobConfig : public QObject { Q_OBJECT public: - Q_PROPERTY(bool enabled MEMBER enabled NOTIFY dirty) + JobConfig() : enabled{ true } {} + JobConfig(bool enabled) : enabled{ enabled } {} + + Q_PROPERTY(bool enabled MEMBER enabled) bool enabled; -signals: - void dirty(); }; template void jobConfigure(T& model, const C& configuration) { @@ -125,7 +126,7 @@ public: } void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { - if (isEnabled()) { + if (std::static_pointer_cast(_config)->enabled) { jobRun(_data, sceneContext, renderContext); } } @@ -242,11 +243,11 @@ class Task; class TaskConfig : public Job::Config { Q_OBJECT public: - TaskConfig(Task& task) : _task{ task } {} + void init(Task* task) { _task = task; } public slots: void refresh(); private: - Task& _task; + Task* _task; }; // A task is a specialized job to run a collection of other jobs @@ -260,6 +261,7 @@ public: public: using Data = T; + // TODO: Make Data a shared_ptr, and give Config a weak_ptr Data _data; // The _config is unused; the model delegates to its data's _config @@ -267,6 +269,12 @@ public: _config = _data._config; } + virtual QConfig& getConfiguration() { + // Hook up the configuration if it is to be used + std::static_pointer_cast(_config)->init(&_data); + return _config; + } + void applyConfiguration() { jobConfigure(_data, *_config); } @@ -280,7 +288,7 @@ public: using Jobs = std::vector; - Task() : _config{ std::make_shared(*this) } {} + Task() : _config{ std::make_shared() } {} // Queue a new job to the container; returns the job's output template const Varying addJob(std::string name, A&&... args) { @@ -293,6 +301,7 @@ public: } QConfig getConfiguration() { return _config; } + void configure(const QObject& configuration) { for (auto& job : _jobs) { job.applyConfiguration();