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