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 isTransmissionEnabled() = 0;
48 virtual bool hasLighting() = 0;
49 virtual bool usesCustomSkinning() = 0;
50 virtual bool usesCustomMorphing() = 0;
51 virtual QSSGRenderDefaultMaterial::MaterialSpecularModel specularModel() = 0;
52 virtual QSSGRenderDefaultMaterial::MaterialAlphaMode alphaMode() = 0;
53 virtual QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorRedMask() = 0;
54 virtual QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorGreenMask() = 0;
55 virtual QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorBlueMask() = 0;
56 virtual QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorAlphaMask() = 0;
57
58 virtual QSSGRenderImage *iblProbe() = 0;
59 virtual QVector3D emissiveColor() = 0;
60 virtual QVector4D color() = 0;
61 virtual QVector3D specularTint() = 0;
62 virtual float ior() = 0;
63 virtual float fresnelScale() = 0;
64 virtual float fresnelBias() = 0;
65 virtual float fresnelPower() = 0;
66 virtual float clearcoatFresnelScale() = 0;
67 virtual float clearcoatFresnelBias() = 0;
68 virtual float clearcoatFresnelPower() = 0;
69 virtual float metalnessAmount() = 0;
70 virtual float specularAmount() = 0;
71 virtual float specularRoughness() = 0;
72 virtual float bumpAmount() = 0;
73 virtual float translucentFallOff() = 0;
74 virtual float diffuseLightWrap() = 0;
75 virtual float occlusionAmount() = 0;
76 virtual float alphaCutOff() = 0;
77 virtual float pointSize() = 0;
78 virtual float lineWidth() = 0;
79 virtual float heightAmount() = 0;
80 virtual float minHeightSamples() = 0;
81 virtual float maxHeightSamples() = 0;
82 virtual float clearcoatAmount() = 0;
83 virtual float clearcoatRoughnessAmount() = 0;
84 virtual float clearcoatNormalStrength() = 0;
85 virtual float transmissionFactor() = 0;
86 virtual float thicknessFactor() = 0;
87 virtual float attenuationDistance() = 0;
88 virtual QVector3D attenuationColor() = 0;
89
90 virtual bool isUnshaded();
91 virtual bool hasCustomShaderSnippet(QSSGShaderCache::ShaderType type);
92 virtual QByteArray customShaderSnippet(QSSGShaderCache::ShaderType type,
93 QSSGShaderLibraryManager &shaderLibraryManager,
94 bool multiViewCompatible);
95 virtual bool hasCustomShaderFunction(QSSGShaderCache::ShaderType shaderType,
96 const QByteArray &funcName,
97 QSSGShaderLibraryManager &shaderLibraryManager);
98 virtual void setCustomPropertyUniforms(char *ubufData,
99 QSSGRhiShaderPipeline &shaderPipeline,
100 const QSSGRenderContextInterface &context);
101 virtual bool usesSharedVariables();
102};
103
104struct Q_QUICK3DRUNTIMERENDER_EXPORT QSSGShaderDefaultMaterialAdapter final : public QSSGShaderMaterialAdapter
105{
106 QSSGShaderDefaultMaterialAdapter(const QSSGRenderDefaultMaterial &material);
107
108 bool isPrincipled() override;
109 bool isSpecularGlossy() override;
110 bool isMetalnessEnabled() override;
111 bool isSpecularEnabled() override;
112 bool isVertexColorsEnabled() override;
113 bool isVertexColorsMaskEnabled() override;
114 bool isInvertOpacityMapValue() override;
115 bool isBaseColorSingleChannelEnabled() override;
116 bool isSpecularAmountSingleChannelEnabled() override;
117 bool isEmissiveSingleChannelEnabled() override;
118 bool isClearcoatEnabled() override;
119 bool isTransmissionEnabled() override;
120 bool isFresnelScaleBiasEnabled() override;
121 bool isClearcoatFresnelScaleBiasEnabled() override;
122 bool hasLighting() override;
123 bool usesCustomSkinning() override;
124 bool usesCustomMorphing() override;
125 QSSGRenderDefaultMaterial::MaterialSpecularModel specularModel() override;
126 QSSGRenderDefaultMaterial::MaterialAlphaMode alphaMode() override;
127 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorRedMask() override;
128 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorGreenMask() override;
129 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorBlueMask() override;
130 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorAlphaMask() override;
131
132 QSSGRenderImage *iblProbe() override;
133 QVector3D emissiveColor() override;
134 QVector4D color() override;
135 QVector3D specularTint() override;
136 float ior() override;
137 float fresnelScale() override;
138 float fresnelBias() override;
139 float fresnelPower() override;
140 float clearcoatFresnelScale() override;
141 float clearcoatFresnelBias() override;
142 float clearcoatFresnelPower() override;
143 float metalnessAmount() override;
144 float specularAmount() override;
145 float specularRoughness() override;
146 float bumpAmount() override;
147 float translucentFallOff() override;
148 float diffuseLightWrap() override;
149 float occlusionAmount() override;
150 float alphaCutOff() override;
151 float pointSize() override;
152 float lineWidth() override;
153 float heightAmount() override;
154 float minHeightSamples() override;
155 float maxHeightSamples() override;
156 float clearcoatAmount() override;
157 float clearcoatRoughnessAmount() override;
158 float clearcoatNormalStrength() override;
159 float transmissionFactor() override;
160 float thicknessFactor() override;
161 float attenuationDistance() override;
162 QVector3D attenuationColor() override;
163
164private:
165 const QSSGRenderDefaultMaterial &m_material;
166};
167
168struct Q_QUICK3DRUNTIMERENDER_EXPORT QSSGShaderCustomMaterialAdapter final : public QSSGShaderMaterialAdapter
169{
170 QSSGShaderCustomMaterialAdapter(const QSSGRenderCustomMaterial &material);
171
172 bool isPrincipled() override;
173 bool isSpecularGlossy() override;
174 bool isMetalnessEnabled() override;
175 bool isSpecularEnabled() override;
176 bool isVertexColorsEnabled() override;
177 bool isVertexColorsMaskEnabled() override;
178 bool isInvertOpacityMapValue() override;
179 bool isBaseColorSingleChannelEnabled() override;
180 bool isSpecularAmountSingleChannelEnabled() override;
181 bool isEmissiveSingleChannelEnabled() override;
182 bool isClearcoatEnabled() override;
183 bool isTransmissionEnabled() override;
184 bool isFresnelScaleBiasEnabled() override;
185 bool isClearcoatFresnelScaleBiasEnabled() override;
186 bool hasLighting() override;
187 bool usesCustomSkinning() override;
188 bool usesCustomMorphing() override;
189 QSSGRenderDefaultMaterial::MaterialSpecularModel specularModel() override;
190 QSSGRenderDefaultMaterial::MaterialAlphaMode alphaMode() override;
191 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorRedMask() override;
192 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorGreenMask() override;
193 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorBlueMask() override;
194 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorAlphaMask() override;
195
196 QSSGRenderImage *iblProbe() override;
197 QVector3D emissiveColor() override;
198 QVector4D color() override;
199 QVector3D specularTint() override;
200 float ior() override;
201 float fresnelScale() override;
202 float fresnelBias() override;
203 float fresnelPower() override;
204 float clearcoatFresnelScale() override;
205 float clearcoatFresnelBias() override;
206 float clearcoatFresnelPower() override;
207 float metalnessAmount() override;
208 float specularAmount() override;
209 float specularRoughness() override;
210 float bumpAmount() override;
211 float translucentFallOff() override;
212 float diffuseLightWrap() override;
213 float occlusionAmount() override;
214 float alphaCutOff() override;
215 float pointSize() override;
216 float lineWidth() override;
217 float heightAmount() override;
218 float minHeightSamples() override;
219 float maxHeightSamples() override;
220 float clearcoatAmount() override;
221 float clearcoatRoughnessAmount() override;
222 float clearcoatNormalStrength() override;
223 float transmissionFactor() override;
224 float thicknessFactor() override;
225 float attenuationDistance() override;
226 QVector3D attenuationColor() override;
227
228 bool isUnshaded() override;
229 bool hasCustomShaderSnippet(QSSGShaderCache::ShaderType type) override;
230 QByteArray customShaderSnippet(QSSGShaderCache::ShaderType type,
231 QSSGShaderLibraryManager &shaderLibraryManager,
232 bool multiViewCompatible) override;
233 bool hasCustomShaderFunction(QSSGShaderCache::ShaderType shaderType,
234 const QByteArray &funcName,
235 QSSGShaderLibraryManager &shaderLibraryManager) override;
236 void setCustomPropertyUniforms(char *ubufData,
237 QSSGRhiShaderPipeline &shaderPipeline,
238 const QSSGRenderContextInterface &context) override;
239 bool usesSharedVariables() override;
240
241 using StringPair = QPair<QByteArray, QByteArray>;
242 using StringPairList = QVarLengthArray<StringPair, 16>;
243 using ShaderCodeAndMetaData = QPair<QByteArray, QSSGCustomShaderMetaData>;
244
245 struct CustomShaderPrepWorkData {
246 QByteArrayList inputs;
247 QByteArrayList outputs;
248 };
249
250 static void beginPrepareCustomShader(CustomShaderPrepWorkData *workData,
251 ShaderCodeAndMetaData *codeAndMetaData,
252 const QByteArray &shaderCode,
253 QSSGShaderCache::ShaderType type,
254 bool multiViewCompatible);
255
256 static void finishPrepareCustomShader(QByteArray *dst,
257 const CustomShaderPrepWorkData &workData,
258 const ShaderCodeAndMetaData &codeAndMetaData,
259 QSSGShaderCache::ShaderType type,
260 bool multiViewCompatible,
261 const StringPairList &baseUniforms,
262 const StringPairList &baseInputs,
263 const StringPairList &baseOutputs,
264 const StringPairList &multiViewDependentSamplers,
265 const StringPairList &multiViewDependentUniforms);
266
267private:
268 const QSSGRenderCustomMaterial &m_material;
269};
270
277
278namespace QtQuick3DEditorHelpers {
279// NOTE: Returns a copy of the actual list, cache as needed!
280namespace CustomMaterial {
282}
283}
284
285QT_END_NAMESPACE
286
287#endif