Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qssgshadermaterialadapter_p.h
Go to the documentation of this file.
1// Copyright (C) 2008-2012 NVIDIA Corporation.
2// Copyright (C) 2019 The Qt Company Ltd.
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
4// Qt-Security score:significant reason:default
5
6
7#ifndef QSSG_SHADER_MATERIAL_ADAPTER_H
8#define QSSG_SHADER_MATERIAL_ADAPTER_H
9
10//
11// W A R N I N G
12// -------------
13//
14// This file is not part of the Qt API. It exists purely as an
15// implementation detail. This header file may change from version to
16// version without notice, or even be removed.
17//
18// We mean it.
19//
20
21#include <QtQuick3DRuntimeRender/private/qssgrendershadercodegenerator_p.h>
22#include <QtQuick3DRuntimeRender/private/qssgrendershadowmap_p.h>
23#include <QtQuick3DRuntimeRender/private/qssgrenderlight_p.h>
24#include <QtQuick3DRuntimeRender/private/qssgrenderableimage_p.h>
25#include <QtQuick3DRuntimeRender/private/qssgrendershaderlibrarymanager_p.h>
26
28
30{
31 static QSSGShaderMaterialAdapter *create(const QSSGRenderGraphObject &materialNode);
32 virtual ~QSSGShaderMaterialAdapter();
33
34 virtual bool isPrincipled() = 0;
35 virtual bool isSpecularGlossy() = 0;
36 virtual bool isMetalnessEnabled() = 0;
37 virtual bool isSpecularEnabled() = 0;
38 virtual bool isVertexColorsEnabled() = 0;
39 virtual bool isVertexColorsMaskEnabled() = 0;
40 virtual bool isInvertOpacityMapValue() = 0;
41 virtual bool isBaseColorSingleChannelEnabled() = 0;
42 virtual bool isSpecularAmountSingleChannelEnabled() = 0;
43 virtual bool isEmissiveSingleChannelEnabled() = 0;
44 virtual bool isFresnelScaleBiasEnabled() = 0;
45 virtual bool isClearcoatFresnelScaleBiasEnabled() = 0;
46 virtual bool isClearcoatEnabled() = 0;
47 virtual bool isSheenEnabled() = 0;
48 virtual bool isAnisotropyEnabled() = 0;
49 virtual bool isIridescenceEnabled() = 0;
50 virtual bool isDispersionEnabled() = 0;
51 virtual bool isTransmissionEnabled() = 0;
52 virtual bool hasLighting() = 0;
53 virtual bool usesCustomSkinning() = 0;
54 virtual bool usesCustomMorphing() = 0;
55 virtual QSSGRenderDefaultMaterial::MaterialSpecularModel specularModel() = 0;
56 virtual QSSGRenderDefaultMaterial::MaterialAlphaMode alphaMode() = 0;
57 virtual QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorRedMask() = 0;
58 virtual QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorGreenMask() = 0;
59 virtual QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorBlueMask() = 0;
60 virtual QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorAlphaMask() = 0;
61
62 virtual QSSGRenderImage *iblProbe() = 0;
63 virtual QVector3D emissiveColor() = 0;
64 virtual QVector4D color() = 0;
65 virtual QVector3D specularTint() = 0;
66 virtual float ior() = 0;
67 virtual float fresnelScale() = 0;
68 virtual float fresnelBias() = 0;
69 virtual float fresnelPower() = 0;
70 virtual float clearcoatFresnelScale() = 0;
71 virtual float clearcoatFresnelBias() = 0;
72 virtual float clearcoatFresnelPower() = 0;
73 virtual float metalnessAmount() = 0;
74 virtual float specularAmount() = 0;
75 virtual float specularRoughness() = 0;
76 virtual float bumpAmount() = 0;
77 virtual float translucentFallOff() = 0;
78 virtual float diffuseLightWrap() = 0;
79 virtual float occlusionAmount() = 0;
80 virtual float alphaCutOff() = 0;
81 virtual float pointSize() = 0;
82 virtual float lineWidth() = 0;
83 virtual float heightAmount() = 0;
84 virtual float minHeightSamples() = 0;
85 virtual float maxHeightSamples() = 0;
86 virtual float clearcoatAmount() = 0;
87 virtual float clearcoatRoughnessAmount() = 0;
88 virtual float clearcoatNormalStrength() = 0;
89 virtual QVector3D sheenColor() = 0;
90 virtual float sheenRoughness() = 0;
91 virtual float anisotropyStrength() = 0;
92 virtual float anisotropyRotation() = 0;
93 virtual float iridescenceFactor() = 0;
94 virtual float iridescenceIndexOfRefraction() = 0;
95 virtual float iridescenceThicknessMinimum() = 0;
96 virtual float iridescenceThicknessMaximum() = 0;
97 virtual float dispersion() = 0;
98 virtual float transmissionFactor() = 0;
99 virtual float thicknessFactor() = 0;
100 virtual float attenuationDistance() = 0;
101 virtual QVector3D attenuationColor() = 0;
102
103 virtual bool isUnshaded();
104 virtual bool hasCustomShaderSnippet(QSSGShaderCache::ShaderType type);
105 virtual QByteArray customShaderSnippet(QSSGShaderCache::ShaderType type,
106 QSSGShaderLibraryManager &shaderLibraryManager,
107 bool multiViewCompatible);
108 virtual bool hasCustomShaderFunction(QSSGShaderCache::ShaderType shaderType,
109 const QByteArray &funcName,
110 QSSGShaderLibraryManager &shaderLibraryManager);
111 virtual void setCustomPropertyUniforms(char *ubufData,
112 QSSGRhiShaderPipeline &shaderPipeline,
113 const QSSGRenderContextInterface &context);
114 virtual bool usesSharedVariables();
115};
116
117struct Q_QUICK3DRUNTIMERENDER_EXPORT QSSGShaderDefaultMaterialAdapter final : public QSSGShaderMaterialAdapter
118{
119 QSSGShaderDefaultMaterialAdapter(const QSSGRenderDefaultMaterial &material);
120
121 bool isPrincipled() override;
122 bool isSpecularGlossy() override;
123 bool isMetalnessEnabled() override;
124 bool isSpecularEnabled() override;
125 bool isVertexColorsEnabled() override;
126 bool isVertexColorsMaskEnabled() override;
127 bool isInvertOpacityMapValue() override;
128 bool isBaseColorSingleChannelEnabled() override;
129 bool isSpecularAmountSingleChannelEnabled() override;
130 bool isEmissiveSingleChannelEnabled() override;
131 bool isClearcoatEnabled() override;
132 bool isSheenEnabled() override;
133 bool isAnisotropyEnabled() override;
134 bool isIridescenceEnabled() override;
135 bool isDispersionEnabled() override;
136 bool isTransmissionEnabled() override;
137 bool isFresnelScaleBiasEnabled() override;
138 bool isClearcoatFresnelScaleBiasEnabled() override;
139 bool hasLighting() override;
140 bool usesCustomSkinning() override;
141 bool usesCustomMorphing() override;
142 QSSGRenderDefaultMaterial::MaterialSpecularModel specularModel() override;
143 QSSGRenderDefaultMaterial::MaterialAlphaMode alphaMode() override;
144 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorRedMask() override;
145 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorGreenMask() override;
146 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorBlueMask() override;
147 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorAlphaMask() override;
148
149 QSSGRenderImage *iblProbe() override;
150 QVector3D emissiveColor() override;
151 QVector4D color() override;
152 QVector3D specularTint() override;
153 float ior() override;
154 float fresnelScale() override;
155 float fresnelBias() override;
156 float fresnelPower() override;
157 float clearcoatFresnelScale() override;
158 float clearcoatFresnelBias() override;
159 float clearcoatFresnelPower() override;
160 float metalnessAmount() override;
161 float specularAmount() override;
162 float specularRoughness() override;
163 float bumpAmount() override;
164 float translucentFallOff() override;
165 float diffuseLightWrap() override;
166 float occlusionAmount() override;
167 float alphaCutOff() override;
168 float pointSize() override;
169 float lineWidth() override;
170 float heightAmount() override;
171 float minHeightSamples() override;
172 float maxHeightSamples() override;
173 float clearcoatAmount() override;
174 float clearcoatRoughnessAmount() override;
175 float clearcoatNormalStrength() override;
176 QVector3D sheenColor() override;
177 float sheenRoughness() override;
178 float anisotropyStrength() override;
179 float anisotropyRotation() override;
180 float iridescenceFactor() override;
181 float iridescenceIndexOfRefraction() override;
182 float iridescenceThicknessMinimum() override;
183 float iridescenceThicknessMaximum() override;
184 float dispersion() override;
185 float transmissionFactor() override;
186 float thicknessFactor() override;
187 float attenuationDistance() override;
188 QVector3D attenuationColor() override;
189
190private:
191 const QSSGRenderDefaultMaterial &m_material;
192};
193
194struct Q_QUICK3DRUNTIMERENDER_EXPORT QSSGShaderCustomMaterialAdapter final : public QSSGShaderMaterialAdapter
195{
196 QSSGShaderCustomMaterialAdapter(const QSSGRenderCustomMaterial &material);
197
198 bool isPrincipled() override;
199 bool isSpecularGlossy() override;
200 bool isMetalnessEnabled() override;
201 bool isSpecularEnabled() override;
202 bool isVertexColorsEnabled() override;
203 bool isVertexColorsMaskEnabled() override;
204 bool isInvertOpacityMapValue() override;
205 bool isBaseColorSingleChannelEnabled() override;
206 bool isSpecularAmountSingleChannelEnabled() override;
207 bool isEmissiveSingleChannelEnabled() override;
208 bool isClearcoatEnabled() override;
209 bool isSheenEnabled() override;
210 bool isAnisotropyEnabled() override;
211 bool isIridescenceEnabled() override;
212 bool isDispersionEnabled() override;
213 bool isTransmissionEnabled() override;
214 bool isFresnelScaleBiasEnabled() override;
215 bool isClearcoatFresnelScaleBiasEnabled() override;
216 bool hasLighting() override;
217 bool usesCustomSkinning() override;
218 bool usesCustomMorphing() override;
219 QSSGRenderDefaultMaterial::MaterialSpecularModel specularModel() override;
220 QSSGRenderDefaultMaterial::MaterialAlphaMode alphaMode() override;
221 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorRedMask() override;
222 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorGreenMask() override;
223 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorBlueMask() override;
224 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorAlphaMask() override;
225
226 QSSGRenderImage *iblProbe() override;
227 QVector3D emissiveColor() override;
228 QVector4D color() override;
229 QVector3D specularTint() override;
230 float ior() override;
231 float fresnelScale() override;
232 float fresnelBias() override;
233 float fresnelPower() override;
234 float clearcoatFresnelScale() override;
235 float clearcoatFresnelBias() override;
236 float clearcoatFresnelPower() override;
237 float metalnessAmount() override;
238 float specularAmount() override;
239 float specularRoughness() override;
240 float bumpAmount() override;
241 float translucentFallOff() override;
242 float diffuseLightWrap() override;
243 float occlusionAmount() override;
244 float alphaCutOff() override;
245 float pointSize() override;
246 float lineWidth() override;
247 float heightAmount() override;
248 float minHeightSamples() override;
249 float maxHeightSamples() override;
250 float clearcoatAmount() override;
251 float clearcoatRoughnessAmount() override;
252 float clearcoatNormalStrength() override;
253 QVector3D sheenColor() override;
254 float sheenRoughness() override;
255 float anisotropyStrength() override;
256 float anisotropyRotation() override;
257 float iridescenceFactor() override;
258 float iridescenceIndexOfRefraction() override;
259 float iridescenceThicknessMinimum() override;
260 float iridescenceThicknessMaximum() override;
261 float dispersion() override;
262 float transmissionFactor() override;
263 float thicknessFactor() override;
264 float attenuationDistance() override;
265 QVector3D attenuationColor() override;
266
267 bool isUnshaded() override;
268 bool hasCustomShaderSnippet(QSSGShaderCache::ShaderType type) override;
269 QByteArray customShaderSnippet(QSSGShaderCache::ShaderType type,
270 QSSGShaderLibraryManager &shaderLibraryManager,
271 bool multiViewCompatible) override;
272 bool hasCustomShaderFunction(QSSGShaderCache::ShaderType shaderType,
273 const QByteArray &funcName,
274 QSSGShaderLibraryManager &shaderLibraryManager) override;
275 void setCustomPropertyUniforms(char *ubufData,
276 QSSGRhiShaderPipeline &shaderPipeline,
277 const QSSGRenderContextInterface &context) override;
278 bool usesSharedVariables() override;
279
280 using StringPair = QPair<QByteArray, QByteArray>;
281 using StringPairList = QVarLengthArray<StringPair, 16>;
282 using ShaderCodeAndMetaData = QPair<QByteArray, QSSGCustomShaderMetaData>;
283
284 struct CustomShaderPrepWorkData {
285 QByteArrayList inputs;
286 QByteArrayList outputs;
287 };
288
289 static void beginPrepareCustomShader(CustomShaderPrepWorkData *workData,
290 ShaderCodeAndMetaData *codeAndMetaData,
291 const QByteArray &shaderCode,
292 QSSGShaderCache::ShaderType type,
293 bool multiViewCompatible);
294
295 static void finishPrepareCustomShader(QByteArray *dst,
296 const CustomShaderPrepWorkData &workData,
297 const ShaderCodeAndMetaData &codeAndMetaData,
298 QSSGShaderCache::ShaderType type,
299 bool multiViewCompatible,
300 const StringPairList &baseUniforms,
301 const StringPairList &baseInputs,
302 const StringPairList &baseOutputs,
303 const StringPairList &multiViewDependentSamplers,
304 const StringPairList &multiViewDependentUniforms);
305
306private:
307 const QSSGRenderCustomMaterial &m_material;
308};
309
316
317namespace QtQuick3DEditorHelpers {
318// NOTE: Returns a copy of the actual list, cache as needed!
319namespace CustomMaterial {
321}
322}
323
324QT_END_NAMESPACE
325
326#endif