summaryrefslogtreecommitdiffstats
path: root/src/render/renderstates/renderstateset_p.h
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire350@gmail.com>2016-07-01 23:34:09 +0200
committerPaul Lemire <paul.lemire@kdab.com>2016-07-17 18:53:02 +0000
commit2b4bb4fdce0630c71bc84c70f66e3c7943589602 (patch)
treeeaedf0d315f22a760af4f2d80ce844310bbae40d /src/render/renderstates/renderstateset_p.h
parent5a2bcb04d3bccdf778826491df5f38371847059f (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.h30
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