From 9b4a395f6b592de7de9b4d7e61945067748705ed Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Wed, 6 Jan 2016 18:18:21 -0800 Subject: [PATCH 01/16] Promote render::Job to render::Task::Job --- .../render-utils/src/AmbientOcclusionEffect.h | 2 +- .../render-utils/src/AntialiasingEffect.h | 2 +- .../render-utils/src/DebugDeferredBuffer.h | 2 +- libraries/render-utils/src/HitEffect.h | 2 +- .../render-utils/src/RenderDeferredTask.cpp | 46 ++-- .../render-utils/src/RenderDeferredTask.h | 24 +- libraries/render/src/render/Context.cpp | 30 +++ libraries/render/src/render/Context.h | 112 +++++++++ libraries/render/src/render/DrawStatus.h | 2 +- libraries/render/src/render/DrawTask.cpp | 27 +-- libraries/render/src/render/DrawTask.h | 221 +---------------- libraries/render/src/render/Engine.cpp | 18 +- libraries/render/src/render/Engine.h | 110 +-------- libraries/render/src/render/Task.h | 229 ++++++++++++++++++ 14 files changed, 428 insertions(+), 399 deletions(-) create mode 100644 libraries/render/src/render/Context.cpp create mode 100644 libraries/render/src/render/Context.h create mode 100644 libraries/render/src/render/Task.h diff --git a/libraries/render-utils/src/AmbientOcclusionEffect.h b/libraries/render-utils/src/AmbientOcclusionEffect.h index 6153795ea6..55970a2d6e 100644 --- a/libraries/render-utils/src/AmbientOcclusionEffect.h +++ b/libraries/render-utils/src/AmbientOcclusionEffect.h @@ -22,7 +22,7 @@ public: AmbientOcclusion(); void run(const render::SceneContextPointer& sceneContext, const render::RenderContextPointer& renderContext); - typedef render::Job::Model JobModel; + using JobModel = render::Task::Job::Model; const gpu::PipelinePointer& getOcclusionPipeline(); const gpu::PipelinePointer& getHBlurPipeline(); diff --git a/libraries/render-utils/src/AntialiasingEffect.h b/libraries/render-utils/src/AntialiasingEffect.h index c7cce4cb15..51a8e3a1de 100644 --- a/libraries/render-utils/src/AntialiasingEffect.h +++ b/libraries/render-utils/src/AntialiasingEffect.h @@ -22,7 +22,7 @@ public: Antialiasing(); void run(const render::SceneContextPointer& sceneContext, const render::RenderContextPointer& renderContext); - typedef render::Job::Model JobModel; + using JobModel = render::Task::Job::Model; const gpu::PipelinePointer& getAntialiasingPipeline(); const gpu::PipelinePointer& getBlendPipeline(); diff --git a/libraries/render-utils/src/DebugDeferredBuffer.h b/libraries/render-utils/src/DebugDeferredBuffer.h index 682888b2af..c9ea24644a 100644 --- a/libraries/render-utils/src/DebugDeferredBuffer.h +++ b/libraries/render-utils/src/DebugDeferredBuffer.h @@ -18,7 +18,7 @@ class DebugDeferredBuffer { public: - using JobModel = render::Job::Model; + using JobModel = render::Task::Job::Model; DebugDeferredBuffer(); diff --git a/libraries/render-utils/src/HitEffect.h b/libraries/render-utils/src/HitEffect.h index 0a96a5300d..a83fb36693 100644 --- a/libraries/render-utils/src/HitEffect.h +++ b/libraries/render-utils/src/HitEffect.h @@ -17,7 +17,7 @@ public: HitEffect(); void run(const render::SceneContextPointer& sceneContext, const render::RenderContextPointer& renderContext); - typedef render::Job::Model JobModel; + using JobModel = render::Task::Job::Model; const gpu::PipelinePointer& getHitEffectPipeline(); diff --git a/libraries/render-utils/src/RenderDeferredTask.cpp b/libraries/render-utils/src/RenderDeferredTask.cpp index 1b1d08f353..9c286ba204 100755 --- a/libraries/render-utils/src/RenderDeferredTask.cpp +++ b/libraries/render-utils/src/RenderDeferredTask.cpp @@ -51,63 +51,63 @@ void ToneMappingDeferred::run(const SceneContextPointer& sceneContext, const Ren RenderDeferredTask::RenderDeferredTask() : Task() { // CPU only, create the list of renderedOpaques items - _jobs.push_back(Job(new FetchItems::JobModel("FetchOpaque", + addJob("FetchOpaque", std::make_shared( FetchItems([](const RenderContextPointer& context, int count) { context->getItemsConfig().opaque.numFeed = count; }) - ))); - _jobs.push_back(Job(new CullItemsOpaque::JobModel("CullOpaque", _jobs.back().getOutput()))); - _jobs.push_back(Job(new DepthSortItems::JobModel("DepthSortOpaque", _jobs.back().getOutput()))); + )); + addJob("CullOpaque", std::make_shared(_jobs.back().getOutput())); + addJob("DepthSortOpaque", std::make_shared(_jobs.back().getOutput())); auto& renderedOpaques = _jobs.back().getOutput(); // CPU only, create the list of renderedTransparents items - _jobs.push_back(Job(new FetchItems::JobModel("FetchTransparent", + addJob("FetchTransparent", std::make_shared( FetchItems(ItemFilter::Builder::transparentShape().withoutLayered(), [](const RenderContextPointer& context, int count) { context->getItemsConfig().transparent.numFeed = count; }) - ))); - _jobs.push_back(Job(new CullItemsTransparent::JobModel("CullTransparent", _jobs.back().getOutput()))); - _jobs.push_back(Job(new DepthSortItems::JobModel("DepthSortTransparent", _jobs.back().getOutput(), DepthSortItems(false)))); + )); + addJob("CullTransparent", std::make_shared(_jobs.back().getOutput())); + addJob("DepthSortTransparent", std::make_shared(_jobs.back().getOutput(), DepthSortItems(false))); auto& renderedTransparents = _jobs.back().getOutput(); // GPU Jobs: Start preparing the deferred and lighting buffer - _jobs.push_back(Job(new PrepareDeferred::JobModel("PrepareDeferred"))); + addJob("PrepareDeferred", std::make_shared()); // Render opaque objects in DeferredBuffer - _jobs.push_back(Job(new DrawOpaqueDeferred::JobModel("DrawOpaqueDeferred", renderedOpaques))); + addJob("DrawOpaqueDeferred", std::make_shared(renderedOpaques)); // Once opaque is all rendered create stencil background - _jobs.push_back(Job(new DrawStencilDeferred::JobModel("DrawOpaqueStencil"))); + addJob("DrawOpaqueStencil", std::make_shared()); // Use Stencil and start drawing background in Lighting buffer - _jobs.push_back(Job(new DrawBackgroundDeferred::JobModel("DrawBackgroundDeferred"))); + addJob("DrawBackgroundDeferred", std::make_shared()); // Draw Lights just add the lights to the current list of lights to deal with. NOt really gpu job for now. - _jobs.push_back(Job(new DrawLight::JobModel("DrawLight"))); + addJob("DrawLight", std::make_shared()); // DeferredBuffer is complete, now let's shade it into the LightingBuffer - _jobs.push_back(Job(new RenderDeferred::JobModel("RenderDeferred"))); + addJob("RenderDeferred", std::make_shared()); // AO job, to be revisited - _jobs.push_back(Job(new AmbientOcclusion::JobModel("AmbientOcclusion"))); + addJob("AmbientOcclusion", std::make_shared()); _jobs.back().setEnabled(false); _occlusionJobIndex = (int)_jobs.size() - 1; // AA job to be revisited - _jobs.push_back(Job(new Antialiasing::JobModel("Antialiasing"))); + addJob("Antialiasing", std::make_shared()); _jobs.back().setEnabled(false); _antialiasingJobIndex = (int)_jobs.size() - 1; // Render transparent objects forward in LigthingBuffer - _jobs.push_back(Job(new DrawTransparentDeferred::JobModel("TransparentDeferred", renderedTransparents))); + addJob("TransparentDeferred", std::make_shared(renderedTransparents)); // Lighting Buffer ready for tone mapping - _jobs.push_back(Job(new ToneMappingDeferred::JobModel("ToneMapping"))); + addJob("ToneMapping", std::make_shared()); _toneMappingJobIndex = (int)_jobs.size() - 1; // Debugging Deferred buffer job - _jobs.push_back(Job(new DebugDeferredBuffer::JobModel("DebugDeferredBuffer"))); + addJob("DebugDeferredBuffer", std::make_shared()); _jobs.back().setEnabled(false); _drawDebugDeferredBufferIndex = (int)_jobs.size() - 1; @@ -116,18 +116,18 @@ RenderDeferredTask::RenderDeferredTask() : Task() { // Grab a texture map representing the different status icons and assign that to the drawStatsuJob auto iconMapPath = PathUtils::resourcesPath() + "icons/statusIconAtlas.svg"; auto statusIconMap = DependencyManager::get()->getImageTexture(iconMapPath); - _jobs.push_back(Job(new render::DrawStatus::JobModel("DrawStatus", renderedOpaques, DrawStatus(statusIconMap)))); + addJob("DrawStatus", std::make_shared(renderedOpaques, DrawStatus(statusIconMap))); _jobs.back().setEnabled(false); _drawStatusJobIndex = (int)_jobs.size() - 1; } - _jobs.push_back(Job(new DrawOverlay3D::JobModel("DrawOverlay3D"))); + addJob("DrawOverlay3D", std::make_shared()); - _jobs.push_back(Job(new HitEffect::JobModel("HitEffect"))); + addJob("HitEffect", std::make_shared()); _jobs.back().setEnabled(false); _drawHitEffectJobIndex = (int)_jobs.size() -1; - _jobs.push_back(Job(new Blit::JobModel("Blit"))); + addJob("Blit", std::make_shared()); } RenderDeferredTask::~RenderDeferredTask() { diff --git a/libraries/render-utils/src/RenderDeferredTask.h b/libraries/render-utils/src/RenderDeferredTask.h index 051faa3238..330a1cceae 100755 --- a/libraries/render-utils/src/RenderDeferredTask.h +++ b/libraries/render-utils/src/RenderDeferredTask.h @@ -22,14 +22,14 @@ class SetupDeferred { public: void run(const render::SceneContextPointer& sceneContext, const render::RenderContextPointer& renderContext); - typedef render::Job::Model JobModel; + using JobModel = render::Task::Job::Model; }; class PrepareDeferred { public: void run(const render::SceneContextPointer& sceneContext, const render::RenderContextPointer& renderContext); - typedef render::Job::Model JobModel; + using JobModel = render::Task::Job::Model; }; @@ -37,7 +37,7 @@ class RenderDeferred { public: void run(const render::SceneContextPointer& sceneContext, const render::RenderContextPointer& renderContext); - typedef render::Job::Model JobModel; + using JobModel = render::Task::Job::Model; }; class ToneMappingDeferred { @@ -46,21 +46,21 @@ public: ToneMappingEffect _toneMappingEffect; - typedef render::Job::Model JobModel; + using JobModel = render::Task::Job::Model; }; class DrawOpaqueDeferred { public: void run(const render::SceneContextPointer& sceneContext, const render::RenderContextPointer& renderContext, const render::ItemIDsBounds& inItems); - typedef render::Job::ModelI JobModel; + using JobModel = render::Task::Job::ModelI; }; class DrawTransparentDeferred { public: void run(const render::SceneContextPointer& sceneContext, const render::RenderContextPointer& renderContext, const render::ItemIDsBounds& inItems); - typedef render::Job::ModelI JobModel; + using JobModel = render::Task::Job::ModelI; }; class DrawStencilDeferred { @@ -70,14 +70,14 @@ public: void run(const render::SceneContextPointer& sceneContext, const render::RenderContextPointer& renderContext); - typedef render::Job::Model JobModel; + using JobModel = render::Task::Job::Model; }; class DrawBackgroundDeferred { public: void run(const render::SceneContextPointer& sceneContext, const render::RenderContextPointer& renderContext); - typedef render::Job::Model JobModel; + using JobModel = render::Task::Job::Model; }; class DrawOverlay3D { @@ -86,15 +86,15 @@ public: static const gpu::PipelinePointer& getOpaquePipeline(); void run(const render::SceneContextPointer& sceneContext, const render::RenderContextPointer& renderContext); - - typedef render::Job::Model JobModel; + + using JobModel = render::Task::Job::Model; }; class Blit { public: void run(const render::SceneContextPointer& sceneContext, const render::RenderContextPointer& renderContext); - typedef render::Job::Model JobModel; + using JobModel = render::Task::Job::Model; }; class RenderDeferredTask : public render::Task { @@ -103,7 +103,7 @@ public: RenderDeferredTask(); ~RenderDeferredTask(); - render::Jobs _jobs; + render::Task::Jobs _jobs; int _drawDebugDeferredBufferIndex = -1; int _drawStatusJobIndex = -1; diff --git a/libraries/render/src/render/Context.cpp b/libraries/render/src/render/Context.cpp new file mode 100644 index 0000000000..4f7895e4fc --- /dev/null +++ b/libraries/render/src/render/Context.cpp @@ -0,0 +1,30 @@ +// +// Context.cpp +// render/src/render +// +// Created by Zach Pomerantz on 1/6/2015. +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include "Context.h" + +using namespace render; + +RenderContext::RenderContext(ItemsConfig items, Tone tone, int drawStatus, bool drawHitEffect, glm::vec4 deferredDebugSize, int deferredDebugMode) + : _deferredDebugMode{ deferredDebugMode }, _deferredDebugSize{ deferredDebugSize }, + _args{ nullptr }, + _drawStatus{ drawStatus }, _drawHitEffect{ drawHitEffect }, + _items{ items }, _tone{ tone } {} + +void RenderContext::setOptions(bool occlusion, bool fxaa, bool showOwned) { + _occlusionStatus = occlusion; + _fxaaStatus = fxaa; + + if (showOwned) { + _drawStatus |= render::showNetworkStatusFlag; + } +}; + diff --git a/libraries/render/src/render/Context.h b/libraries/render/src/render/Context.h new file mode 100644 index 0000000000..5f8ca60ddb --- /dev/null +++ b/libraries/render/src/render/Context.h @@ -0,0 +1,112 @@ +// +// Engine.h +// render/src/render +// +// Created by Zach Pomerantz on 1/6/2015. +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#ifndef hifi_render_Context_h +#define hifi_render_Context_h + +#include "Scene.h" + +namespace render { + +class SceneContext { +public: + ScenePointer _scene; + + SceneContext() {} +}; +using SceneContextPointer = std::shared_ptr; + +// see examples/utilities/tools/renderEngineDebug.js +const int showDisplayStatusFlag = 1; +const int showNetworkStatusFlag = 2; + +class RenderContext { +public: + class ItemsConfig { + public: + class Counter { + public: + Counter() {}; + Counter(const Counter& counter) { + numFeed = numDrawn = 0; + maxDrawn = counter.maxDrawn; + }; + + void setCounts(const Counter& counter) { + numFeed = counter.numFeed; + numDrawn = counter.numDrawn; + }; + + int numFeed = 0; + int numDrawn = 0; + int maxDrawn = -1; + }; + + class State : public Counter { + public: + bool render = true; + bool cull = true; + bool sort = true; + + Counter counter{}; + }; + + ItemsConfig(State opaqueState, State transparentState, Counter overlay3DCounter) + : opaque{ opaqueState }, transparent{ transparentState }, overlay3D{ overlay3DCounter } {} + ItemsConfig() : ItemsConfig{ {}, {}, {} } {} + + // TODO: If member count increases, store counters in a map instead of multiple members + State opaque{}; + State transparent{}; + Counter overlay3D{}; + }; + + class Tone { + public: + int toneCurve = 1; // Means just Gamma 2.2 correction + float exposure = 0.0; + }; + + RenderContext(ItemsConfig items, Tone tone, int drawStatus, bool drawHitEffect, glm::vec4 deferredDebugSize, int deferredDebugMode); + RenderContext() : RenderContext({}, {}, {}, {}, {}, {}) {}; + + void setArgs(RenderArgs* args) { _args = args; } + inline RenderArgs* getArgs() { return _args; } + inline ItemsConfig& getItemsConfig() { return _items; } + inline Tone& getTone() { return _tone; } + inline int getDrawStatus() { return _drawStatus; } + inline bool getDrawHitEffect() { return _drawHitEffect; } + inline bool getOcclusionStatus() { return _occlusionStatus; } + inline bool getFxaaStatus() { return _fxaaStatus; } + void setOptions(bool occlusion, bool fxaa, bool showOwned); + + // Debugging + int _deferredDebugMode; + glm::vec4 _deferredDebugSize; + +protected: + RenderArgs* _args; + + // Options + int _drawStatus; // bitflag + bool _drawHitEffect; + bool _occlusionStatus = false; + bool _fxaaStatus = false; + + ItemsConfig _items; + Tone _tone; +}; +typedef std::shared_ptr RenderContextPointer; + +} + +#endif // hifi_render_Context_h + diff --git a/libraries/render/src/render/DrawStatus.h b/libraries/render/src/render/DrawStatus.h index 1239819911..c9cf16c0cb 100644 --- a/libraries/render/src/render/DrawStatus.h +++ b/libraries/render/src/render/DrawStatus.h @@ -38,7 +38,7 @@ namespace render { void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const ItemIDsBounds& inItems); - typedef Job::ModelI JobModel; + using JobModel = Task::Job::ModelI; const gpu::PipelinePointer getDrawItemBoundsPipeline(); const gpu::PipelinePointer getDrawItemStatusPipeline(); diff --git a/libraries/render/src/render/DrawTask.cpp b/libraries/render/src/render/DrawTask.cpp index 44ba57143f..6b35e06a92 100755 --- a/libraries/render/src/render/DrawTask.cpp +++ b/libraries/render/src/render/DrawTask.cpp @@ -22,11 +22,9 @@ using namespace render; -DrawSceneTask::DrawSceneTask() : Task() { -} +DrawSceneTask::DrawSceneTask() : Task() {} -DrawSceneTask::~DrawSceneTask() { -} +DrawSceneTask::~DrawSceneTask() {} void DrawSceneTask::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { // sanity checks @@ -35,7 +33,6 @@ void DrawSceneTask::run(const SceneContextPointer& sceneContext, const RenderCon return; } - // Is it possible that we render without a viewFrustum ? if (!(renderContext->getArgs() && renderContext->getArgs()->_viewFrustum)) { return; @@ -46,13 +43,6 @@ void DrawSceneTask::run(const SceneContextPointer& sceneContext, const RenderCon } }; -Job::~Job() { -} - - - - - void render::cullItems(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const ItemIDsBounds& inItems, ItemIDsBounds& outItems) { assert(renderContext->getArgs()); assert(renderContext->getArgs()->_viewFrustum); @@ -297,16 +287,3 @@ void DrawBackground::run(const SceneContextPointer& sceneContext, const RenderCo }); args->_batch = nullptr; } - -void ItemMaterialBucketMap::insert(const ItemID& id, const model::MaterialKey& key) { - // Insert the itemID in every bucket where it filters true - for (auto& bucket : (*this)) { - if (bucket.first.test(key)) { - bucket.second.push_back(id); - } - } -} - -void ItemMaterialBucketMap::allocateStandardMaterialBuckets() { - (*this)[model::MaterialFilter::Builder::opaqueDiffuse()]; -} diff --git a/libraries/render/src/render/DrawTask.h b/libraries/render/src/render/DrawTask.h index ab102e32a7..3027cde73f 100755 --- a/libraries/render/src/render/DrawTask.h +++ b/libraries/render/src/render/DrawTask.h @@ -9,217 +9,15 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -#ifndef hifi_render_Task_h -#define hifi_render_Task_h +#ifndef hifi_render_DrawTask_h +#define hifi_render_DrawTask_h #include "Engine.h" #include "gpu/Batch.h" -#include namespace render { -template void jobRun(T& jobModel, const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { - jobModel.run(sceneContext, renderContext); -} -template void jobRunI(T& jobModel, const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const I& input) { - jobModel.run(sceneContext, renderContext, input); -} -template void jobRunO(T& jobModel, const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, O& output) { - jobModel.run(sceneContext, renderContext, output); -} -template void jobRunIO(T& jobModel, const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const I& input, O& output) { - jobModel.run(sceneContext, renderContext, input, output); -} - -class Job { -public: - - // Varying represent a varying piece of data - class Varying { - public: - - Varying(const Varying& var): _concept(var._concept) {} - - Varying() {} - template - Varying(const T& data) : _concept(std::make_shared>(data)) {} - - // Access the _data contained win the concept explicitely - template T& edit() { return std::static_pointer_cast>(_concept)->_data; } - template const T& get() const { return std::static_pointer_cast>(_concept)->_data; } - - protected: - friend class Job; - - std::vector> _consumerJobs; - - void addJobConsumer(const std::shared_ptr& job) { - _consumerJobs.push_back(job); - } - - class Concept { - public: - virtual ~Concept() = default; - }; - template class Model : public Concept { - public: - typedef T Data; - Data _data; - Model(const Model& source): _data(source.data) {} - Model(const Data& data): _data(data) {} - virtual ~Model() {} - }; - - std::shared_ptr _concept; - }; - - Job(const Job& other) : _concept(other._concept) {} - ~Job(); - - bool isEnabled() const { return _concept->isEnabled(); } - void setEnabled(bool isEnabled) { _concept->setEnabled(isEnabled); } - - const std::string& getName() const { return _concept->getName(); } - const Varying getInput() const { return _concept->getInput(); } - const Varying getOutput() const { return _concept->getOutput(); } - - template T& edit() { - auto theConcept = std::dynamic_pointer_cast(_concept); - assert(theConcept); - return theConcept->_data; - } - template const T& get() const { - auto theConcept = std::dynamic_pointer_cast(_concept); - assert(theConcept); - return theConcept->_data; - } - - void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { - PerformanceTimer perfTimer(getName().c_str()); - PROFILE_RANGE(getName().c_str()); - _concept->run(sceneContext, renderContext); - } - -protected: -public: - - class Concept { - std::string _name; - bool _isEnabled = true; - public: - Concept() : _name() {} - Concept(const std::string& name) : _name(name) {} - virtual ~Concept() = default; - - void setName(const std::string& name) { _name = name; } - const std::string& getName() const { return _name; } - - bool isEnabled() const { return _isEnabled; } - void setEnabled(bool isEnabled) { _isEnabled = isEnabled; } - - virtual const Varying getInput() const { return Varying(); } - virtual const Varying getOutput() const { return Varying(); } - virtual void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) = 0; - }; - - Job(Concept* concept) : _concept(concept) {} - -public: - template class Model : public Concept { - public: - typedef T Data; - - Data _data; - - Model() {} - Model(const std::string& name): Concept(name) {} - Model(Data data): _data(data) {} - Model(Data data, const std::string& name): Concept(name), _data(data) {} - - void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { - if (isEnabled()) { - jobRun(_data, sceneContext, renderContext); - } - } - }; - - template class ModelI : public Concept { - public: - typedef T Data; - typedef I Input; - - Data _data; - Varying _input; - - const Varying getInput() const { return _input; } - - ModelI(const std::string& name, const Varying& input, Data data = Data()) : Concept(name), _data(data), _input(input) {} - ModelI(const std::string& name, Data data): Concept(name), _data(data) {} - - void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { - if (isEnabled()) { - jobRunI(_data, sceneContext, renderContext, _input.get()); - } - } - }; - - template class ModelO : public Concept { - public: - typedef T Data; - typedef O Output; - - Data _data; - Varying _output; - - const Varying getOutput() const { return _output; } - - ModelO(const std::string& name): Concept(name), _output(Output()) { - - } - - ModelO(const std::string& name, Data data): Concept(name), _data(data), _output(Output()) {} - - void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { - if (isEnabled()) { - jobRunO(_data, sceneContext, renderContext, _output.edit()); - } - } - }; - - template class ModelIO : public Concept { - public: - typedef T Data; - typedef I Input; - typedef O Output; - - Data _data; - Varying _input; - Varying _output; - - const Varying getInput() const { return _input; } - const Varying getOutput() const { return _output; } - - ModelIO(const std::string& name, const Varying& input, Data data = Data()): Concept(name), _data(data), _input(input), _output(Output()) {} - ModelIO(const std::string& name, Data data, Output output): Concept(name), _data(data), _output(output) {} - - void setInput(const Varying& input) { _input = input; } - - void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { - if (isEnabled()) { - jobRunIO(_data, sceneContext, renderContext, _input.get(), _output.edit()); - } - } - }; - - std::shared_ptr _concept; -}; - - - - -typedef std::vector Jobs; - void cullItems(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const ItemIDsBounds& inItems, ItemIDsBounds& outITems); void depthSortItems(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, bool frontToBack, const ItemIDsBounds& inItems, ItemIDsBounds& outITems); void renderItems(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const ItemIDsBounds& inItems, int maxDrawnItems = -1); @@ -236,25 +34,25 @@ public: void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, ItemIDsBounds& outItems); - typedef Job::ModelO JobModel; + using JobModel = Task::Job::ModelO; }; class CullItems { public: void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const ItemIDsBounds& inItems, ItemIDsBounds& outItems); - typedef Job::ModelIO JobModel; + using JobModel = Task::Job::ModelIO; }; class CullItemsOpaque { public: void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const ItemIDsBounds& inItems, ItemIDsBounds& outItems); - typedef Job::ModelIO JobModel; + using JobModel = Task::Job::ModelIO; }; class CullItemsTransparent { public: void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const ItemIDsBounds& inItems, ItemIDsBounds& outItems); - typedef Job::ModelIO JobModel; + using JobModel = Task::Job::ModelIO; }; class DepthSortItems { @@ -265,14 +63,14 @@ public: void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const ItemIDsBounds& inItems, ItemIDsBounds& outITems); - typedef Job::ModelIO JobModel; + using JobModel = Task::Job::ModelIO; }; class DrawLight { public: void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext); - typedef Job::Model JobModel; + using JobModel = Task::Job::Model; }; class DrawBackground { @@ -296,7 +94,6 @@ public: }; - // A map of ItemIDs allowing to create bucket lists of SHAPE type items which are filtered by their // Material class ItemMaterialBucketMap : public std::map { @@ -313,4 +110,4 @@ void materialSortItems(const SceneContextPointer& sceneContext, const RenderCont } -#endif // hifi_render_Task_h +#endif // hifi_render_DrawTask_h diff --git a/libraries/render/src/render/Engine.cpp b/libraries/render/src/render/Engine.cpp index 907c836347..4f07da8d38 100644 --- a/libraries/render/src/render/Engine.cpp +++ b/libraries/render/src/render/Engine.cpp @@ -8,26 +8,13 @@ // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // + #include "Engine.h" #include "DrawTask.h" + using namespace render; -RenderContext::RenderContext(ItemsConfig items, Tone tone, int drawStatus, bool drawHitEffect, glm::vec4 deferredDebugSize, int deferredDebugMode) - : _deferredDebugMode{ deferredDebugMode }, _deferredDebugSize{ deferredDebugSize }, - _args{ nullptr }, - _drawStatus{ drawStatus }, _drawHitEffect{ drawHitEffect }, - _items{ items }, _tone{ tone } {} - -void RenderContext::setOptions(bool occlusion, bool fxaa, bool showOwned) { - _occlusionStatus = occlusion; - _fxaaStatus = fxaa; - - if (showOwned) { - _drawStatus |= render::showNetworkStatusFlag; - } -}; - Engine::Engine() : _sceneContext(std::make_shared()), _renderContext(std::make_shared()) @@ -49,6 +36,7 @@ void Engine::addTask(const TaskPointer& task) { } void Engine::run() { + // TODO: Tasks will need to be specified such that their data can feed into each other for (auto task : _tasks) { task->run(_sceneContext, _renderContext); } diff --git a/libraries/render/src/render/Engine.h b/libraries/render/src/render/Engine.h index 4192dd3ed9..e07402f411 100644 --- a/libraries/render/src/render/Engine.h +++ b/libraries/render/src/render/Engine.h @@ -12,115 +12,11 @@ #ifndef hifi_render_Engine_h #define hifi_render_Engine_h -#include "Scene.h" +#include "Context.h" +#include "Task.h" namespace render { - -class SceneContext { -public: - ScenePointer _scene; - - SceneContext() {} -}; -using SceneContextPointer = std::shared_ptr; - -// see examples/utilities/tools/renderEngineDebug.js -const int showDisplayStatusFlag = 1; -const int showNetworkStatusFlag = 2; - - -class RenderContext { -public: - class ItemsConfig { - public: - class Counter { - public: - Counter() {}; - Counter(const Counter& counter) { - numFeed = numDrawn = 0; - maxDrawn = counter.maxDrawn; - }; - - void setCounts(const Counter& counter) { - numFeed = counter.numFeed; - numDrawn = counter.numDrawn; - }; - - int numFeed = 0; - int numDrawn = 0; - int maxDrawn = -1; - }; - - class State : public Counter { - public: - bool render = true; - bool cull = true; - bool sort = true; - - Counter counter{}; - }; - - ItemsConfig(State opaqueState, State transparentState, Counter overlay3DCounter) - : opaque{ opaqueState }, transparent{ transparentState }, overlay3D{ overlay3DCounter } {} - ItemsConfig() : ItemsConfig{ {}, {}, {} } {} - - // TODO: If member count increases, store counters in a map instead of multiple members - State opaque{}; - State transparent{}; - Counter overlay3D{}; - }; - - class Tone { - public: - int toneCurve = 1; // Means just Gamma 2.2 correction - float exposure = 0.0; - }; - - RenderContext(ItemsConfig items, Tone tone, int drawStatus, bool drawHitEffect, glm::vec4 deferredDebugSize, int deferredDebugMode); - RenderContext() : RenderContext({}, {}, {}, {}, {}, {}) {}; - - void setArgs(RenderArgs* args) { _args = args; } - inline RenderArgs* getArgs() { return _args; } - inline ItemsConfig& getItemsConfig() { return _items; } - inline Tone& getTone() { return _tone; } - inline int getDrawStatus() { return _drawStatus; } - inline bool getDrawHitEffect() { return _drawHitEffect; } - inline bool getOcclusionStatus() { return _occlusionStatus; } - inline bool getFxaaStatus() { return _fxaaStatus; } - void setOptions(bool occlusion, bool fxaa, bool showOwned); - - // Debugging - int _deferredDebugMode; - glm::vec4 _deferredDebugSize; - -protected: - RenderArgs* _args; - - // Options - int _drawStatus; // bitflag - bool _drawHitEffect; - bool _occlusionStatus = false; - bool _fxaaStatus = false; - - ItemsConfig _items; - Tone _tone; -}; -typedef std::shared_ptr RenderContextPointer; - -// The base class for a task that runs on the SceneContext -class Task { -public: - Task() {} - ~Task() {} - - virtual void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {} - -protected: -}; -typedef std::shared_ptr TaskPointer; -typedef std::vector Tasks; - // The root of the tasks, the Engine, should not be known from the Tasks, // The SceneContext is what navigates from the engine down to the Tasks class Engine { @@ -146,7 +42,6 @@ public: void buildStandardTaskPipeline(); protected: - Tasks _tasks; SceneContextPointer _sceneContext; @@ -157,3 +52,4 @@ typedef std::shared_ptr EnginePointer; } #endif // hifi_render_Engine_h + diff --git a/libraries/render/src/render/Task.h b/libraries/render/src/render/Task.h new file mode 100644 index 0000000000..66221d89e8 --- /dev/null +++ b/libraries/render/src/render/Task.h @@ -0,0 +1,229 @@ +// +// Task.h +// render/src/render +// +// Created by Zach Pomerantz on 1/6/2015. +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#ifndef hifi_render_Task_h +#define hifi_render_Task_h + +#include "Context.h" + +#include "gpu/Batch.h" +#include + +namespace render { + +// A varying piece of data, to be used as Job/Task I/O +// TODO: Task IO +class Varying { +public: + Varying() {} + Varying(const Varying& var) : _concept(var._concept) {} + template Varying(const T& data) : _concept(std::make_shared>(data)) {} + + template T& edit() { return std::static_pointer_cast>(_concept)->_data; } + template const T& get() { return std::static_pointer_cast>(_concept)->_data; } + +protected: + class Concept { + public: + virtual ~Concept() = default; + }; + template class Model : public Concept { + public: + using Data = T; + + Model(const Data& data) : _data(data) {} + virtual ~Model() = default; + + Data _data; + }; + + std::shared_ptr _concept; +}; + +// FIXME: In c++17, use default classes of nullptr_t to combine these +template void jobRun(T& jobModel, const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { + jobModel.run(sceneContext, renderContext); +} +template void jobRunI(T& jobModel, const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const I& input) { + jobModel.run(sceneContext, renderContext, input); +} +template void jobRunO(T& jobModel, const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, O& output) { + jobModel.run(sceneContext, renderContext, output); +} +template void jobRunIO(T& jobModel, const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const I& input, O& output) { + jobModel.run(sceneContext, renderContext, input, output); +} + +// The base class for a task that runs on the SceneContext +class Task { +public: + // The guts of a task; tasks are composed of multiple Jobs that execute serially + class Job { + public: + friend class Task; + + // The guts of a job; jobs are composed of a concept + class Concept { + public: + Concept() = default; + virtual ~Concept() = default; + + bool isEnabled() const { return _isEnabled; } + void setEnabled(bool isEnabled) { _isEnabled = isEnabled; } + + virtual const Varying getInput() const { return Varying(); } + virtual const Varying getOutput() const { return Varying(); } + virtual void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) = 0; + + protected: + + bool _isEnabled = true; + }; + using ConceptPointer = std::shared_ptr; + + + template class Model : public Concept { + public: + typedef T Data; + + Data _data; + + Model() {} + Model(Data data): _data(data) {} + + void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { + if (isEnabled()) { + jobRun(_data, sceneContext, renderContext); + } + } + }; + + template class ModelI : public Concept { + public: + typedef T Data; + typedef I Input; + + Data _data; + Varying _input; + + const Varying getInput() const { return _input; } + + ModelI(const Varying& input, Data data = Data()) : _data(data), _input(input) {} + ModelI(Data data) : _data(data) {} + + void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { + if (isEnabled()) { + jobRunI(_data, sceneContext, renderContext, _input.get()); + } + } + }; + + template class ModelO : public Concept { + public: + typedef T Data; + typedef O Output; + + Data _data; + Varying _output; + + const Varying getOutput() const { return _output; } + + ModelO(Data data) : _data(data), _output(Output()) {} + ModelO() : _output(Output()) {} + + void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { + if (isEnabled()) { + jobRunO(_data, sceneContext, renderContext, _output.edit()); + } + } + }; + + template class ModelIO : public Concept { + public: + typedef T Data; + typedef I Input; + typedef O Output; + + Data _data; + Varying _input; + Varying _output; + + const Varying getInput() const { return _input; } + const Varying getOutput() const { return _output; } + + ModelIO(const Varying& input, Data data = Data()) : _data(data), _input(input), _output(Output()) {} + ModelIO(Data data) : _data(data), _output(Output()) {} + + void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { + if (isEnabled()) { + jobRunIO(_data, sceneContext, renderContext, _input.get(), _output.edit()); + } + } + }; + + Job(ConceptPointer concept) : _concept(concept) {} + Job(std::string name, ConceptPointer concept) : _name(name), _concept(concept) {} + + bool isEnabled() const { return _concept->isEnabled(); } + void setEnabled(bool isEnabled) { _concept->setEnabled(isEnabled); } + + const Varying getInput() const { return _concept->getInput(); } + const Varying getOutput() const { return _concept->getOutput(); } + + template T& edit() { + auto concept = std::static_pointer_cast(_concept); + assert(concept); + return concept->_data; + } + template const T& get() const { + auto concept = std::static_pointer_cast(_concept); + assert(concept); + return concept->_data; + } + + void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { + PerformanceTimer perfTimer(_name.c_str()); + PROFILE_RANGE(_name.c_str()); + + _concept->run(sceneContext, renderContext); + } + protected: + ConceptPointer _concept; + std::string _name = ""; + + }; + using Jobs = std::vector; + +public: + using VaryingPointer = std::shared_ptr; + + Task() {} + ~Task() {} + + // Queue a new job to the task; returns the job's index + template size_t addJob(std::string name, std::shared_ptr jobConcept) + { size_t size = _jobs.size(); _jobs.emplace_back(name, jobConcept); return size; } + template size_t addJob(std::shared_ptr jobConcept) + { size_t size = _jobs.size(); _jobs.emplace_back(jobConcept); return size; } + + const Job& getJob(size_t i) const { return _jobs.at(i); } + + virtual void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) {} + +protected: + Jobs _jobs; +}; +typedef std::shared_ptr TaskPointer; +typedef std::vector Tasks; + +} + +#endif // hifi_render_Task_h From f902c4078d8594749792790af9969e32352ab17f Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Wed, 6 Jan 2016 18:34:37 -0800 Subject: [PATCH 02/16] Clean old DrawSceneTask --- .../render-utils/src/RenderDeferredTask.cpp | 4 +- .../render-utils/src/RenderDeferredTask.h | 6 +- libraries/render/src/render/DrawTask.cpp | 56 ------------------- libraries/render/src/render/DrawTask.h | 35 ------------ libraries/render/src/render/Engine.cpp | 11 ---- libraries/render/src/render/Engine.h | 3 - 6 files changed, 3 insertions(+), 112 deletions(-) diff --git a/libraries/render-utils/src/RenderDeferredTask.cpp b/libraries/render-utils/src/RenderDeferredTask.cpp index 9c286ba204..d6b6678042 100755 --- a/libraries/render-utils/src/RenderDeferredTask.cpp +++ b/libraries/render-utils/src/RenderDeferredTask.cpp @@ -24,6 +24,7 @@ #include "HitEffect.h" #include "TextureCache.h" +#include "render/DrawTask.h" #include "render/DrawStatus.h" #include "AmbientOcclusionEffect.h" #include "AntialiasingEffect.h" @@ -130,9 +131,6 @@ RenderDeferredTask::RenderDeferredTask() : Task() { addJob("Blit", std::make_shared()); } -RenderDeferredTask::~RenderDeferredTask() { -} - void RenderDeferredTask::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { // sanity checks assert(sceneContext); diff --git a/libraries/render-utils/src/RenderDeferredTask.h b/libraries/render-utils/src/RenderDeferredTask.h index 330a1cceae..220a1edb5d 100755 --- a/libraries/render-utils/src/RenderDeferredTask.h +++ b/libraries/render-utils/src/RenderDeferredTask.h @@ -12,7 +12,7 @@ #ifndef hifi_RenderDeferredTask_h #define hifi_RenderDeferredTask_h -#include "render/DrawTask.h" +#include "render/Engine.h" #include "gpu/Pipeline.h" @@ -101,10 +101,8 @@ class RenderDeferredTask : public render::Task { public: RenderDeferredTask(); - ~RenderDeferredTask(); + ~RenderDeferredTask() = default; - render::Task::Jobs _jobs; - int _drawDebugDeferredBufferIndex = -1; int _drawStatusJobIndex = -1; int _drawHitEffectJobIndex = -1; diff --git a/libraries/render/src/render/DrawTask.cpp b/libraries/render/src/render/DrawTask.cpp index 6b35e06a92..d9fbc79d1e 100755 --- a/libraries/render/src/render/DrawTask.cpp +++ b/libraries/render/src/render/DrawTask.cpp @@ -15,34 +15,12 @@ #include #include -#include #include #include using namespace render; -DrawSceneTask::DrawSceneTask() : Task() {} - -DrawSceneTask::~DrawSceneTask() {} - -void DrawSceneTask::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { - // sanity checks - assert(sceneContext); - if (!sceneContext->_scene) { - return; - } - - // Is it possible that we render without a viewFrustum ? - if (!(renderContext->getArgs() && renderContext->getArgs()->_viewFrustum)) { - return; - } - - for (auto job : _jobs) { - job.run(sceneContext, renderContext); - } -}; - void render::cullItems(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const ItemIDsBounds& inItems, ItemIDsBounds& outItems) { assert(renderContext->getArgs()); assert(renderContext->getArgs()->_viewFrustum); @@ -253,37 +231,3 @@ void DrawLight::run(const SceneContextPointer& sceneContext, const RenderContext }); args->_batch = nullptr; } - -void DrawBackground::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { - assert(renderContext->getArgs()); - assert(renderContext->getArgs()->_viewFrustum); - - // render backgrounds - auto& scene = sceneContext->_scene; - auto& items = scene->getMasterBucket().at(ItemFilter::Builder::background()); - - - ItemIDsBounds inItems; - inItems.reserve(items.size()); - for (auto id : items) { - inItems.emplace_back(id); - } - RenderArgs* args = renderContext->getArgs(); - doInBatch(args->_context, [=](gpu::Batch& batch) { - args->_batch = &batch; - batch.enableSkybox(true); - batch.setViewportTransform(args->_viewport); - batch.setStateScissorRect(args->_viewport); - - glm::mat4 projMat; - Transform viewMat; - args->_viewFrustum->evalProjectionMatrix(projMat); - args->_viewFrustum->evalViewTransform(viewMat); - - batch.setProjectionTransform(projMat); - batch.setViewTransform(viewMat); - - renderItems(sceneContext, renderContext, inItems); - }); - args->_batch = nullptr; -} diff --git a/libraries/render/src/render/DrawTask.h b/libraries/render/src/render/DrawTask.h index 3027cde73f..3efb06871a 100755 --- a/libraries/render/src/render/DrawTask.h +++ b/libraries/render/src/render/DrawTask.h @@ -73,41 +73,6 @@ public: using JobModel = Task::Job::Model; }; -class DrawBackground { -public: - void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext); - - - typedef Job::Model JobModel; -}; - - -class DrawSceneTask : public Task { -public: - - DrawSceneTask(); - ~DrawSceneTask(); - - Jobs _jobs; - - virtual void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext); - -}; - -// A map of ItemIDs allowing to create bucket lists of SHAPE type items which are filtered by their -// Material -class ItemMaterialBucketMap : public std::map { -public: - - ItemMaterialBucketMap() {} - - void insert(const ItemID& id, const model::MaterialKey& key); - - // standard builders allocating the main buckets - void allocateStandardMaterialBuckets(); -}; -void materialSortItems(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const ItemIDsBounds& inItems, ItemIDsBounds& outItems); - } #endif // hifi_render_DrawTask_h diff --git a/libraries/render/src/render/Engine.cpp b/libraries/render/src/render/Engine.cpp index 4f07da8d38..aa5816475a 100644 --- a/libraries/render/src/render/Engine.cpp +++ b/libraries/render/src/render/Engine.cpp @@ -11,8 +11,6 @@ #include "Engine.h" -#include "DrawTask.h" - using namespace render; Engine::Engine() : @@ -41,12 +39,3 @@ void Engine::run() { task->run(_sceneContext, _renderContext); } } - -void Engine::buildStandardTaskPipeline() { - if (!_tasks.empty()) { - _tasks.clear(); - } - - addTask(std::make_shared()); -} - diff --git a/libraries/render/src/render/Engine.h b/libraries/render/src/render/Engine.h index e07402f411..fa01ef6018 100644 --- a/libraries/render/src/render/Engine.h +++ b/libraries/render/src/render/Engine.h @@ -38,9 +38,6 @@ public: void run(); - // standard pipeline of tasks - void buildStandardTaskPipeline(); - protected: Tasks _tasks; From 0f6d9a4db648647a2db0be647953e4a404e09f2d Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Thu, 7 Jan 2016 11:34:28 -0800 Subject: [PATCH 03/16] Use variadic for addJob for cleaner construction --- .../render-utils/src/RenderDeferredTask.cpp | 56 +++++++++---------- libraries/render/src/render/Task.h | 14 ++--- 2 files changed, 33 insertions(+), 37 deletions(-) diff --git a/libraries/render-utils/src/RenderDeferredTask.cpp b/libraries/render-utils/src/RenderDeferredTask.cpp index d6b6678042..36cd17bdc1 100755 --- a/libraries/render-utils/src/RenderDeferredTask.cpp +++ b/libraries/render-utils/src/RenderDeferredTask.cpp @@ -52,63 +52,61 @@ void ToneMappingDeferred::run(const SceneContextPointer& sceneContext, const Ren RenderDeferredTask::RenderDeferredTask() : Task() { // CPU only, create the list of renderedOpaques items - addJob("FetchOpaque", std::make_shared( - FetchItems([](const RenderContextPointer& context, int count) { - context->getItemsConfig().opaque.numFeed = count; - }) - )); - addJob("CullOpaque", std::make_shared(_jobs.back().getOutput())); - addJob("DepthSortOpaque", std::make_shared(_jobs.back().getOutput())); + addJob("FetchOpaque", FetchItems([](const RenderContextPointer& context, int count) { + context->getItemsConfig().opaque.numFeed = count; + })); + addJob("CullOpaque", _jobs.back().getOutput()); + addJob("DepthSortOpaque", _jobs.back().getOutput()); auto& renderedOpaques = _jobs.back().getOutput(); // CPU only, create the list of renderedTransparents items - addJob("FetchTransparent", std::make_shared( - FetchItems(ItemFilter::Builder::transparentShape().withoutLayered(), - [](const RenderContextPointer& context, int count) { - context->getItemsConfig().transparent.numFeed = count; - }) + addJob("FetchTransparent", FetchItems( + ItemFilter::Builder::transparentShape().withoutLayered(), + [](const RenderContextPointer& context, int count) { + context->getItemsConfig().transparent.numFeed = count; + } )); - addJob("CullTransparent", std::make_shared(_jobs.back().getOutput())); - addJob("DepthSortTransparent", std::make_shared(_jobs.back().getOutput(), DepthSortItems(false))); + addJob("CullTransparent", _jobs.back().getOutput()); + addJob("DepthSortTransparent", _jobs.back().getOutput(), DepthSortItems(false)); auto& renderedTransparents = _jobs.back().getOutput(); // GPU Jobs: Start preparing the deferred and lighting buffer - addJob("PrepareDeferred", std::make_shared()); + addJob("PrepareDeferred"); // Render opaque objects in DeferredBuffer - addJob("DrawOpaqueDeferred", std::make_shared(renderedOpaques)); + addJob("DrawOpaqueDeferred", renderedOpaques); // Once opaque is all rendered create stencil background - addJob("DrawOpaqueStencil", std::make_shared()); + addJob("DrawOpaqueStencil"); // Use Stencil and start drawing background in Lighting buffer - addJob("DrawBackgroundDeferred", std::make_shared()); + addJob("DrawBackgroundDeferred"); // Draw Lights just add the lights to the current list of lights to deal with. NOt really gpu job for now. - addJob("DrawLight", std::make_shared()); + addJob("DrawLight"); // DeferredBuffer is complete, now let's shade it into the LightingBuffer - addJob("RenderDeferred", std::make_shared()); + addJob("RenderDeferred"); // AO job, to be revisited - addJob("AmbientOcclusion", std::make_shared()); + addJob("AmbientOcclusion"); _jobs.back().setEnabled(false); _occlusionJobIndex = (int)_jobs.size() - 1; // AA job to be revisited - addJob("Antialiasing", std::make_shared()); + addJob("Antialiasing"); _jobs.back().setEnabled(false); _antialiasingJobIndex = (int)_jobs.size() - 1; // Render transparent objects forward in LigthingBuffer - addJob("TransparentDeferred", std::make_shared(renderedTransparents)); + addJob("TransparentDeferred", renderedTransparents); // Lighting Buffer ready for tone mapping - addJob("ToneMapping", std::make_shared()); + addJob("ToneMapping"); _toneMappingJobIndex = (int)_jobs.size() - 1; // Debugging Deferred buffer job - addJob("DebugDeferredBuffer", std::make_shared()); + addJob("DebugDeferredBuffer"); _jobs.back().setEnabled(false); _drawDebugDeferredBufferIndex = (int)_jobs.size() - 1; @@ -117,18 +115,18 @@ RenderDeferredTask::RenderDeferredTask() : Task() { // Grab a texture map representing the different status icons and assign that to the drawStatsuJob auto iconMapPath = PathUtils::resourcesPath() + "icons/statusIconAtlas.svg"; auto statusIconMap = DependencyManager::get()->getImageTexture(iconMapPath); - addJob("DrawStatus", std::make_shared(renderedOpaques, DrawStatus(statusIconMap))); + addJob("DrawStatus", renderedOpaques, DrawStatus(statusIconMap)); _jobs.back().setEnabled(false); _drawStatusJobIndex = (int)_jobs.size() - 1; } - addJob("DrawOverlay3D", std::make_shared()); + addJob("DrawOverlay3D"); - addJob("HitEffect", std::make_shared()); + addJob("HitEffect"); _jobs.back().setEnabled(false); _drawHitEffectJobIndex = (int)_jobs.size() -1; - addJob("Blit", std::make_shared()); + addJob("Blit"); } void RenderDeferredTask::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { diff --git a/libraries/render/src/render/Task.h b/libraries/render/src/render/Task.h index 66221d89e8..137074fc14 100644 --- a/libraries/render/src/render/Task.h +++ b/libraries/render/src/render/Task.h @@ -203,16 +203,14 @@ public: using Jobs = std::vector; public: - using VaryingPointer = std::shared_ptr; - - Task() {} - ~Task() {} + Task() = default; + virtual ~Task() = default; // Queue a new job to the task; returns the job's index - template size_t addJob(std::string name, std::shared_ptr jobConcept) - { size_t size = _jobs.size(); _jobs.emplace_back(name, jobConcept); return size; } - template size_t addJob(std::shared_ptr jobConcept) - { size_t size = _jobs.size(); _jobs.emplace_back(jobConcept); return size; } + template size_t addJob(std::string name, A&&... args) { + _jobs.emplace_back(name, std::make_shared(args...)); + return _jobs.size() - 1; + } const Job& getJob(size_t i) const { return _jobs.at(i); } From 39269f12ec0737988e0802e20ebb952ecd966425 Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Thu, 7 Jan 2016 11:34:43 -0800 Subject: [PATCH 04/16] Clean and fix Wreorder --- libraries/render-utils/src/RenderDeferredTask.h | 1 - libraries/render/src/render/Context.h | 2 +- libraries/render/src/render/Task.h | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/libraries/render-utils/src/RenderDeferredTask.h b/libraries/render-utils/src/RenderDeferredTask.h index 220a1edb5d..b4e926ddb9 100755 --- a/libraries/render-utils/src/RenderDeferredTask.h +++ b/libraries/render-utils/src/RenderDeferredTask.h @@ -101,7 +101,6 @@ class RenderDeferredTask : public render::Task { public: RenderDeferredTask(); - ~RenderDeferredTask() = default; int _drawDebugDeferredBufferIndex = -1; int _drawStatusJobIndex = -1; diff --git a/libraries/render/src/render/Context.h b/libraries/render/src/render/Context.h index 5f8ca60ddb..0820c50ca3 100644 --- a/libraries/render/src/render/Context.h +++ b/libraries/render/src/render/Context.h @@ -1,5 +1,5 @@ // -// Engine.h +// Context.h // render/src/render // // Created by Zach Pomerantz on 1/6/2015. diff --git a/libraries/render/src/render/Task.h b/libraries/render/src/render/Task.h index 137074fc14..f1a66baf15 100644 --- a/libraries/render/src/render/Task.h +++ b/libraries/render/src/render/Task.h @@ -170,7 +170,7 @@ public: }; Job(ConceptPointer concept) : _concept(concept) {} - Job(std::string name, ConceptPointer concept) : _name(name), _concept(concept) {} + Job(std::string name, ConceptPointer concept) : _concept(concept), _name(name) {} bool isEnabled() const { return _concept->isEnabled(); } void setEnabled(bool isEnabled) { _concept->setEnabled(isEnabled); } From c19b4574016fec9139cf7ef257a136e78f565e02 Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Thu, 7 Jan 2016 13:46:38 -0800 Subject: [PATCH 05/16] Forward arguments and mark T::JobModel as dependent name --- libraries/render/src/render/Task.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/render/src/render/Task.h b/libraries/render/src/render/Task.h index f1a66baf15..4d2a3728c6 100644 --- a/libraries/render/src/render/Task.h +++ b/libraries/render/src/render/Task.h @@ -208,7 +208,7 @@ public: // Queue a new job to the task; returns the job's index template size_t addJob(std::string name, A&&... args) { - _jobs.emplace_back(name, std::make_shared(args...)); + _jobs.emplace_back(name, std::make_shared(std::forward(args)...)); return _jobs.size() - 1; } From 695c69fd34a4265e8cfa2a34e70e49b3a45d3d6b Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Thu, 7 Jan 2016 14:22:17 -0800 Subject: [PATCH 06/16] Conform to coding standards --- libraries/render/src/render/Context.cpp | 4 ++- libraries/render/src/render/Context.h | 39 ++++++++++++------------- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/libraries/render/src/render/Context.cpp b/libraries/render/src/render/Context.cpp index 4f7895e4fc..8facaad1b2 100644 --- a/libraries/render/src/render/Context.cpp +++ b/libraries/render/src/render/Context.cpp @@ -17,7 +17,9 @@ RenderContext::RenderContext(ItemsConfig items, Tone tone, int drawStatus, bool : _deferredDebugMode{ deferredDebugMode }, _deferredDebugSize{ deferredDebugSize }, _args{ nullptr }, _drawStatus{ drawStatus }, _drawHitEffect{ drawHitEffect }, - _items{ items }, _tone{ tone } {} + _items{ items }, _tone{ tone } +{ +} void RenderContext::setOptions(bool occlusion, bool fxaa, bool showOwned) { _occlusionStatus = occlusion; diff --git a/libraries/render/src/render/Context.h b/libraries/render/src/render/Context.h index 0820c50ca3..4eeba0ee08 100644 --- a/libraries/render/src/render/Context.h +++ b/libraries/render/src/render/Context.h @@ -34,27 +34,24 @@ public: public: class Counter { public: - Counter() {}; - Counter(const Counter& counter) { - numFeed = numDrawn = 0; - maxDrawn = counter.maxDrawn; - }; + Counter() {} + Counter(const Counter& counter) : maxDrawn { counter.maxDrawn } {} void setCounts(const Counter& counter) { numFeed = counter.numFeed; numDrawn = counter.numDrawn; }; - int numFeed = 0; - int numDrawn = 0; - int maxDrawn = -1; + int numFeed { 0 }; + int numDrawn { 0 }; + int maxDrawn { -1 }; }; class State : public Counter { public: - bool render = true; - bool cull = true; - bool sort = true; + bool render { true }; + bool cull { true }; + bool sort { true }; Counter counter{}; }; @@ -76,16 +73,16 @@ public: }; RenderContext(ItemsConfig items, Tone tone, int drawStatus, bool drawHitEffect, glm::vec4 deferredDebugSize, int deferredDebugMode); - RenderContext() : RenderContext({}, {}, {}, {}, {}, {}) {}; + RenderContext() {} void setArgs(RenderArgs* args) { _args = args; } - inline RenderArgs* getArgs() { return _args; } - inline ItemsConfig& getItemsConfig() { return _items; } - inline Tone& getTone() { return _tone; } - inline int getDrawStatus() { return _drawStatus; } - inline bool getDrawHitEffect() { return _drawHitEffect; } - inline bool getOcclusionStatus() { return _occlusionStatus; } - inline bool getFxaaStatus() { return _fxaaStatus; } + RenderArgs* getArgs() { return _args; } + ItemsConfig& getItemsConfig() { return _items; } + Tone& getTone() { return _tone; } + int getDrawStatus() { return _drawStatus; } + bool getDrawHitEffect() { return _drawHitEffect; } + bool getOcclusionStatus() { return _occlusionStatus; } + bool getFxaaStatus() { return _fxaaStatus; } void setOptions(bool occlusion, bool fxaa, bool showOwned); // Debugging @@ -98,8 +95,8 @@ protected: // Options int _drawStatus; // bitflag bool _drawHitEffect; - bool _occlusionStatus = false; - bool _fxaaStatus = false; + bool _occlusionStatus { false }; + bool _fxaaStatus = { false }; ItemsConfig _items; Tone _tone; From b3f19ef4d614eb3500830ba955051abaa11d7bf4 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Fri, 8 Jan 2016 16:08:43 -0800 Subject: [PATCH 07/16] separating out marketplace --- examples/marketplace.js | 121 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 examples/marketplace.js diff --git a/examples/marketplace.js b/examples/marketplace.js new file mode 100644 index 0000000000..27e2da56e3 --- /dev/null +++ b/examples/marketplace.js @@ -0,0 +1,121 @@ +Script.include([ + "libraries/toolBars.js", +]); + +HIFI_PUBLIC_BUCKET = "http://s3.amazonaws.com/hifi-public/"; +var toolIconUrl = HIFI_PUBLIC_BUCKET + "images/tools/"; + +var MARKETPLACE_URL = "https://metaverse.highfidelity.com/marketplace"; +var marketplaceWindow = new OverlayWebWindow({ + title: 'Marketplace', + source: "about:blank", + width: 900, + height: 700, + visible: false +}); + +var toolHeight = 50; +var toolWidth = 50; + + +function showMarketplace(marketplaceID) { + var url = MARKETPLACE_URL; + if (marketplaceID) { + url = url + "/items/" + marketplaceID; + } + print("setting marketplace URL to " + url); + marketplaceWindow.setURL(url); + marketplaceWindow.setVisible(true); + marketplaceWindow.raise(); +} + +function hideMarketplace() { + marketplaceWindow.setVisible(false); + marketplaceWindow.setURL("about:blank"); +} + +function toggleMarketplace() { + if (marketplaceWindow.visible) { + hideMarketplace(); + } else { + showMarketplace(); + } +} + +var toolBar = (function() { + var that = {}, + toolBar, + browseMarketplaceButton; + + function initialize() { + toolBar = new ToolBar(0, 0, ToolBar.VERTICAL, "highfidelity.edit.toolbar", function(windowDimensions, toolbar) { + return { + x: windowDimensions.x - 100 - toolbar.width, + y: (windowDimensions.y - toolbar.height) / 2 + }; + }); + browseMarketplaceButton = toolBar.addTool({ + imageURL: toolIconUrl + "marketplace.svg", + width: toolWidth, + height: toolHeight, + alpha: 0.9, + visible: true, + }); + + toolBar.showTool(browseMarketplaceButton, true); + } + + var browseMarketplaceButtonDown = false; + that.mousePressEvent = function(event) { + print("CLICKED") + var clickedOverlay, + url, + file; + + if (!event.isLeftButton) { + // if another mouse button than left is pressed ignore it + return false; + } + + clickedOverlay = Overlays.getOverlayAtPoint({ + x: event.x, + y: event.y + }); + + + + if (browseMarketplaceButton === toolBar.clicked(clickedOverlay)) { + toggleMarketplace(); + return true; + } + + return false; + }; + + that.mouseReleaseEvent = function(event) { + var handled = false; + + + if (browseMarketplaceButtonDown) { + var clickedOverlay = Overlays.getOverlayAtPoint({ + x: event.x, + y: event.y + }); + } + + newModelButtonDown = false; + browseMarketplaceButtonDown = false; + + return handled; + } + + that.cleanup = function() { + toolBar.cleanup(); + }; + + initialize(); + return that; +}()); + +Controller.mousePressEvent.connect(toolBar.mousePressEvent) +Script.scriptEnding.connect(toolBar.cleanup); From 7e7424ec2b88fb6f099262a0f8981fc8e7c702ac Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Fri, 8 Jan 2016 16:22:10 -0800 Subject: [PATCH 08/16] Removed marketplace icon from edit menu --- examples/edit.js | 32 ++++---------------------------- examples/marketplace.js | 6 +++--- 2 files changed, 7 insertions(+), 31 deletions(-) diff --git a/examples/edit.js b/examples/edit.js index 99219fcaa2..5d724576d3 100644 --- a/examples/edit.js +++ b/examples/edit.js @@ -183,8 +183,7 @@ var toolBar = (function() { newTextButton, newWebButton, newZoneButton, - newPolyVoxButton, - browseMarketplaceButton; + newPolyVoxButton; function initialize() { toolBar = new ToolBar(0, 0, ToolBar.VERTICAL, "highfidelity.edit.toolbar", function(windowDimensions, toolbar) { @@ -194,13 +193,7 @@ var toolBar = (function() { }; }); - browseMarketplaceButton = toolBar.addTool({ - imageURL: toolIconUrl + "marketplace.svg", - width: toolWidth, - height: toolHeight, - alpha: 0.9, - visible: true, - }); + activeButton = toolBar.addTool({ imageURL: toolIconUrl + "edit-status.svg", @@ -415,7 +408,6 @@ var toolBar = (function() { } var newModelButtonDown = false; - var browseMarketplaceButtonDown = false; that.mousePressEvent = function(event) { var clickedOverlay, url, @@ -443,11 +435,7 @@ var toolBar = (function() { return true; } - if (browseMarketplaceButton === toolBar.clicked(clickedOverlay)) { - toggleMarketplace(); - return true; - } - + if (newCubeButton === toolBar.clicked(clickedOverlay)) { createNewEntity({ type: "Box", @@ -652,22 +640,10 @@ var toolBar = (function() { } handled = true; } - } else if (browseMarketplaceButtonDown) { - var clickedOverlay = Overlays.getOverlayAtPoint({ - x: event.x, - y: event.y - }); - if (browseMarketplaceButton === toolBar.clicked(clickedOverlay)) { - url = Window.s3Browse(".*(fbx|FBX|obj|OBJ)"); - if (url !== null && url !== "") { - addModel(url); - } - handled = true; - } } newModelButtonDown = false; - browseMarketplaceButtonDown = false; + return handled; } diff --git a/examples/marketplace.js b/examples/marketplace.js index 27e2da56e3..074966c196 100644 --- a/examples/marketplace.js +++ b/examples/marketplace.js @@ -48,10 +48,10 @@ var toolBar = (function() { browseMarketplaceButton; function initialize() { - toolBar = new ToolBar(0, 0, ToolBar.VERTICAL, "highfidelity.edit.toolbar", function(windowDimensions, toolbar) { + toolBar = new ToolBar(0, 0, ToolBar.VERTICAL, "", function(windowDimensions, toolbar) { return { - x: windowDimensions.x - 100 - toolbar.width, - y: (windowDimensions.y - toolbar.height) / 2 + x: windowDimensions.x - 8 - toolbar.width, + y: 150 }; }); browseMarketplaceButton = toolBar.addTool({ From a66bc791a3e2248c7dca777df513388628abceb4 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Fri, 8 Jan 2016 16:33:51 -0800 Subject: [PATCH 09/16] directory.js - icon is now movable and persistent --- examples/directory.js | 166 +++++++++++++++++++++++----------------- examples/marketplace.js | 15 +++- 2 files changed, 109 insertions(+), 72 deletions(-) diff --git a/examples/directory.js b/examples/directory.js index 8d9993ffda..69db3a4d89 100644 --- a/examples/directory.js +++ b/examples/directory.js @@ -9,89 +9,117 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -Script.include("libraries/globals.js"); +Script.include([ + "libraries/toolBars.js", +]); -var directory = (function () { +HIFI_PUBLIC_BUCKET = "http://s3.amazonaws.com/hifi-public/"; +var toolIconUrl = HIFI_PUBLIC_BUCKET + "images/tools/"; - var DIRECTORY_URL = "https://metaverse.highfidelity.com/directory", - directoryWindow, - DIRECTORY_BUTTON_URL = HIFI_PUBLIC_BUCKET + "images/tools/directory.svg", - BUTTON_WIDTH = 50, - BUTTON_HEIGHT = 50, - BUTTON_ALPHA = 0.9, - BUTTON_MARGIN = 8, - directoryButton, - EDIT_TOOLBAR_BUTTONS = 10, // Number of buttons in edit.js toolbar - viewport; +var DIRECTORY_WINDOW_URL = "https://metaverse.highfidelity.com/directory"; +var directoryWindow = new OverlayWebWindow({ + title: 'directory', + source: "about:blank", + width: 900, + height: 700, + visible: false +}); - function updateButtonPosition() { - Overlays.editOverlay(directoryButton, { - x: viewport.x - BUTTON_WIDTH - BUTTON_MARGIN, - y: (viewport.y - (EDIT_TOOLBAR_BUTTONS + 1) * (BUTTON_HEIGHT + BUTTON_MARGIN) - BUTTON_MARGIN) / 2 - 1 +var toolHeight = 50; +var toolWidth = 50; + + +function showDirectory() { + directoryWindow.setURL(DIRECTORY_WINDOW_URL); + directoryWindow.setVisible(true); +} + +function hideDirectory() { + directoryWindow.setVisible(false); + directoryWindow.setURL("about:blank"); +} + +function toggleDirectory() { + if (directoryWindow.visible) { + hideDirectory(); + } else { + showDirectory(); + } +} + +var toolBar = (function() { + var that = {}, + toolBar, + browseDirectoryButton; + + function initialize() { + toolBar = new ToolBar(0, 0, ToolBar.VERTICAL, "highfidelity.directory.toolbar", function(windowDimensions, toolbar) { + return { + x: windowDimensions.x - 8 - toolbar.width, + y: 100 + }; }); + browseDirectoryButton = toolBar.addTool({ + imageURL: toolIconUrl + "directory.svg", + width: toolWidth, + height: toolHeight, + alpha: 0.9, + visible: true, + }); + + toolBar.showTool(browseDirectoryButton, true); } - function onMousePressEvent(event) { - var clickedOverlay; + var browseDirectoryButtonDown = false; + that.mousePressEvent = function(event) { + var clickedOverlay, + url, + file; - clickedOverlay = Overlays.getOverlayAtPoint({ x: event.x, y: event.y }); - - if (clickedOverlay === directoryButton) { - if (directoryWindow.url !== DIRECTORY_URL) { - directoryWindow.setURL(DIRECTORY_URL); - } - directoryWindow.setVisible(true); - directoryWindow.raise(); + if (!event.isLeftButton) { + // if another mouse button than left is pressed ignore it + return false; } - } - function onDomainChanged() { - directoryWindow.setVisible(false); - } + clickedOverlay = Overlays.getOverlayAtPoint({ + x: event.x, + y: event.y + }); - function onScriptUpdate() { - var oldViewport = viewport; - viewport = Controller.getViewportDimensions(); - if (viewport.x !== oldViewport.x || viewport.y !== oldViewport.y) { - updateButtonPosition(); + if (browseDirectoryButton === toolBar.clicked(clickedOverlay)) { + toggleDirectory(); + return true; } + + return false; + }; + + that.mouseReleaseEvent = function(event) { + var handled = false; + + + if (browseDirectoryButtonDown) { + var clickedOverlay = Overlays.getOverlayAtPoint({ + x: event.x, + y: event.y + }); + } + + newModelButtonDown = false; + browseDirectoryButtonDown = false; + + return handled; } - function setUp() { - viewport = Controller.getViewportDimensions(); + that.cleanup = function() { + toolBar.cleanup(); + }; - directoryWindow = new OverlayWebWindow({ - title: 'Directory', - source: DIRECTORY_URL, - width: 900, - height: 700, - visible: false - }); + initialize(); + return that; +}()); - directoryButton = Overlays.addOverlay("image", { - imageURL: DIRECTORY_BUTTON_URL, - width: BUTTON_WIDTH, - height: BUTTON_HEIGHT, - x: viewport.x - BUTTON_WIDTH - BUTTON_MARGIN, - y: BUTTON_MARGIN, - alpha: BUTTON_ALPHA, - visible: true - }); - - updateButtonPosition(); - - Controller.mousePressEvent.connect(onMousePressEvent); - Window.domainChanged.connect(onDomainChanged); - - Script.update.connect(onScriptUpdate); - } - - function tearDown() { - Overlays.deleteOverlay(directoryButton); - } - - setUp(); - Script.scriptEnding.connect(tearDown); -}()); \ No newline at end of file +Controller.mousePressEvent.connect(toolBar.mousePressEvent) +Script.scriptEnding.connect(toolBar.cleanup); diff --git a/examples/marketplace.js b/examples/marketplace.js index 074966c196..4583492c58 100644 --- a/examples/marketplace.js +++ b/examples/marketplace.js @@ -1,3 +1,14 @@ +// +// marketplace.js +// examples +// +// Created by Eric Levin on 8 Jan 2016 +// Copyright 2016 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + Script.include([ "libraries/toolBars.js", ]); @@ -26,7 +37,6 @@ function showMarketplace(marketplaceID) { print("setting marketplace URL to " + url); marketplaceWindow.setURL(url); marketplaceWindow.setVisible(true); - marketplaceWindow.raise(); } function hideMarketplace() { @@ -48,7 +58,7 @@ var toolBar = (function() { browseMarketplaceButton; function initialize() { - toolBar = new ToolBar(0, 0, ToolBar.VERTICAL, "", function(windowDimensions, toolbar) { + toolBar = new ToolBar(0, 0, ToolBar.VERTICAL, "highfidelity.marketplace.toolbar", function(windowDimensions, toolbar) { return { x: windowDimensions.x - 8 - toolbar.width, y: 150 @@ -67,7 +77,6 @@ var toolBar = (function() { var browseMarketplaceButtonDown = false; that.mousePressEvent = function(event) { - print("CLICKED") var clickedOverlay, url, file; From e2a3903def092d2169e1f507747312892da063d9 Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Fri, 8 Jan 2016 16:58:25 -0800 Subject: [PATCH 10/16] add support for advanced/developer plugins and change diplay modes to match spec --- interface/src/Application.cpp | 29 ++++++++++++++++++- interface/src/Menu.h | 2 +- .../Basic2DWindowOpenGLDisplayPlugin.cpp | 7 ++--- .../Basic2DWindowOpenGLDisplayPlugin.h | 4 ++- .../src/display-plugins/NullDisplayPlugin.cpp | 1 + .../src/display-plugins/NullDisplayPlugin.h | 1 + .../stereo/InterleavedStereoDisplayPlugin.cpp | 7 ++--- .../stereo/InterleavedStereoDisplayPlugin.h | 5 +++- .../stereo/SideBySideStereoDisplayPlugin.cpp | 5 +--- .../stereo/SideBySideStereoDisplayPlugin.h | 4 ++- .../src/input-plugins/KeyboardMouseDevice.cpp | 1 + .../src/input-plugins/KeyboardMouseDevice.h | 4 ++- libraries/plugins/src/plugins/Plugin.h | 3 ++ plugins/hifiNeuron/src/NeuronPlugin.cpp | 1 + plugins/hifiNeuron/src/NeuronPlugin.h | 4 ++- plugins/hifiSdl2/src/SDL2Manager.cpp | 1 + plugins/hifiSdl2/src/SDL2Manager.h | 4 ++- plugins/hifiSixense/src/SixenseManager.cpp | 1 + plugins/hifiSixense/src/SixenseManager.h | 6 ++-- .../oculus/src/OculusDebugDisplayPlugin.cpp | 4 +-- plugins/oculus/src/OculusDebugDisplayPlugin.h | 4 ++- plugins/oculus/src/OculusDisplayPlugin.cpp | 5 +--- plugins/oculus/src/OculusDisplayPlugin.h | 6 ++-- plugins/openvr/src/OpenVrDisplayPlugin.cpp | 4 +-- plugins/openvr/src/OpenVrDisplayPlugin.h | 4 ++- 25 files changed, 79 insertions(+), 38 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index b142b6cb71..7be74e717e 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5062,6 +5062,7 @@ const DisplayPlugin* Application::getActiveDisplayPlugin() const { static void addDisplayPluginToMenu(DisplayPluginPointer displayPlugin, bool active = false) { auto menu = Menu::getInstance(); QString name = displayPlugin->getName(); + QString grouping = displayPlugin->getGrouping(); Q_ASSERT(!menu->menuItemExists(MenuOption::OutputMenu, name)); static QActionGroup* displayPluginGroup = nullptr; @@ -5072,7 +5073,8 @@ static void addDisplayPluginToMenu(DisplayPluginPointer displayPlugin, bool acti auto parent = menu->getMenu(MenuOption::OutputMenu); auto action = menu->addActionToQMenuAndActionHash(parent, name, 0, qApp, - SLOT(updateDisplayMode())); + SLOT(updateDisplayMode()), + QAction::NoRole, UNSPECIFIED_POSITION, grouping); action->setCheckable(true); action->setChecked(active); displayPluginGroup->addAction(action); @@ -5086,7 +5088,27 @@ void Application::updateDisplayMode() { static std::once_flag once; std::call_once(once, [&] { bool first = true; + + // first sort the plugins into groupings: standard, advanced, developer + DisplayPluginList standard; + DisplayPluginList advanced; + DisplayPluginList developer; foreach(auto displayPlugin, displayPlugins) { + QString grouping = displayPlugin->getGrouping(); + if (grouping == "Advanced") { + advanced.push_back(displayPlugin); + } else if (grouping == "Developer") { + developer.push_back(displayPlugin); + } else { + standard.push_back(displayPlugin); + } + } + + // concactonate the groupings into a single list in the order: standard, advanced, developer + standard.insert(std::end(standard), std::begin(advanced), std::end(advanced)); + standard.insert(std::end(standard), std::begin(developer), std::end(developer)); + + foreach(auto displayPlugin, standard) { addDisplayPluginToMenu(displayPlugin, first); // This must be a queued connection to avoid a deadlock QObject::connect(displayPlugin.get(), &DisplayPlugin::requestRender, @@ -5098,6 +5120,11 @@ void Application::updateDisplayMode() { first = false; } + + // after all plugins have been added to the menu, add a seperator to the menu + auto menu = Menu::getInstance(); + auto parent = menu->getMenu(MenuOption::OutputMenu); + parent->addSeparator(); }); diff --git a/interface/src/Menu.h b/interface/src/Menu.h index 085b349b8f..6a544f31c9 100644 --- a/interface/src/Menu.h +++ b/interface/src/Menu.h @@ -243,7 +243,7 @@ namespace MenuOption { const QString OctreeStats = "Entity Statistics"; const QString OnePointCalibration = "1 Point Calibration"; const QString OnlyDisplayTopTen = "Only Display Top Ten"; - const QString OutputMenu = "Display>Mode"; + const QString OutputMenu = "Display"; const QString PackageModel = "Package Model..."; const QString Pair = "Pair"; const QString PhysicsShowOwned = "Highlight Simulation Ownership"; diff --git a/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp index 290e2e4f79..11bed0e0af 100644 --- a/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp @@ -15,14 +15,11 @@ #include -const QString Basic2DWindowOpenGLDisplayPlugin::NAME("2D Display"); +const QString Basic2DWindowOpenGLDisplayPlugin::NAME("Desktop"); +const QString Basic2DWindowOpenGLDisplayPlugin::GROUPING("Standard"); static const QString FULLSCREEN = "Fullscreen"; -const QString& Basic2DWindowOpenGLDisplayPlugin::getName() const { - return NAME; -} - void Basic2DWindowOpenGLDisplayPlugin::activate() { WindowOpenGLDisplayPlugin::activate(); diff --git a/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.h index e3633b5fe8..29e26c1f28 100644 --- a/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.h @@ -18,7 +18,8 @@ class Basic2DWindowOpenGLDisplayPlugin : public WindowOpenGLDisplayPlugin { Q_OBJECT public: - virtual const QString & getName() const override; + virtual const QString& getName() const override { return NAME; } + virtual const QString& getGrouping() const override { return GROUPING; } virtual float getTargetFrameRate() override { return _framerateTarget ? (float) _framerateTarget : TARGET_FRAMERATE_Basic2DWindowOpenGL; } @@ -37,6 +38,7 @@ protected: private: void updateFramerate(); static const QString NAME; + static const QString GROUPING; QScreen* getFullscreenTarget(); std::vector _framerateActions; QAction* _vsyncAction { nullptr }; diff --git a/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.cpp index f780534bc9..54cf13fccd 100644 --- a/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.cpp @@ -13,6 +13,7 @@ #include const QString NullDisplayPlugin::NAME("NullDisplayPlugin"); +const QString NullDisplayPlugin::GROUPING("Developer"); const QString & NullDisplayPlugin::getName() const { return NAME; diff --git a/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.h index 23e23e2c4e..d574324472 100644 --- a/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.h @@ -24,4 +24,5 @@ public: virtual QImage getScreenshot() const override; private: static const QString NAME; + static const QString GROUPING; }; diff --git a/libraries/display-plugins/src/display-plugins/stereo/InterleavedStereoDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/stereo/InterleavedStereoDisplayPlugin.cpp index ffaf005533..7aacebbcea 100644 --- a/libraries/display-plugins/src/display-plugins/stereo/InterleavedStereoDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/stereo/InterleavedStereoDisplayPlugin.cpp @@ -44,11 +44,8 @@ void main() { )FS"; -const QString InterleavedStereoDisplayPlugin::NAME("Interleaved Stereo Display"); - -const QString & InterleavedStereoDisplayPlugin::getName() const { - return NAME; -} +const QString InterleavedStereoDisplayPlugin::NAME("3D TV - Interleaved"); +const QString InterleavedStereoDisplayPlugin::GROUPING("Advanced"); InterleavedStereoDisplayPlugin::InterleavedStereoDisplayPlugin() { } diff --git a/libraries/display-plugins/src/display-plugins/stereo/InterleavedStereoDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/stereo/InterleavedStereoDisplayPlugin.h index 7116363e44..33b6397788 100644 --- a/libraries/display-plugins/src/display-plugins/stereo/InterleavedStereoDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/stereo/InterleavedStereoDisplayPlugin.h @@ -13,7 +13,9 @@ class InterleavedStereoDisplayPlugin : public StereoDisplayPlugin { Q_OBJECT public: InterleavedStereoDisplayPlugin(); - virtual const QString & getName() const override; + + virtual const QString& getName() const override { return NAME; } + virtual const QString& getGrouping() const override { return GROUPING; } // initialize OpenGL context settings needed by the plugin virtual void customizeContext() override; @@ -23,4 +25,5 @@ public: private: static const QString NAME; + static const QString GROUPING; }; diff --git a/libraries/display-plugins/src/display-plugins/stereo/SideBySideStereoDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/stereo/SideBySideStereoDisplayPlugin.cpp index 12865cf4cd..d542838d2f 100644 --- a/libraries/display-plugins/src/display-plugins/stereo/SideBySideStereoDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/stereo/SideBySideStereoDisplayPlugin.cpp @@ -10,10 +10,7 @@ #include const QString SideBySideStereoDisplayPlugin::NAME("3D TV - Side by Side Stereo"); - -const QString & SideBySideStereoDisplayPlugin::getName() const { - return NAME; -} +const QString SideBySideStereoDisplayPlugin::GROUPING("Advanced"); SideBySideStereoDisplayPlugin::SideBySideStereoDisplayPlugin() { } diff --git a/libraries/display-plugins/src/display-plugins/stereo/SideBySideStereoDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/stereo/SideBySideStereoDisplayPlugin.h index 9f8440227f..daca9cd474 100644 --- a/libraries/display-plugins/src/display-plugins/stereo/SideBySideStereoDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/stereo/SideBySideStereoDisplayPlugin.h @@ -15,8 +15,10 @@ class SideBySideStereoDisplayPlugin : public StereoDisplayPlugin { Q_OBJECT public: SideBySideStereoDisplayPlugin(); - virtual const QString& getName() const override; + virtual const QString& getName() const override { return NAME; } + virtual const QString& getGrouping() const override { return GROUPING; } virtual glm::uvec2 getRecommendedRenderSize() const override; private: static const QString NAME; + static const QString GROUPING; }; diff --git a/libraries/input-plugins/src/input-plugins/KeyboardMouseDevice.cpp b/libraries/input-plugins/src/input-plugins/KeyboardMouseDevice.cpp index 1d7fbbec67..45a1adb386 100755 --- a/libraries/input-plugins/src/input-plugins/KeyboardMouseDevice.cpp +++ b/libraries/input-plugins/src/input-plugins/KeyboardMouseDevice.cpp @@ -19,6 +19,7 @@ #include const QString KeyboardMouseDevice::NAME = "Keyboard/Mouse"; +const QString KeyboardMouseDevice::GROUPING = "Standard"; void KeyboardMouseDevice::pluginUpdate(float deltaTime, bool jointsCaptured) { _inputDevice->update(deltaTime, jointsCaptured); diff --git a/libraries/input-plugins/src/input-plugins/KeyboardMouseDevice.h b/libraries/input-plugins/src/input-plugins/KeyboardMouseDevice.h index b31c59d11a..654041ac35 100644 --- a/libraries/input-plugins/src/input-plugins/KeyboardMouseDevice.h +++ b/libraries/input-plugins/src/input-plugins/KeyboardMouseDevice.h @@ -67,7 +67,8 @@ public: // Plugin functions virtual bool isSupported() const override { return true; } virtual bool isJointController() const override { return false; } - const QString& getName() const override { return NAME; } + virtual const QString& getName() const override { return NAME; } + virtual const QString& getGrouping() const override { return GROUPING; } virtual void pluginFocusOutEvent() override { _inputDevice->focusOutEvent(); } virtual void pluginUpdate(float deltaTime, bool jointsCaptured) override; @@ -87,6 +88,7 @@ public: void wheelEvent(QWheelEvent* event); static const QString NAME; + static const QString GROUPING; protected: diff --git a/libraries/plugins/src/plugins/Plugin.h b/libraries/plugins/src/plugins/Plugin.h index c030b1073f..6928416f88 100644 --- a/libraries/plugins/src/plugins/Plugin.h +++ b/libraries/plugins/src/plugins/Plugin.h @@ -19,6 +19,9 @@ public: /// \return human-readable name virtual const QString& getName() const = 0; + /// \return human-readable grouping for the plugin, Standard, Advanced, or Developer + virtual const QString& getGrouping() const = 0; + /// \return string ID (not necessarily human-readable) virtual const QString& getID() const { assert(false); return UNKNOWN_PLUGIN_ID; } diff --git a/plugins/hifiNeuron/src/NeuronPlugin.cpp b/plugins/hifiNeuron/src/NeuronPlugin.cpp index a175ce8e06..b9372967d1 100644 --- a/plugins/hifiNeuron/src/NeuronPlugin.cpp +++ b/plugins/hifiNeuron/src/NeuronPlugin.cpp @@ -30,6 +30,7 @@ Q_LOGGING_CATEGORY(inputplugins, "hifi.inputplugins") #endif const QString NeuronPlugin::NAME = "Neuron"; +const QString NeuronPlugin::GROUPING = "Standard"; const QString NeuronPlugin::NEURON_ID_STRING = "Perception Neuron"; // indices of joints of the Neuron standard skeleton. diff --git a/plugins/hifiNeuron/src/NeuronPlugin.h b/plugins/hifiNeuron/src/NeuronPlugin.h index c85a5dd383..85ed3a3ecd 100644 --- a/plugins/hifiNeuron/src/NeuronPlugin.h +++ b/plugins/hifiNeuron/src/NeuronPlugin.h @@ -28,7 +28,8 @@ public: // Plugin functions virtual bool isSupported() const override; virtual bool isJointController() const override { return true; } - const QString& getName() const override { return NAME; } + virtual const QString& getName() const override { return NAME; } + virtual const QString& getGrouping() const override { return GROUPING; } const QString& getID() const override { return NEURON_ID_STRING; } virtual void activate() override; @@ -65,6 +66,7 @@ protected: std::shared_ptr _inputDevice { std::make_shared() }; static const QString NAME; + static const QString GROUPING; static const QString NEURON_ID_STRING; std::string _serverAddress; diff --git a/plugins/hifiSdl2/src/SDL2Manager.cpp b/plugins/hifiSdl2/src/SDL2Manager.cpp index 7ca49bbd75..554a8659c0 100644 --- a/plugins/hifiSdl2/src/SDL2Manager.cpp +++ b/plugins/hifiSdl2/src/SDL2Manager.cpp @@ -44,6 +44,7 @@ static_assert( const QString SDL2Manager::NAME = "SDL2"; +const QString SDL2Manager::GROUPING = "Standard"; #ifdef HAVE_SDL2 SDL_JoystickID SDL2Manager::getInstanceId(SDL_GameController* controller) { diff --git a/plugins/hifiSdl2/src/SDL2Manager.h b/plugins/hifiSdl2/src/SDL2Manager.h index 61e2d37fd5..cb4d5cb744 100644 --- a/plugins/hifiSdl2/src/SDL2Manager.h +++ b/plugins/hifiSdl2/src/SDL2Manager.h @@ -29,7 +29,8 @@ public: // Plugin functions virtual bool isSupported() const override; virtual bool isJointController() const override { return false; } - const QString& getName() const override { return NAME; } + virtual const QString& getName() const override { return NAME; } + virtual const QString& getGrouping() const override { return GROUPING; } virtual void init() override; virtual void deinit() override; @@ -84,6 +85,7 @@ private: #endif bool _isInitialized; static const QString NAME; + static const QString GROUPING; }; #endif // hifi__SDL2Manager_h diff --git a/plugins/hifiSixense/src/SixenseManager.cpp b/plugins/hifiSixense/src/SixenseManager.cpp index 3377aac14c..5ef73d3646 100644 --- a/plugins/hifiSixense/src/SixenseManager.cpp +++ b/plugins/hifiSixense/src/SixenseManager.cpp @@ -56,6 +56,7 @@ bool SixenseManager::_sixenseLoaded = false; const QString SixenseManager::NAME = "Sixense"; +const QString SixenseManager::GROUPING = "Standard"; const QString SixenseManager::HYDRA_ID_STRING = "Razer Hydra"; const QString MENU_PARENT = "Developer"; diff --git a/plugins/hifiSixense/src/SixenseManager.h b/plugins/hifiSixense/src/SixenseManager.h index 753974e996..4eb07c974f 100644 --- a/plugins/hifiSixense/src/SixenseManager.h +++ b/plugins/hifiSixense/src/SixenseManager.h @@ -29,8 +29,9 @@ public: // Plugin functions virtual bool isSupported() const override; virtual bool isJointController() const override { return true; } - const QString& getName() const override { return NAME; } - const QString& getID() const override { return HYDRA_ID_STRING; } + virtual const QString& getName() const override { return NAME; } + virtual const QString& getGrouping() const override { return GROUPING; } + virtual const QString& getID() const override { return HYDRA_ID_STRING; } virtual void activate() override; virtual void deactivate() override; @@ -97,6 +98,7 @@ private: std::shared_ptr _inputDevice { std::make_shared() }; static const QString NAME; + static const QString GROUPING; static const QString HYDRA_ID_STRING; static bool _sixenseLoaded; diff --git a/plugins/oculus/src/OculusDebugDisplayPlugin.cpp b/plugins/oculus/src/OculusDebugDisplayPlugin.cpp index 26bb3cf9b2..9ef2cda514 100644 --- a/plugins/oculus/src/OculusDebugDisplayPlugin.cpp +++ b/plugins/oculus/src/OculusDebugDisplayPlugin.cpp @@ -9,10 +9,8 @@ #include const QString OculusDebugDisplayPlugin::NAME("Oculus Rift (Simulator)"); +const QString OculusDebugDisplayPlugin::GROUPING("Developer"); -const QString & OculusDebugDisplayPlugin::getName() const { - return NAME; -} static const QString DEBUG_FLAG("HIFI_DEBUG_OCULUS"); static bool enableDebugOculus = QProcessEnvironment::systemEnvironment().contains("HIFI_DEBUG_OCULUS"); diff --git a/plugins/oculus/src/OculusDebugDisplayPlugin.h b/plugins/oculus/src/OculusDebugDisplayPlugin.h index 04b68704cc..cc0d5c2065 100644 --- a/plugins/oculus/src/OculusDebugDisplayPlugin.h +++ b/plugins/oculus/src/OculusDebugDisplayPlugin.h @@ -11,7 +11,8 @@ class OculusDebugDisplayPlugin : public OculusBaseDisplayPlugin { public: - virtual const QString & getName() const override; + virtual const QString& getName() const override { return NAME; } + virtual const QString& getGrouping() const override { return GROUPING; } virtual bool isSupported() const override; protected: @@ -19,5 +20,6 @@ protected: private: static const QString NAME; + static const QString GROUPING; }; diff --git a/plugins/oculus/src/OculusDisplayPlugin.cpp b/plugins/oculus/src/OculusDisplayPlugin.cpp index c8fb0ba080..0b81f661df 100644 --- a/plugins/oculus/src/OculusDisplayPlugin.cpp +++ b/plugins/oculus/src/OculusDisplayPlugin.cpp @@ -137,10 +137,7 @@ private: #endif const QString OculusDisplayPlugin::NAME("Oculus Rift"); - -const QString & OculusDisplayPlugin::getName() const { - return NAME; -} +const QString OculusDisplayPlugin::GROUPING("Standard"); static const QString MONO_PREVIEW = "Mono Preview"; static const QString FRAMERATE = DisplayPlugin::MENU_PATH() + ">Framerate"; diff --git a/plugins/oculus/src/OculusDisplayPlugin.h b/plugins/oculus/src/OculusDisplayPlugin.h index 03c9ba7511..4633e434e1 100644 --- a/plugins/oculus/src/OculusDisplayPlugin.h +++ b/plugins/oculus/src/OculusDisplayPlugin.h @@ -17,7 +17,8 @@ const float TARGET_RATE_Oculus = 75.0f; class OculusDisplayPlugin : public OculusBaseDisplayPlugin { public: virtual void activate() override; - virtual const QString & getName() const override; + virtual const QString& getName() const override { return NAME; } + virtual const QString& getGrouping() const override { return GROUPING; } virtual void setEyeRenderPose(uint32_t frameIndex, Eye eye, const glm::mat4& pose) override final; virtual float getTargetFrameRate() override { return TARGET_RATE_Oculus; } @@ -30,7 +31,8 @@ protected: private: using EyePoses = std::pair; static const QString NAME; - bool _enablePreview { false }; + static const QString GROUPING; + bool _enablePreview{ false }; bool _monoPreview { true }; QMap _frameEyePoses; diff --git a/plugins/openvr/src/OpenVrDisplayPlugin.cpp b/plugins/openvr/src/OpenVrDisplayPlugin.cpp index 58f7536856..6860245fb0 100644 --- a/plugins/openvr/src/OpenVrDisplayPlugin.cpp +++ b/plugins/openvr/src/OpenVrDisplayPlugin.cpp @@ -28,12 +28,10 @@ Q_DECLARE_LOGGING_CATEGORY(displayplugins) Q_LOGGING_CATEGORY(displayplugins, "hifi.displayplugins") const QString OpenVrDisplayPlugin::NAME("OpenVR (Vive)"); +const QString OpenVrDisplayPlugin::GROUPING("Standard"); const QString StandingHMDSensorMode = "Standing HMD Sensor Mode"; // this probably shouldn't be hardcoded here -const QString & OpenVrDisplayPlugin::getName() const { - return NAME; -} static vr::IVRCompositor* _compositor{ nullptr }; vr::TrackedDevicePose_t _trackedDevicePose[vr::k_unMaxTrackedDeviceCount]; diff --git a/plugins/openvr/src/OpenVrDisplayPlugin.h b/plugins/openvr/src/OpenVrDisplayPlugin.h index 8186e59936..5983129572 100644 --- a/plugins/openvr/src/OpenVrDisplayPlugin.h +++ b/plugins/openvr/src/OpenVrDisplayPlugin.h @@ -18,7 +18,8 @@ const float TARGET_RATE_OpenVr = 90.0f; // FIXME: get from sdk tracked device p class OpenVrDisplayPlugin : public WindowOpenGLDisplayPlugin { public: virtual bool isSupported() const override; - virtual const QString & getName() const override; + virtual const QString& getName() const override { return NAME; } + virtual const QString& getGrouping() const override { return GROUPING; } virtual bool isHmd() const override { return true; } virtual float getTargetFrameRate() override { return TARGET_RATE_OpenVr; } @@ -45,5 +46,6 @@ protected: private: vr::IVRSystem* _hmd { nullptr }; static const QString NAME; + static const QString GROUPING; }; From d8ced32879101b636f2248ef9f2543ff8f9f02f7 Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Fri, 8 Jan 2016 21:37:00 -0800 Subject: [PATCH 11/16] fix mac/unix build buster --- plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.cpp | 4 +--- plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.h | 4 +++- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.cpp b/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.cpp index f0f200fe1a..f6e6055d84 100644 --- a/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.cpp +++ b/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.cpp @@ -27,10 +27,8 @@ using namespace oglplus; const QString OculusLegacyDisplayPlugin::NAME("Oculus Rift (0.5) (Simulated)"); +const QString OculusLegacyDisplayPlugin::GROUPING("Standard"); -const QString & OculusLegacyDisplayPlugin::getName() const { - return NAME; -} OculusLegacyDisplayPlugin::OculusLegacyDisplayPlugin() { } diff --git a/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.h b/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.h index cd1177b581..603bdac507 100644 --- a/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.h +++ b/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.h @@ -19,7 +19,8 @@ class OculusLegacyDisplayPlugin : public WindowOpenGLDisplayPlugin { public: OculusLegacyDisplayPlugin(); virtual bool isSupported() const override; - virtual const QString & getName() const override; + virtual const QString& getName() const override { return NAME; } + virtual const QString& getGrouping() const override { return GROUPING; } virtual void activate() override; virtual void deactivate() override; @@ -46,6 +47,7 @@ protected: private: static const QString NAME; + static const QString GROUPING; ovrHmd _hmd; mutable ovrTrackingState _trackingState; From d74686474a08ddf980d8c9bab6bc6a200760a00b Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Sun, 10 Jan 2016 11:39:47 -0800 Subject: [PATCH 12/16] Ensure VR menus never render off the overlay --- interface/resources/qml/VrMenu.qml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/interface/resources/qml/VrMenu.qml b/interface/resources/qml/VrMenu.qml index 738ec34a02..689171f9e9 100644 --- a/interface/resources/qml/VrMenu.qml +++ b/interface/resources/qml/VrMenu.qml @@ -51,6 +51,16 @@ Hifi.VrMenu { VrMenuView { property int menuDepth: root.models.length - 1 model: root.models[menuDepth] + + function fit(position, size, maxposition) { + var padding = 8; + if (position < padding) { + position = padding; + } else if (position + size + padding > maxposition) { + position = maxposition - (size + padding); + } + return position; + } Component.onCompleted: { if (menuDepth === 0) { @@ -61,6 +71,8 @@ Hifi.VrMenu { x = lastColumn.x + 64; y = lastMousePosition.y - height / 2; } + x = fit(x, width, parent.width); + y = fit(y, height, parent.height); } onSelected: { From 9068d559988af9e6c47a0cd2ef3441d21b208517 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Mon, 11 Jan 2016 15:58:00 +1300 Subject: [PATCH 13/16] Fix display of File > About Interface window --- interface/resources/html/interface-welcome.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/interface/resources/html/interface-welcome.html b/interface/resources/html/interface-welcome.html index 1fc719ed72..113de7f2a0 100644 --- a/interface/resources/html/interface-welcome.html +++ b/interface/resources/html/interface-welcome.html @@ -1,4 +1,4 @@ - + @@ -14,7 +14,7 @@ body { background: white; - width: 839px; + width: 100%; overflow-x: hidden; } @@ -181,7 +181,7 @@ function overrideBodyWidth() { document.body.style.width = "100%"; - container.style.width = "0"; + } //]]> From 8182372e02ec9550ec81506278516c48e6e1400f Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Mon, 11 Jan 2016 08:39:34 -0800 Subject: [PATCH 14/16] Made drag selection area bigger for marketplace and directory icons. Added marketplace.js to default scripts --- examples/defaultScripts.js | 1 + examples/directory.js | 3 ++- examples/marketplace.js | 3 ++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/examples/defaultScripts.js b/examples/defaultScripts.js index f06af70fb3..443e4b3bf8 100644 --- a/examples/defaultScripts.js +++ b/examples/defaultScripts.js @@ -11,6 +11,7 @@ Script.load("away.js"); Script.load("progress.js"); Script.load("edit.js"); +Script.load("marketplace.js"); Script.load("selectAudioDevice.js"); Script.load("inspect.js"); Script.load("notifications.js"); diff --git a/examples/directory.js b/examples/directory.js index 69db3a4d89..a18442747f 100644 --- a/examples/directory.js +++ b/examples/directory.js @@ -53,10 +53,11 @@ var toolBar = (function() { browseDirectoryButton; function initialize() { + ToolBar.SPACING = 16; toolBar = new ToolBar(0, 0, ToolBar.VERTICAL, "highfidelity.directory.toolbar", function(windowDimensions, toolbar) { return { x: windowDimensions.x - 8 - toolbar.width, - y: 100 + y: 50 }; }); browseDirectoryButton = toolBar.addTool({ diff --git a/examples/marketplace.js b/examples/marketplace.js index 4583492c58..83f1287ed8 100644 --- a/examples/marketplace.js +++ b/examples/marketplace.js @@ -58,10 +58,11 @@ var toolBar = (function() { browseMarketplaceButton; function initialize() { + ToolBar.SPACING = 16; toolBar = new ToolBar(0, 0, ToolBar.VERTICAL, "highfidelity.marketplace.toolbar", function(windowDimensions, toolbar) { return { x: windowDimensions.x - 8 - toolbar.width, - y: 150 + y: 135 }; }); browseMarketplaceButton = toolBar.addTool({ From dfba05ae5f825b2281a4a11a6108d5907149f05c Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Mon, 11 Jan 2016 11:07:07 -0800 Subject: [PATCH 15/16] CR feedback --- interface/src/Application.cpp | 37 ++++++++++++++----- .../Basic2DWindowOpenGLDisplayPlugin.cpp | 1 - .../Basic2DWindowOpenGLDisplayPlugin.h | 2 - .../src/display-plugins/NullDisplayPlugin.cpp | 1 - .../src/display-plugins/NullDisplayPlugin.h | 1 + .../stereo/InterleavedStereoDisplayPlugin.cpp | 1 - .../stereo/InterleavedStereoDisplayPlugin.h | 3 +- .../stereo/SideBySideStereoDisplayPlugin.cpp | 1 - .../stereo/SideBySideStereoDisplayPlugin.h | 3 +- .../src/input-plugins/KeyboardMouseDevice.cpp | 1 - .../src/input-plugins/KeyboardMouseDevice.h | 2 - libraries/plugins/src/plugins/Plugin.h | 6 ++- plugins/hifiNeuron/src/NeuronPlugin.cpp | 1 - plugins/hifiNeuron/src/NeuronPlugin.h | 2 - plugins/hifiSdl2/src/SDL2Manager.cpp | 1 - plugins/hifiSdl2/src/SDL2Manager.h | 2 - plugins/hifiSixense/src/SixenseManager.cpp | 1 - plugins/hifiSixense/src/SixenseManager.h | 2 - .../oculus/src/OculusDebugDisplayPlugin.cpp | 2 - plugins/oculus/src/OculusDebugDisplayPlugin.h | 3 +- plugins/oculus/src/OculusDisplayPlugin.cpp | 1 - plugins/oculus/src/OculusDisplayPlugin.h | 2 - .../src/OculusLegacyDisplayPlugin.cpp | 4 +- .../src/OculusLegacyDisplayPlugin.h | 2 - plugins/openvr/src/OpenVrDisplayPlugin.cpp | 2 - plugins/openvr/src/OpenVrDisplayPlugin.h | 2 - 26 files changed, 37 insertions(+), 49 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 7be74e717e..2fdd778339 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5062,9 +5062,23 @@ const DisplayPlugin* Application::getActiveDisplayPlugin() const { static void addDisplayPluginToMenu(DisplayPluginPointer displayPlugin, bool active = false) { auto menu = Menu::getInstance(); QString name = displayPlugin->getName(); - QString grouping = displayPlugin->getGrouping(); + auto grouping = displayPlugin->getGrouping(); + QString groupingMenu { "" }; Q_ASSERT(!menu->menuItemExists(MenuOption::OutputMenu, name)); + // assign the meny grouping based on plugin grouping + switch (grouping) { + case Plugin::ADVANCED: + groupingMenu = "Advanced"; + break; + case Plugin::DEVELOPER: + groupingMenu = "Developer"; + break; + default: + groupingMenu = "Standard"; + break; + } + static QActionGroup* displayPluginGroup = nullptr; if (!displayPluginGroup) { displayPluginGroup = new QActionGroup(menu); @@ -5074,7 +5088,8 @@ static void addDisplayPluginToMenu(DisplayPluginPointer displayPlugin, bool acti auto action = menu->addActionToQMenuAndActionHash(parent, name, 0, qApp, SLOT(updateDisplayMode()), - QAction::NoRole, UNSPECIFIED_POSITION, grouping); + QAction::NoRole, UNSPECIFIED_POSITION, groupingMenu); + action->setCheckable(true); action->setChecked(active); displayPluginGroup->addAction(action); @@ -5094,13 +5109,17 @@ void Application::updateDisplayMode() { DisplayPluginList advanced; DisplayPluginList developer; foreach(auto displayPlugin, displayPlugins) { - QString grouping = displayPlugin->getGrouping(); - if (grouping == "Advanced") { - advanced.push_back(displayPlugin); - } else if (grouping == "Developer") { - developer.push_back(displayPlugin); - } else { - standard.push_back(displayPlugin); + auto grouping = displayPlugin->getGrouping(); + switch (grouping) { + case Plugin::ADVANCED: + advanced.push_back(displayPlugin); + break; + case Plugin::DEVELOPER: + developer.push_back(displayPlugin); + break; + default: + standard.push_back(displayPlugin); + break; } } diff --git a/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp index 11bed0e0af..fb6e9c3b65 100644 --- a/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp @@ -16,7 +16,6 @@ #include const QString Basic2DWindowOpenGLDisplayPlugin::NAME("Desktop"); -const QString Basic2DWindowOpenGLDisplayPlugin::GROUPING("Standard"); static const QString FULLSCREEN = "Fullscreen"; diff --git a/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.h index 29e26c1f28..6523b58914 100644 --- a/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.h @@ -19,7 +19,6 @@ class Basic2DWindowOpenGLDisplayPlugin : public WindowOpenGLDisplayPlugin { public: virtual const QString& getName() const override { return NAME; } - virtual const QString& getGrouping() const override { return GROUPING; } virtual float getTargetFrameRate() override { return _framerateTarget ? (float) _framerateTarget : TARGET_FRAMERATE_Basic2DWindowOpenGL; } @@ -38,7 +37,6 @@ protected: private: void updateFramerate(); static const QString NAME; - static const QString GROUPING; QScreen* getFullscreenTarget(); std::vector _framerateActions; QAction* _vsyncAction { nullptr }; diff --git a/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.cpp index 54cf13fccd..f780534bc9 100644 --- a/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.cpp @@ -13,7 +13,6 @@ #include const QString NullDisplayPlugin::NAME("NullDisplayPlugin"); -const QString NullDisplayPlugin::GROUPING("Developer"); const QString & NullDisplayPlugin::getName() const { return NAME; diff --git a/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.h index d574324472..d576dbad51 100644 --- a/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.h @@ -14,6 +14,7 @@ public: virtual ~NullDisplayPlugin() final {} virtual const QString & getName() const override; + virtual grouping getGrouping() const override { return DEVELOPER; } void stop() override; diff --git a/libraries/display-plugins/src/display-plugins/stereo/InterleavedStereoDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/stereo/InterleavedStereoDisplayPlugin.cpp index 7aacebbcea..40c6e6306b 100644 --- a/libraries/display-plugins/src/display-plugins/stereo/InterleavedStereoDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/stereo/InterleavedStereoDisplayPlugin.cpp @@ -45,7 +45,6 @@ void main() { )FS"; const QString InterleavedStereoDisplayPlugin::NAME("3D TV - Interleaved"); -const QString InterleavedStereoDisplayPlugin::GROUPING("Advanced"); InterleavedStereoDisplayPlugin::InterleavedStereoDisplayPlugin() { } diff --git a/libraries/display-plugins/src/display-plugins/stereo/InterleavedStereoDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/stereo/InterleavedStereoDisplayPlugin.h index 33b6397788..df2a9f4800 100644 --- a/libraries/display-plugins/src/display-plugins/stereo/InterleavedStereoDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/stereo/InterleavedStereoDisplayPlugin.h @@ -15,7 +15,7 @@ public: InterleavedStereoDisplayPlugin(); virtual const QString& getName() const override { return NAME; } - virtual const QString& getGrouping() const override { return GROUPING; } + virtual grouping getGrouping() const override { return ADVANCED; } // initialize OpenGL context settings needed by the plugin virtual void customizeContext() override; @@ -25,5 +25,4 @@ public: private: static const QString NAME; - static const QString GROUPING; }; diff --git a/libraries/display-plugins/src/display-plugins/stereo/SideBySideStereoDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/stereo/SideBySideStereoDisplayPlugin.cpp index d542838d2f..e8a83d2b08 100644 --- a/libraries/display-plugins/src/display-plugins/stereo/SideBySideStereoDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/stereo/SideBySideStereoDisplayPlugin.cpp @@ -10,7 +10,6 @@ #include const QString SideBySideStereoDisplayPlugin::NAME("3D TV - Side by Side Stereo"); -const QString SideBySideStereoDisplayPlugin::GROUPING("Advanced"); SideBySideStereoDisplayPlugin::SideBySideStereoDisplayPlugin() { } diff --git a/libraries/display-plugins/src/display-plugins/stereo/SideBySideStereoDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/stereo/SideBySideStereoDisplayPlugin.h index daca9cd474..70f69ba4cb 100644 --- a/libraries/display-plugins/src/display-plugins/stereo/SideBySideStereoDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/stereo/SideBySideStereoDisplayPlugin.h @@ -16,9 +16,8 @@ class SideBySideStereoDisplayPlugin : public StereoDisplayPlugin { public: SideBySideStereoDisplayPlugin(); virtual const QString& getName() const override { return NAME; } - virtual const QString& getGrouping() const override { return GROUPING; } + virtual grouping getGrouping() const override { return ADVANCED; } virtual glm::uvec2 getRecommendedRenderSize() const override; private: static const QString NAME; - static const QString GROUPING; }; diff --git a/libraries/input-plugins/src/input-plugins/KeyboardMouseDevice.cpp b/libraries/input-plugins/src/input-plugins/KeyboardMouseDevice.cpp index 45a1adb386..1d7fbbec67 100755 --- a/libraries/input-plugins/src/input-plugins/KeyboardMouseDevice.cpp +++ b/libraries/input-plugins/src/input-plugins/KeyboardMouseDevice.cpp @@ -19,7 +19,6 @@ #include const QString KeyboardMouseDevice::NAME = "Keyboard/Mouse"; -const QString KeyboardMouseDevice::GROUPING = "Standard"; void KeyboardMouseDevice::pluginUpdate(float deltaTime, bool jointsCaptured) { _inputDevice->update(deltaTime, jointsCaptured); diff --git a/libraries/input-plugins/src/input-plugins/KeyboardMouseDevice.h b/libraries/input-plugins/src/input-plugins/KeyboardMouseDevice.h index 654041ac35..6acb2bf041 100644 --- a/libraries/input-plugins/src/input-plugins/KeyboardMouseDevice.h +++ b/libraries/input-plugins/src/input-plugins/KeyboardMouseDevice.h @@ -68,7 +68,6 @@ public: virtual bool isSupported() const override { return true; } virtual bool isJointController() const override { return false; } virtual const QString& getName() const override { return NAME; } - virtual const QString& getGrouping() const override { return GROUPING; } virtual void pluginFocusOutEvent() override { _inputDevice->focusOutEvent(); } virtual void pluginUpdate(float deltaTime, bool jointsCaptured) override; @@ -88,7 +87,6 @@ public: void wheelEvent(QWheelEvent* event); static const QString NAME; - static const QString GROUPING; protected: diff --git a/libraries/plugins/src/plugins/Plugin.h b/libraries/plugins/src/plugins/Plugin.h index 6928416f88..ee10ce331c 100644 --- a/libraries/plugins/src/plugins/Plugin.h +++ b/libraries/plugins/src/plugins/Plugin.h @@ -19,8 +19,10 @@ public: /// \return human-readable name virtual const QString& getName() const = 0; - /// \return human-readable grouping for the plugin, Standard, Advanced, or Developer - virtual const QString& getGrouping() const = 0; + typedef enum { STANDARD, ADVANCED, DEVELOPER } grouping; + + /// \return human-readable grouping for the plugin, STANDARD, ADVANCED, or DEVELOPER + virtual grouping getGrouping() const { return STANDARD; } /// \return string ID (not necessarily human-readable) virtual const QString& getID() const { assert(false); return UNKNOWN_PLUGIN_ID; } diff --git a/plugins/hifiNeuron/src/NeuronPlugin.cpp b/plugins/hifiNeuron/src/NeuronPlugin.cpp index b9372967d1..a175ce8e06 100644 --- a/plugins/hifiNeuron/src/NeuronPlugin.cpp +++ b/plugins/hifiNeuron/src/NeuronPlugin.cpp @@ -30,7 +30,6 @@ Q_LOGGING_CATEGORY(inputplugins, "hifi.inputplugins") #endif const QString NeuronPlugin::NAME = "Neuron"; -const QString NeuronPlugin::GROUPING = "Standard"; const QString NeuronPlugin::NEURON_ID_STRING = "Perception Neuron"; // indices of joints of the Neuron standard skeleton. diff --git a/plugins/hifiNeuron/src/NeuronPlugin.h b/plugins/hifiNeuron/src/NeuronPlugin.h index 85ed3a3ecd..33c6879f5b 100644 --- a/plugins/hifiNeuron/src/NeuronPlugin.h +++ b/plugins/hifiNeuron/src/NeuronPlugin.h @@ -29,7 +29,6 @@ public: virtual bool isSupported() const override; virtual bool isJointController() const override { return true; } virtual const QString& getName() const override { return NAME; } - virtual const QString& getGrouping() const override { return GROUPING; } const QString& getID() const override { return NEURON_ID_STRING; } virtual void activate() override; @@ -66,7 +65,6 @@ protected: std::shared_ptr _inputDevice { std::make_shared() }; static const QString NAME; - static const QString GROUPING; static const QString NEURON_ID_STRING; std::string _serverAddress; diff --git a/plugins/hifiSdl2/src/SDL2Manager.cpp b/plugins/hifiSdl2/src/SDL2Manager.cpp index 554a8659c0..7ca49bbd75 100644 --- a/plugins/hifiSdl2/src/SDL2Manager.cpp +++ b/plugins/hifiSdl2/src/SDL2Manager.cpp @@ -44,7 +44,6 @@ static_assert( const QString SDL2Manager::NAME = "SDL2"; -const QString SDL2Manager::GROUPING = "Standard"; #ifdef HAVE_SDL2 SDL_JoystickID SDL2Manager::getInstanceId(SDL_GameController* controller) { diff --git a/plugins/hifiSdl2/src/SDL2Manager.h b/plugins/hifiSdl2/src/SDL2Manager.h index cb4d5cb744..6506cdccb6 100644 --- a/plugins/hifiSdl2/src/SDL2Manager.h +++ b/plugins/hifiSdl2/src/SDL2Manager.h @@ -30,7 +30,6 @@ public: virtual bool isSupported() const override; virtual bool isJointController() const override { return false; } virtual const QString& getName() const override { return NAME; } - virtual const QString& getGrouping() const override { return GROUPING; } virtual void init() override; virtual void deinit() override; @@ -85,7 +84,6 @@ private: #endif bool _isInitialized; static const QString NAME; - static const QString GROUPING; }; #endif // hifi__SDL2Manager_h diff --git a/plugins/hifiSixense/src/SixenseManager.cpp b/plugins/hifiSixense/src/SixenseManager.cpp index 5ef73d3646..3377aac14c 100644 --- a/plugins/hifiSixense/src/SixenseManager.cpp +++ b/plugins/hifiSixense/src/SixenseManager.cpp @@ -56,7 +56,6 @@ bool SixenseManager::_sixenseLoaded = false; const QString SixenseManager::NAME = "Sixense"; -const QString SixenseManager::GROUPING = "Standard"; const QString SixenseManager::HYDRA_ID_STRING = "Razer Hydra"; const QString MENU_PARENT = "Developer"; diff --git a/plugins/hifiSixense/src/SixenseManager.h b/plugins/hifiSixense/src/SixenseManager.h index 4eb07c974f..bbb9774368 100644 --- a/plugins/hifiSixense/src/SixenseManager.h +++ b/plugins/hifiSixense/src/SixenseManager.h @@ -30,7 +30,6 @@ public: virtual bool isSupported() const override; virtual bool isJointController() const override { return true; } virtual const QString& getName() const override { return NAME; } - virtual const QString& getGrouping() const override { return GROUPING; } virtual const QString& getID() const override { return HYDRA_ID_STRING; } virtual void activate() override; @@ -98,7 +97,6 @@ private: std::shared_ptr _inputDevice { std::make_shared() }; static const QString NAME; - static const QString GROUPING; static const QString HYDRA_ID_STRING; static bool _sixenseLoaded; diff --git a/plugins/oculus/src/OculusDebugDisplayPlugin.cpp b/plugins/oculus/src/OculusDebugDisplayPlugin.cpp index 9ef2cda514..94a3670e4b 100644 --- a/plugins/oculus/src/OculusDebugDisplayPlugin.cpp +++ b/plugins/oculus/src/OculusDebugDisplayPlugin.cpp @@ -9,8 +9,6 @@ #include const QString OculusDebugDisplayPlugin::NAME("Oculus Rift (Simulator)"); -const QString OculusDebugDisplayPlugin::GROUPING("Developer"); - static const QString DEBUG_FLAG("HIFI_DEBUG_OCULUS"); static bool enableDebugOculus = QProcessEnvironment::systemEnvironment().contains("HIFI_DEBUG_OCULUS"); diff --git a/plugins/oculus/src/OculusDebugDisplayPlugin.h b/plugins/oculus/src/OculusDebugDisplayPlugin.h index cc0d5c2065..c62fe12c73 100644 --- a/plugins/oculus/src/OculusDebugDisplayPlugin.h +++ b/plugins/oculus/src/OculusDebugDisplayPlugin.h @@ -12,7 +12,7 @@ class OculusDebugDisplayPlugin : public OculusBaseDisplayPlugin { public: virtual const QString& getName() const override { return NAME; } - virtual const QString& getGrouping() const override { return GROUPING; } + virtual grouping getGrouping() const override { return DEVELOPER; } virtual bool isSupported() const override; protected: @@ -20,6 +20,5 @@ protected: private: static const QString NAME; - static const QString GROUPING; }; diff --git a/plugins/oculus/src/OculusDisplayPlugin.cpp b/plugins/oculus/src/OculusDisplayPlugin.cpp index 0b81f661df..3002c746a2 100644 --- a/plugins/oculus/src/OculusDisplayPlugin.cpp +++ b/plugins/oculus/src/OculusDisplayPlugin.cpp @@ -137,7 +137,6 @@ private: #endif const QString OculusDisplayPlugin::NAME("Oculus Rift"); -const QString OculusDisplayPlugin::GROUPING("Standard"); static const QString MONO_PREVIEW = "Mono Preview"; static const QString FRAMERATE = DisplayPlugin::MENU_PATH() + ">Framerate"; diff --git a/plugins/oculus/src/OculusDisplayPlugin.h b/plugins/oculus/src/OculusDisplayPlugin.h index 4633e434e1..d6ae4e6436 100644 --- a/plugins/oculus/src/OculusDisplayPlugin.h +++ b/plugins/oculus/src/OculusDisplayPlugin.h @@ -18,7 +18,6 @@ class OculusDisplayPlugin : public OculusBaseDisplayPlugin { public: virtual void activate() override; virtual const QString& getName() const override { return NAME; } - virtual const QString& getGrouping() const override { return GROUPING; } virtual void setEyeRenderPose(uint32_t frameIndex, Eye eye, const glm::mat4& pose) override final; virtual float getTargetFrameRate() override { return TARGET_RATE_Oculus; } @@ -31,7 +30,6 @@ protected: private: using EyePoses = std::pair; static const QString NAME; - static const QString GROUPING; bool _enablePreview{ false }; bool _monoPreview { true }; QMap _frameEyePoses; diff --git a/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.cpp b/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.cpp index f6e6055d84..4bded4e58f 100644 --- a/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.cpp +++ b/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.cpp @@ -26,9 +26,7 @@ using namespace oglplus; -const QString OculusLegacyDisplayPlugin::NAME("Oculus Rift (0.5) (Simulated)"); -const QString OculusLegacyDisplayPlugin::GROUPING("Standard"); - +const QString OculusLegacyDisplayPlugin::NAME("Oculus Rift (0.5) (Legacy)"); OculusLegacyDisplayPlugin::OculusLegacyDisplayPlugin() { } diff --git a/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.h b/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.h index 603bdac507..1ba288cc65 100644 --- a/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.h +++ b/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.h @@ -20,7 +20,6 @@ public: OculusLegacyDisplayPlugin(); virtual bool isSupported() const override; virtual const QString& getName() const override { return NAME; } - virtual const QString& getGrouping() const override { return GROUPING; } virtual void activate() override; virtual void deactivate() override; @@ -47,7 +46,6 @@ protected: private: static const QString NAME; - static const QString GROUPING; ovrHmd _hmd; mutable ovrTrackingState _trackingState; diff --git a/plugins/openvr/src/OpenVrDisplayPlugin.cpp b/plugins/openvr/src/OpenVrDisplayPlugin.cpp index 6860245fb0..7fb70180c4 100644 --- a/plugins/openvr/src/OpenVrDisplayPlugin.cpp +++ b/plugins/openvr/src/OpenVrDisplayPlugin.cpp @@ -28,11 +28,9 @@ Q_DECLARE_LOGGING_CATEGORY(displayplugins) Q_LOGGING_CATEGORY(displayplugins, "hifi.displayplugins") const QString OpenVrDisplayPlugin::NAME("OpenVR (Vive)"); -const QString OpenVrDisplayPlugin::GROUPING("Standard"); const QString StandingHMDSensorMode = "Standing HMD Sensor Mode"; // this probably shouldn't be hardcoded here - static vr::IVRCompositor* _compositor{ nullptr }; vr::TrackedDevicePose_t _trackedDevicePose[vr::k_unMaxTrackedDeviceCount]; mat4 _trackedDevicePoseMat4[vr::k_unMaxTrackedDeviceCount]; diff --git a/plugins/openvr/src/OpenVrDisplayPlugin.h b/plugins/openvr/src/OpenVrDisplayPlugin.h index 5983129572..e290368de0 100644 --- a/plugins/openvr/src/OpenVrDisplayPlugin.h +++ b/plugins/openvr/src/OpenVrDisplayPlugin.h @@ -19,7 +19,6 @@ class OpenVrDisplayPlugin : public WindowOpenGLDisplayPlugin { public: virtual bool isSupported() const override; virtual const QString& getName() const override { return NAME; } - virtual const QString& getGrouping() const override { return GROUPING; } virtual bool isHmd() const override { return true; } virtual float getTargetFrameRate() override { return TARGET_RATE_OpenVr; } @@ -46,6 +45,5 @@ protected: private: vr::IVRSystem* _hmd { nullptr }; static const QString NAME; - static const QString GROUPING; }; From c0cf717a04094c64a564c72b83223e3758629e3a Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Mon, 11 Jan 2016 11:13:33 -0800 Subject: [PATCH 16/16] CR feedback --- .../display-plugins/src/display-plugins/NullDisplayPlugin.cpp | 4 ---- .../display-plugins/src/display-plugins/NullDisplayPlugin.h | 3 +-- plugins/oculus/src/OculusDisplayPlugin.h | 2 +- 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.cpp index f780534bc9..e8145db900 100644 --- a/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.cpp @@ -14,10 +14,6 @@ const QString NullDisplayPlugin::NAME("NullDisplayPlugin"); -const QString & NullDisplayPlugin::getName() const { - return NAME; -} - glm::uvec2 NullDisplayPlugin::getRecommendedRenderSize() const { return glm::uvec2(100, 100); } diff --git a/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.h index d576dbad51..14b5529a29 100644 --- a/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.h @@ -13,7 +13,7 @@ class NullDisplayPlugin : public DisplayPlugin { public: virtual ~NullDisplayPlugin() final {} - virtual const QString & getName() const override; + virtual const QString& getName() const override { return NAME; } virtual grouping getGrouping() const override { return DEVELOPER; } void stop() override; @@ -25,5 +25,4 @@ public: virtual QImage getScreenshot() const override; private: static const QString NAME; - static const QString GROUPING; }; diff --git a/plugins/oculus/src/OculusDisplayPlugin.h b/plugins/oculus/src/OculusDisplayPlugin.h index d6ae4e6436..98535a1790 100644 --- a/plugins/oculus/src/OculusDisplayPlugin.h +++ b/plugins/oculus/src/OculusDisplayPlugin.h @@ -30,7 +30,7 @@ protected: private: using EyePoses = std::pair; static const QString NAME; - bool _enablePreview{ false }; + bool _enablePreview { false }; bool _monoPreview { true }; QMap _frameEyePoses;