From e31a3b4d08990cc8ce5fc23706e777eafe66d822 Mon Sep 17 00:00:00 2001 From: samcake Date: Wed, 15 Jun 2016 15:13:51 -0700 Subject: [PATCH] After trying stop trying to expose a generic [] operator on Varying and Containers --- .../render-utils/src/DebugDeferredBuffer.cpp | 4 +- .../render-utils/src/DebugDeferredBuffer.h | 2 +- .../render-utils/src/SubsurfaceScattering.cpp | 6 +- .../render-utils/src/SubsurfaceScattering.h | 2 +- .../render-utils/src/SurfaceGeometryPass.cpp | 4 +- .../render-utils/src/SurfaceGeometryPass.h | 2 +- libraries/render/src/render/BlurTask.cpp | 4 +- libraries/render/src/render/BlurTask.h | 2 +- libraries/render/src/render/Task.cpp | 8 +- libraries/render/src/render/Task.h | 79 +++++++------------ 10 files changed, 46 insertions(+), 67 deletions(-) diff --git a/libraries/render-utils/src/DebugDeferredBuffer.cpp b/libraries/render-utils/src/DebugDeferredBuffer.cpp index 076f4a3880..844eaedbb9 100644 --- a/libraries/render-utils/src/DebugDeferredBuffer.cpp +++ b/libraries/render-utils/src/DebugDeferredBuffer.cpp @@ -342,8 +342,8 @@ void DebugDeferredBuffer::run(const SceneContextPointer& sceneContext, const Ren assert(renderContext->args->hasViewFrustum()); RenderArgs* args = renderContext->args; - auto& diffusedCurvatureFramebuffer = inputs.getFirst(); - auto& scatteringFramebuffer = inputs.getSecond(); + auto& diffusedCurvatureFramebuffer = inputs.get0(); + auto& scatteringFramebuffer = inputs.get1(); gpu::doInBatch(args->_context, [&](gpu::Batch& batch) { batch.enableStereo(false); diff --git a/libraries/render-utils/src/DebugDeferredBuffer.h b/libraries/render-utils/src/DebugDeferredBuffer.h index 095e0ab9cc..e1d76e1f71 100644 --- a/libraries/render-utils/src/DebugDeferredBuffer.h +++ b/libraries/render-utils/src/DebugDeferredBuffer.h @@ -34,7 +34,7 @@ signals: class DebugDeferredBuffer { public: - using Inputs = render::VaryingPair; + using Inputs = render::VaryingSet2; using Config = DebugDeferredBufferConfig; using JobModel = render::Job::ModelI; diff --git a/libraries/render-utils/src/SubsurfaceScattering.cpp b/libraries/render-utils/src/SubsurfaceScattering.cpp index cab12e7377..79527d36e1 100644 --- a/libraries/render-utils/src/SubsurfaceScattering.cpp +++ b/libraries/render-utils/src/SubsurfaceScattering.cpp @@ -171,9 +171,9 @@ void SubsurfaceScattering::run(const render::SceneContextPointer& sceneContext, auto pipeline = getScatteringPipeline(); - auto& frameTransform = inputs.getFirst(); - auto& curvatureFramebuffer = inputs.getSecond(); - auto& diffusedFramebuffer = inputs.getThird(); + auto& frameTransform = inputs.get0(); + auto& curvatureFramebuffer = inputs.get1(); + auto& diffusedFramebuffer = inputs.get2(); auto framebufferCache = DependencyManager::get(); diff --git a/libraries/render-utils/src/SubsurfaceScattering.h b/libraries/render-utils/src/SubsurfaceScattering.h index 61bccab48f..4322379e57 100644 --- a/libraries/render-utils/src/SubsurfaceScattering.h +++ b/libraries/render-utils/src/SubsurfaceScattering.h @@ -48,7 +48,7 @@ signals: class SubsurfaceScattering { public: - using Inputs = render::VaryingTrio; + using Inputs = render::VaryingSet3; using Config = SubsurfaceScatteringConfig; using JobModel = render::Job::ModelIO; diff --git a/libraries/render-utils/src/SurfaceGeometryPass.cpp b/libraries/render-utils/src/SurfaceGeometryPass.cpp index 9e5d455725..00fce50bb4 100644 --- a/libraries/render-utils/src/SurfaceGeometryPass.cpp +++ b/libraries/render-utils/src/SurfaceGeometryPass.cpp @@ -60,8 +60,8 @@ void SurfaceGeometryPass::run(const render::SceneContextPointer& sceneContext, c auto pyramidTexture = framebufferCache->getDepthPyramidTexture(); auto curvatureFBO = framebufferCache->getCurvatureFramebuffer(); - curvatureAndDepth.first. template edit() = curvatureFBO; - curvatureAndDepth.second. template edit() = pyramidTexture; + curvatureAndDepth.edit0() = curvatureFBO; + curvatureAndDepth.edit1() = pyramidTexture; auto curvatureTexture = framebufferCache->getCurvatureTexture(); diff --git a/libraries/render-utils/src/SurfaceGeometryPass.h b/libraries/render-utils/src/SurfaceGeometryPass.h index bfad811340..b2d72891bd 100644 --- a/libraries/render-utils/src/SurfaceGeometryPass.h +++ b/libraries/render-utils/src/SurfaceGeometryPass.h @@ -40,7 +40,7 @@ signals: class SurfaceGeometryPass { public: - using Outputs = render::VaryingPair; + using Outputs = render::VaryingSet2; using Config = SurfaceGeometryPassConfig; using JobModel = render::Job::ModelIO; diff --git a/libraries/render/src/render/BlurTask.cpp b/libraries/render/src/render/BlurTask.cpp index 53129f16ba..1d5fe18f4a 100644 --- a/libraries/render/src/render/BlurTask.cpp +++ b/libraries/render/src/render/BlurTask.cpp @@ -306,8 +306,8 @@ void BlurGaussianDepthAware::run(const SceneContextPointer& sceneContext, const RenderArgs* args = renderContext->args; - auto& sourceFramebuffer = SourceAndDepth.getFirst(); - auto& depthTexture = SourceAndDepth.getSecond(); + auto& sourceFramebuffer = SourceAndDepth.get0(); + auto& depthTexture = SourceAndDepth.get1(); BlurInOutResource::Resources blurringResources; if (!_inOutResources.updateResources(sourceFramebuffer, blurringResources)) { diff --git a/libraries/render/src/render/BlurTask.h b/libraries/render/src/render/BlurTask.h index 333cd22f8e..aea596cc2f 100644 --- a/libraries/render/src/render/BlurTask.h +++ b/libraries/render/src/render/BlurTask.h @@ -121,7 +121,7 @@ protected: class BlurGaussianDepthAware { public: - using Inputs = VaryingPair; + using Inputs = VaryingSet2; using Config = BlurGaussianDepthAwareConfig; using JobModel = Job::ModelIO; diff --git a/libraries/render/src/render/Task.cpp b/libraries/render/src/render/Task.cpp index a180e7ff8e..8727923c70 100644 --- a/libraries/render/src/render/Task.cpp +++ b/libraries/render/src/render/Task.cpp @@ -27,14 +27,14 @@ void TaskConfig::refresh() { namespace render{ - template <> void varyingGet(const VaryingPairBase* data, uint8_t index, Varying& var) { + template <> void varyingGet(const VaryingPairBase& data, uint8_t index, Varying& var) { if (index == 0) { - var = data->first; + var = data.first; } else { - var = data->second; + var = data.second; } } - template <> uint8_t varyingLength(const VaryingPairBase* data) { return 2; } + template <> uint8_t varyingLength(const VaryingPairBase& data) { return 2; } } \ No newline at end of file diff --git a/libraries/render/src/render/Task.h b/libraries/render/src/render/Task.h index 947f1a3da0..a496e1d876 100644 --- a/libraries/render/src/render/Task.h +++ b/libraries/render/src/render/Task.h @@ -30,9 +30,11 @@ namespace render { class Varying; - - template void varyingGet(const T* data, uint8_t index, Varying& var) {} -template uint8_t varyingLength(const T* data) { return 0; } + + + +template < class T > void varyingGet(const T& data, uint8_t index, Varying& var) {} +template uint8_t varyingLength(const T& data) { return 0; } // A varying piece of data, to be used as Job/Task I/O // TODO: Task IO @@ -52,7 +54,7 @@ public: // access potential sub varyings contained in this one. Varying operator[] (uint8_t index) const { return (*_concept)[index]; } - uint8_t length() const { return _concept->length(); } + uint8_t length() const { return (*_concept).length(); } protected: class Concept { @@ -65,19 +67,16 @@ protected: template class Model : public Concept { public: using Data = T; - // using VarContainer = std::enable_if; - //using VarContainer = std::conditional, T::VarContainer, T>; Model(const Data& data) : _data(data) {} virtual ~Model() = default; - virtual Varying operator[] (uint8_t index) const { Varying var; - // varyingGet(&_data, index, var); + varyingGet< T >(_data, index, var); return var; } - virtual uint8_t length() const { return varyingLength(&_data); } + virtual uint8_t length() const { return varyingLength(_data); } Data _data; }; @@ -85,67 +84,47 @@ protected: std::shared_ptr _concept; }; - - - using VaryingPairBase = std::pair; - -template <> void varyingGet(const VaryingPairBase* data, uint8_t index, Varying& var); -template <> uint8_t varyingLength(const VaryingPairBase* data); +template <> void varyingGet(const VaryingPairBase& data, uint8_t index, Varying& var); +template <> uint8_t varyingLength(const VaryingPairBase& data); template < typename T0, typename T1 > -class VaryingPair : public VaryingPairBase { +class VaryingSet2 : public VaryingPairBase { public: using Parent = VaryingPairBase; - using VarContainer = VaryingPairBase; + typedef void is_proxy_tag; - VaryingPair() : Parent(Varying(T0()), Varying(T1())) {} - VaryingPair(const VaryingPair& pair) : Parent(pair.first, pair.second) {} - VaryingPair(const Varying& first, const Varying& second) : Parent(first, second) {} + VaryingSet2() : Parent(Varying(T0()), Varying(T1())) {} + VaryingSet2(const VaryingSet2& pair) : Parent(pair.first, pair.second) {} + VaryingSet2(const Varying& first, const Varying& second) : Parent(first, second) {} - const T0& getFirst() const { return first.get(); } - T0& editFirst() { return first.edit(); } + const T0& get0() const { return first.get(); } + T0& edit0() { return first.edit(); } - const T1& getSecond() const { return second.get(); } - T1& editSecond() { return second.edit(); } + const T1& get1() const { return second.get(); } + T1& edit1() { return second.edit(); } }; template -class VaryingTrio : public std::tuple{ +class VaryingSet3 : public std::tuple{ public: using Parent = std::tuple; - VaryingTrio() : Parent(Varying(T0()), Varying(T1()), Varying(T2())) {} - VaryingTrio(const VaryingTrio& trio) : Parent(std::get<0>(trio), std::get<1>(trio), std::get<2>(trio)) {} - VaryingTrio(const Varying& first, const Varying& second, const Varying& third) : Parent(first, second, third) {} + VaryingSet3() : Parent(Varying(T0()), Varying(T1()), Varying(T2())) {} + VaryingSet3(const VaryingSet3& trio) : Parent(std::get<0>(trio), std::get<1>(trio), std::get<2>(trio)) {} + VaryingSet3(const Varying& first, const Varying& second, const Varying& third) : Parent(first, second, third) {} - const T0& getFirst() const { return std::get<0>((*this)).template get(); } - T0& editFirst() { return std::get<0>((*this)).template edit(); } + const T0& get0() const { return std::get<0>((*this)).template get(); } + T0& edit0() { return std::get<0>((*this)).template edit(); } - const T1& getSecond() const { return std::get<1>((*this)).template get(); } - T1& editSecond() { return std::get<1>((*this)).template edit(); } + const T1& get1() const { return std::get<1>((*this)).template get(); } + T1& edit1() { return std::get<1>((*this)).template edit(); } - const T2& getThird() const { return std::get<2>((*this)).template get(); } - T2& editThird() { return std::get<2>((*this)).template edit(); } + const T2& get2() const { return std::get<2>((*this)).template get(); } + T2& edit2() { return std::get<2>((*this)).template edit(); } }; -/* -template -class VaryingTuple : public std::tuple<_Types>{ -public: - using Parent = std::tuple<_Types>; - - VaryingPair() : Parent(Varying(T0()), Varying(T1())) {} - VaryingPair(const VaryingPair& pair) : Parent(pair.first, pair.second) {} - VaryingPair(const Varying& first, const Varying& second) : Parent(first, second) {} - - const T0& getFirst() const { return first.get(); } - T0& editFirst() { return first.edit(); } - - const T1& getSecond() const { return second.get(); } - T1& editSecond() { return second.edit(); } -};*/ template < class T, int NUM > class VaryingArray : public std::array {