31 static QSSGShaderMaterialAdapter *create(
const QSSGRenderGraphObject &materialNode);
32 virtual ~QSSGShaderMaterialAdapter();
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;
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;
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();
117struct Q_QUICK3DRUNTIMERENDER_EXPORT QSSGShaderDefaultMaterialAdapter final :
public QSSGShaderMaterialAdapter
119 QSSGShaderDefaultMaterialAdapter(
const QSSGRenderDefaultMaterial &material);
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;
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;
191 const QSSGRenderDefaultMaterial &m_material;
194struct Q_QUICK3DRUNTIMERENDER_EXPORT QSSGShaderCustomMaterialAdapter final :
public QSSGShaderMaterialAdapter
196 QSSGShaderCustomMaterialAdapter(
const QSSGRenderCustomMaterial &material);
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;
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;
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;
280 using StringPair = QPair<QByteArray, QByteArray>;
281 using StringPairList = QVarLengthArray<StringPair, 16>;
282 using ShaderCodeAndMetaData = QPair<QByteArray, QSSGCustomShaderMetaData>;
284 struct CustomShaderPrepWorkData {
285 QByteArrayList inputs;
286 QByteArrayList outputs;
289 static void beginPrepareCustomShader(CustomShaderPrepWorkData *workData,
290 ShaderCodeAndMetaData *codeAndMetaData,
291 const QByteArray &shaderCode,
292 QSSGShaderCache::ShaderType type,
293 bool multiViewCompatible);
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);
307 const QSSGRenderCustomMaterial &m_material;