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#include "renderstates_p.h"
6
7#include <Qt3DRender/qrenderstate.h>
8#include <Qt3DRender/qcullface.h>
9#include <Qt3DRender/qpointsize.h>
10
11#include <Qt3DRender/private/qstenciloperation_p.h>
12#include <Qt3DRender/private/qstenciltest_p.h>
13#include <Qt3DRender/qblendequationarguments.h>
14#include <Qt3DRender/qblendequation.h>
15#include <Qt3DRender/qalphatest.h>
16#include <Qt3DRender/qdepthrange.h>
17#include <Qt3DRender/qdepthtest.h>
18#include <Qt3DRender/qrastermode.h>
19#include <Qt3DRender/qfrontface.h>
20#include <Qt3DRender/qscissortest.h>
21#include <Qt3DRender/qpolygonoffset.h>
22#include <Qt3DRender/qcolormask.h>
23#include <Qt3DRender/qclipplane.h>
24#include <Qt3DRender/qstencilmask.h>
25#include <Qt3DRender/qlinewidth.h>
26
27QT_BEGIN_NAMESPACE
28
29namespace Qt3DRender {
30namespace Render {
31
32void RenderStateImpl::updateProperties(const QRenderState *)
33{
34}
35
36void BlendEquationArguments::updateProperties(const QRenderState *node)
37{
38 const QBlendEquationArguments *args = static_cast<const QBlendEquationArguments *>(node);
39
40 std::get<0>(t&: m_values) = args->sourceRgb();
41 std::get<1>(t&: m_values) = args->destinationRgb();
42 std::get<2>(t&: m_values) = args->sourceAlpha();
43 std::get<3>(t&: m_values) = args->destinationAlpha();
44 std::get<4>(t&: m_values) = args->isEnabled();
45 std::get<5>(t&: m_values) = args->bufferIndex();
46}
47
48void BlendEquation::updateProperties(const QRenderState *node)
49{
50 const QBlendEquation *equation = static_cast<const QBlendEquation *>(node);
51 std::get<0>(t&: m_values) = equation->blendFunction();
52}
53
54void AlphaFunc::updateProperties(const QRenderState *node)
55{
56 const QAlphaTest *alphaTest = static_cast<const QAlphaTest *>(node);
57 std::get<0>(t&: m_values) = alphaTest->alphaFunction();
58 std::get<1>(t&: m_values) = alphaTest->referenceValue();
59}
60
61void MSAAEnabled::updateProperties(const QRenderState *node)
62{
63 std::get<0>(t&: m_values) = node->isEnabled();
64}
65
66void DepthRange::updateProperties(const QRenderState *node)
67{
68 const QDepthRange *depthRange = static_cast<const QDepthRange *>(node);
69
70 std::get<0>(t&: m_values) = depthRange->nearValue();
71 std::get<1>(t&: m_values) = depthRange->farValue();
72}
73
74void DepthTest::updateProperties(const QRenderState *node)
75{
76 const QDepthTest *depthTest = static_cast<const QDepthTest *>(node);
77
78 std::get<0>(t&: m_values) = depthTest->depthFunction();
79}
80
81void RasterMode::updateProperties(const QRenderState *node)
82{
83 const QRasterMode *rasterMode = static_cast<const QRasterMode *>(node);
84
85 std::get<0>(t&: m_values) = rasterMode->faceMode();
86 std::get<1>(t&: m_values) = rasterMode->rasterMode();
87}
88
89void CullFace::updateProperties(const QRenderState *node)
90{
91 const QCullFace *cullFace = static_cast<const QCullFace *>(node);
92
93 std::get<0>(t&: m_values) = cullFace->mode();
94}
95
96void FrontFace::updateProperties(const QRenderState *node)
97{
98 const QFrontFace *frontFace = static_cast<const QFrontFace *>(node);
99
100 std::get<0>(t&: m_values) = frontFace->direction();
101}
102
103void NoDepthMask::updateProperties(const QRenderState *node)
104{
105 std::get<0>(t&: m_values) = !node->isEnabled();
106}
107
108void ScissorTest::updateProperties(const QRenderState *node)
109{
110 const QScissorTest *scissorTest = static_cast<const QScissorTest *>(node);
111
112 std::get<0>(t&: m_values) = scissorTest->left();
113 std::get<1>(t&: m_values) = scissorTest->bottom();
114 std::get<2>(t&: m_values) = scissorTest->width();
115 std::get<3>(t&: m_values) = scissorTest->height();
116}
117
118void StencilTest::updateProperties(const QRenderState *node)
119{
120 const QStencilTest *stencilTest = static_cast<const QStencilTest *>(node);
121 std::get<0>(t&: m_values) = stencilTest->front()->stencilFunction();
122 std::get<1>(t&: m_values) = stencilTest->front()->referenceValue();
123 std::get<2>(t&: m_values) = stencilTest->front()->comparisonMask();
124 std::get<3>(t&: m_values) = stencilTest->back()->stencilFunction();
125 std::get<4>(t&: m_values) = stencilTest->back()->referenceValue();
126 std::get<5>(t&: m_values) = stencilTest->back()->comparisonMask();
127}
128
129void PointSize::updateProperties(const QRenderState *node)
130{
131 const QPointSize *pointSize = static_cast<const QPointSize *>(node);
132
133 std::get<0>(t&: m_values) = (pointSize->sizeMode() == QPointSize::Programmable);
134 std::get<1>(t&: m_values) = pointSize->value();
135}
136
137void PolygonOffset::updateProperties(const QRenderState *node)
138{
139 const QPolygonOffset *offset = static_cast<const QPolygonOffset *>(node);
140
141 std::get<0>(t&: m_values) = offset->scaleFactor();
142 std::get<1>(t&: m_values) = offset->depthSteps();
143}
144
145void ColorMask::updateProperties(const QRenderState *node)
146{
147 const QColorMask *colorMask = static_cast<const QColorMask *>(node);
148
149 std::get<0>(t&: m_values) = colorMask->isRedMasked();
150 std::get<1>(t&: m_values) = colorMask->isGreenMasked();
151 std::get<2>(t&: m_values) = colorMask->isBlueMasked();
152 std::get<3>(t&: m_values) = colorMask->isAlphaMasked();
153}
154
155void ClipPlane::updateProperties(const QRenderState *node)
156{
157 const QClipPlane *clipPlane = static_cast<const QClipPlane *>(node);
158
159 std::get<0>(t&: m_values) = clipPlane->planeIndex();
160 std::get<1>(t&: m_values) = clipPlane->normal();
161 std::get<2>(t&: m_values) = clipPlane->distance();
162}
163
164void StencilOp::updateProperties(const QRenderState *node)
165{
166 const QStencilOperation *stencilOp = static_cast<const QStencilOperation *>(node);
167
168 std::get<0>(t&: m_values) = stencilOp->front()->stencilTestFailureOperation();
169 std::get<1>(t&: m_values) = stencilOp->front()->depthTestFailureOperation();
170 std::get<2>(t&: m_values) = stencilOp->front()->allTestsPassOperation();
171 std::get<3>(t&: m_values) = stencilOp->back()->stencilTestFailureOperation();
172 std::get<4>(t&: m_values) = stencilOp->back()->depthTestFailureOperation();
173 std::get<5>(t&: m_values) = stencilOp->back()->allTestsPassOperation();
174}
175
176void StencilMask::updateProperties(const QRenderState *node)
177{
178 const QStencilMask *stencilMask = static_cast<const QStencilMask *>(node);
179 std::get<0>(t&: m_values) = stencilMask->frontOutputMask();
180 std::get<1>(t&: m_values) = stencilMask->backOutputMask();
181}
182
183void LineWidth::updateProperties(const QRenderState *node)
184{
185 const QLineWidth *lineWidth = static_cast<const QLineWidth *>(node);
186 std::get<0>(t&: m_values) = lineWidth->value();
187 std::get<1>(t&: m_values) = lineWidth->smooth();
188}
189
190} // namespace Render
191} // namespace Qt3DRender
192
193QT_END_NAMESPACE
194

source code of qt3d/src/render/renderstates/renderstates.cpp