diff options
author | Paul Lemire <paul.lemire350@gmail.com> | 2016-07-01 23:34:09 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2016-07-17 18:53:02 +0000 |
commit | 2b4bb4fdce0630c71bc84c70f66e3c7943589602 (patch) | |
tree | eaedf0d315f22a760af4f2d80ce844310bbae40d /src/render/renderstates/renderstateset_p.h | |
parent | 5a2bcb04d3bccdf778826491df5f38371847059f (diff) |
RenderStateSet/Node: store a StateVariant
Instead of dealing with pointer. This will make it easier to parallelize
submission and simplifies things
Change-Id: I4f4f97b070885e3cf635f145bd3d9092b82ca55d
Task-number: QTBUG-54423
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/renderstates/renderstateset_p.h')
-rw-r--r-- | src/render/renderstates/renderstateset_p.h | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/src/render/renderstates/renderstateset_p.h b/src/render/renderstates/renderstateset_p.h index a82cb20f0..96af97f84 100644 --- a/src/render/renderstates/renderstateset_p.h +++ b/src/render/renderstates/renderstateset_p.h @@ -53,6 +53,8 @@ // #include <Qt3DRender/private/genericstate_p.h> +#include <Qt3DRender/private/renderstates_p.h> +#include <Qt3DRender/private/statevariant_p.h> #include <QVector> QT_BEGIN_NAMESPACE @@ -72,7 +74,11 @@ public: RenderStateSet(); ~RenderStateSet(); - void addState(RenderStateImpl* ds); + template<typename GenericState> + void addState(const GenericState &state) + { + addState(StateVariant::fromValue(state)); + } /** * @brief changeCost - metric of cost to change to this state-set from @@ -88,22 +94,34 @@ public: StateMaskSet stateMask() const; void merge(RenderStateSet *other); void resetMasked(StateMaskSet maskOfStatesToReset, GraphicsContext* gc); + + template<class State, typename ... Args> + static StateVariant createState(Args... values) + { + State state; + state.set(values...); + return StateVariant::fromValue(state); + } + + static StateVariant initializeStateFromPeer(const Qt3DRender::QRenderStateCreatedChangeBasePtr change); + private: /** * @brief contains - check if this set contains a matching piece of state * @param ds * @return */ - bool contains(RenderStateImpl* ds) const; - - QVector<RenderStateImpl*> m_states; + bool contains(const StateVariant &ds) const; StateMaskSet m_stateMask; - RenderStateSet* m_cachedPrevious; - QVector<RenderStateImpl*> m_cachedDeltaStates; + QVector<StateVariant> m_states; + QVector<StateVariant> m_cachedDeltaStates; }; +template<> +void RenderStateSet::addState<StateVariant>(const StateVariant &state); + } // namespace Render } // namespace Qt3DRender |