1/****************************************************************************
2**
3** Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB).
4** Copyright (C) 2016 The Qt Company Ltd and/or its subsidiary(-ies).
5** Contact: https://www.qt.io/licensing/
6**
7** This file is part of the Qt3D module of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL$
10** Commercial License Usage
11** Licensees holding valid commercial Qt licenses may use this file in
12** accordance with the commercial license agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and The Qt Company. For licensing terms
15** and conditions see https://www.qt.io/terms-conditions. For further
16** information use the contact form at https://www.qt.io/contact-us.
17**
18** GNU Lesser General Public License Usage
19** Alternatively, this file may be used under the terms of the GNU Lesser
20** General Public License version 3 as published by the Free Software
21** Foundation and appearing in the file LICENSE.LGPL3 included in the
22** packaging of this file. Please review the following information to
23** ensure the GNU Lesser General Public License version 3 requirements
24** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
25**
26** GNU General Public License Usage
27** Alternatively, this file may be used under the terms of the GNU
28** General Public License version 2.0 or (at your option) the GNU General
29** Public license version 3 or any later version approved by the KDE Free
30** Qt Foundation. The licenses are as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
32** included in the packaging of this file. Please review the following
33** information to ensure the GNU General Public License requirements will
34** be met: https://www.gnu.org/licenses/gpl-2.0.html and
35** https://www.gnu.org/licenses/gpl-3.0.html.
36**
37** $QT_END_LICENSE$
38**
39****************************************************************************/
40
41#ifndef QT3DRENDER_QBLENDEQUATIONARGUMENTS_H
42#define QT3DRENDER_QBLENDEQUATIONARGUMENTS_H
43
44#include <Qt3DRender/qrenderstate.h>
45
46QT_BEGIN_NAMESPACE
47
48namespace Qt3DRender {
49
50class QBlendEquationArgumentsPrivate;
51
52class Q_3DRENDERSHARED_EXPORT QBlendEquationArguments : public QRenderState
53{
54 Q_OBJECT
55 Q_PROPERTY(Blending sourceRgb READ sourceRgb WRITE setSourceRgb NOTIFY sourceRgbChanged)
56 Q_PROPERTY(Blending sourceAlpha READ sourceAlpha WRITE setSourceAlpha NOTIFY sourceAlphaChanged)
57 Q_PROPERTY(Blending destinationRgb READ destinationRgb WRITE setDestinationRgb NOTIFY destinationRgbChanged)
58 Q_PROPERTY(Blending destinationAlpha READ destinationAlpha WRITE setDestinationAlpha NOTIFY destinationAlphaChanged)
59 Q_PROPERTY(int bufferIndex READ bufferIndex WRITE setBufferIndex NOTIFY bufferIndexChanged)
60
61public:
62
63 enum Blending
64 {
65 Zero = 0,
66 One = 1,
67 SourceColor = 0x0300,
68 SourceAlpha = 0x0302,
69 Source1Alpha,
70 Source1Color,
71 DestinationColor = 0x0306,
72 DestinationAlpha = 0x0304,
73 SourceAlphaSaturate = 0x0308,
74 ConstantColor = 0x8001,
75 ConstantAlpha = 0x8003,
76 OneMinusSourceColor = 0x0301,
77 OneMinusSourceAlpha = 0x0303,
78 OneMinusDestinationAlpha = 0x0305,
79 OneMinusDestinationColor = 0x0307,
80 OneMinusConstantColor = 0x8002,
81 OneMinusConstantAlpha = 0x8004,
82 OneMinusSource1Alpha,
83 OneMinusSource1Color,
84 OneMinusSource1Color0 = OneMinusSource1Color // ### Qt 6: Remove
85 };
86 Q_ENUM(Blending) // LCOV_EXCL_LINE
87
88 explicit QBlendEquationArguments(Qt3DCore::QNode *parent = nullptr);
89 ~QBlendEquationArguments();
90
91 Blending sourceRgb() const;
92 Blending destinationRgb() const;
93 Blending sourceAlpha() const;
94 Blending destinationAlpha() const;
95 int bufferIndex() const;
96
97public Q_SLOTS:
98 void setSourceRgb(Blending sourceRgb);
99 void setDestinationRgb(Blending destinationRgb);
100 void setSourceAlpha(Blending sourceAlpha);
101 void setDestinationAlpha(Blending destinationAlpha);
102 void setSourceRgba(Blending sourceRgba);
103 void setDestinationRgba(Blending destinationRgba);
104 void setBufferIndex(int index);
105
106Q_SIGNALS:
107 void sourceRgbChanged(Blending sourceRgb);
108 void sourceAlphaChanged(Blending sourceAlpha);
109 void destinationRgbChanged(Blending destinationRgb);
110 void destinationAlphaChanged(Blending destinationAlpha);
111 void sourceRgbaChanged(Blending sourceRgba);
112 void destinationRgbaChanged(Blending destinationRgba);
113 void bufferIndexChanged(int index);
114
115protected:
116 explicit QBlendEquationArguments(QBlendEquationArgumentsPrivate &dd, Qt3DCore::QNode *parent = nullptr);
117
118private:
119 Q_DECLARE_PRIVATE(QBlendEquationArguments)
120 Qt3DCore::QNodeCreatedChangeBasePtr createNodeCreationChange() const override;
121};
122
123} // namespace Qt3DRender
124
125QT_END_NAMESPACE
126
127#endif // QT3DRENDER_QBLENDEQUATIONARGUMENTS_H
128