diff options
Diffstat (limited to 'src/render/renderers/opengl/renderstates')
-rw-r--r-- | src/render/renderers/opengl/renderstates/renderstateset.cpp | 15 | ||||
-rw-r--r-- | src/render/renderers/opengl/renderstates/renderstateset_p.h | 8 |
2 files changed, 19 insertions, 4 deletions
diff --git a/src/render/renderers/opengl/renderstates/renderstateset.cpp b/src/render/renderers/opengl/renderstates/renderstateset.cpp index b14695c77..d667d9c76 100644 --- a/src/render/renderers/opengl/renderstates/renderstateset.cpp +++ b/src/render/renderers/opengl/renderstates/renderstateset.cpp @@ -112,17 +112,28 @@ void RenderStateSet::merge(RenderStateSet *other) // We only add states which are new (different type) for (const StateVariant &otherState : otherStates) { - const bool hasFoundStateOfSameType = hasStateOfType(otherState.type); - if (!hasFoundStateOfSameType) + const bool canAdd = canAddStateOfType(otherState.type); + if (canAdd) m_states.push_back(otherState); } } +bool RenderStateSet::canAddStateOfType(StateMask type) const +{ + return !hasStateOfType(type) || allowMultipleStatesOfType(type); +} + bool RenderStateSet::hasStateOfType(StateMask type) const { return (type & stateMask()); } +bool RenderStateSet::allowMultipleStatesOfType(StateMask type) const +{ + return (type == BlendEquationArgumentsMask) || + (type == ClipPlaneMask); +} + bool RenderStateSet::contains(const StateVariant &ds) const { // trivial reject using the state mask bits diff --git a/src/render/renderers/opengl/renderstates/renderstateset_p.h b/src/render/renderers/opengl/renderstates/renderstateset_p.h index 29be4d2f1..c2f3a0219 100644 --- a/src/render/renderers/opengl/renderstates/renderstateset_p.h +++ b/src/render/renderers/opengl/renderstates/renderstateset_p.h @@ -93,8 +93,7 @@ public: QVector<StateVariant> states() const { return m_states; } - bool hasStateOfType(StateMask type) const; - + bool canAddStateOfType(StateMask type) const; /** * @brief contains - check if this set contains a matching piece of state @@ -102,6 +101,11 @@ public: * @return */ bool contains(const StateVariant &ds) const; + +private: + bool hasStateOfType(StateMask type) const; + bool allowMultipleStatesOfType(StateMask type) const; + private: StateMaskSet m_stateMask; QVector<StateVariant> m_states; |