1// Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB).
2// Copyright (C) 2016 The Qt Company Ltd and/or its subsidiary(-ies).
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
4
5#ifndef QT3DRENDER_RENDER_RENDERSTATE_H
6#define QT3DRENDER_RENDER_RENDERSTATE_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists for the convenience
13// of other Qt classes. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <Qt3DRender/private/genericstate_p.h>
20#include <Qt3DRender/private/renderstates_p.h>
21#include <Qt3DRender/private/statevariant_p.h>
22
23QT_BEGIN_NAMESPACE
24
25namespace Qt3DRender {
26
27class QRenderState;
28
29namespace Render {
30
31class RenderState;
32
33class Q_3DRENDERSHARED_PRIVATE_EXPORT RenderStateSet
34{
35public:
36 RenderStateSet();
37 ~RenderStateSet();
38
39 template<typename GenericState>
40 void addState(const GenericState &state)
41 {
42 addState(StateVariant::fromValue(state));
43 }
44
45 /**
46 * @brief changeCost - metric of cost to change to this state-set from
47 * a candidate previous state-set. This is used to find an optimal
48 * ordering of state-sets when sending draw commands.
49 * @param previousState
50 * @return
51 */
52 int changeCost(RenderStateSet* previousState);
53
54 StateMaskSet stateMask() const;
55 void merge(const RenderStateSet *other);
56
57 const std::vector<StateVariant>& states() const noexcept { return m_states; }
58 std::vector<StateVariant>& states() noexcept { return m_states; }
59
60 bool canAddStateOfType(StateMask type) const;
61
62 /**
63 * @brief contains - check if this set contains a matching piece of state
64 * @param ds
65 * @return
66 */
67 bool contains(const StateVariant &ds) const;
68
69private:
70 bool hasStateOfType(StateMask type) const;
71 bool allowMultipleStatesOfType(StateMask type) const;
72
73private:
74 StateMaskSet m_stateMask;
75 std::vector<StateVariant> m_states;
76};
77
78template<>
79Q_3DRENDERSHARED_PRIVATE_EXPORT void RenderStateSet::addState<StateVariant>(const StateVariant &state);
80
81} // namespace Render
82} // namespace Qt3DRender
83
84QT_END_NAMESPACE
85
86#endif // QT3DRENDER_RENDER_RENDERSTATE_H
87

source code of qt3d/src/render/renderstates/renderstateset_p.h