29 static QSSGShaderMaterialAdapter *create(
const QSSGRenderGraphObject &materialNode);
30 virtual ~QSSGShaderMaterialAdapter();
32 virtual bool isPrincipled() = 0;
33 virtual bool isSpecularGlossy() = 0;
34 virtual bool isMetalnessEnabled() = 0;
35 virtual bool isSpecularEnabled() = 0;
36 virtual bool isVertexColorsEnabled() = 0;
37 virtual bool isVertexColorsMaskEnabled() = 0;
38 virtual bool isInvertOpacityMapValue() = 0;
39 virtual bool isBaseColorSingleChannelEnabled() = 0;
40 virtual bool isSpecularAmountSingleChannelEnabled() = 0;
41 virtual bool isEmissiveSingleChannelEnabled() = 0;
42 virtual bool isFresnelScaleBiasEnabled() = 0;
43 virtual bool isClearcoatFresnelScaleBiasEnabled() = 0;
44 virtual bool isClearcoatEnabled() = 0;
45 virtual bool isTransmissionEnabled() = 0;
46 virtual bool hasLighting() = 0;
47 virtual bool usesCustomSkinning() = 0;
48 virtual bool usesCustomMorphing() = 0;
49 virtual QSSGRenderDefaultMaterial::MaterialSpecularModel specularModel() = 0;
50 virtual QSSGRenderDefaultMaterial::MaterialAlphaMode alphaMode() = 0;
51 virtual QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorRedMask() = 0;
52 virtual QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorGreenMask() = 0;
53 virtual QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorBlueMask() = 0;
54 virtual QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorAlphaMask() = 0;
56 virtual QSSGRenderImage *iblProbe() = 0;
57 virtual QVector3D emissiveColor() = 0;
58 virtual QVector4D color() = 0;
59 virtual QVector3D specularTint() = 0;
60 virtual float ior() = 0;
61 virtual float fresnelScale() = 0;
62 virtual float fresnelBias() = 0;
63 virtual float fresnelPower() = 0;
64 virtual float clearcoatFresnelScale() = 0;
65 virtual float clearcoatFresnelBias() = 0;
66 virtual float clearcoatFresnelPower() = 0;
67 virtual float metalnessAmount() = 0;
68 virtual float specularAmount() = 0;
69 virtual float specularRoughness() = 0;
70 virtual float bumpAmount() = 0;
71 virtual float translucentFallOff() = 0;
72 virtual float diffuseLightWrap() = 0;
73 virtual float occlusionAmount() = 0;
74 virtual float alphaCutOff() = 0;
75 virtual float pointSize() = 0;
76 virtual float lineWidth() = 0;
77 virtual float heightAmount() = 0;
78 virtual float minHeightSamples() = 0;
79 virtual float maxHeightSamples() = 0;
80 virtual float clearcoatAmount() = 0;
81 virtual float clearcoatRoughnessAmount() = 0;
82 virtual float clearcoatNormalStrength() = 0;
83 virtual float transmissionFactor() = 0;
84 virtual float thicknessFactor() = 0;
85 virtual float attenuationDistance() = 0;
86 virtual QVector3D attenuationColor() = 0;
88 virtual bool isUnshaded();
89 virtual bool hasCustomShaderSnippet(QSSGShaderCache::ShaderType type);
90 virtual QByteArray customShaderSnippet(QSSGShaderCache::ShaderType type,
91 QSSGShaderLibraryManager &shaderLibraryManager,
92 bool multiViewCompatible);
93 virtual bool hasCustomShaderFunction(QSSGShaderCache::ShaderType shaderType,
94 const QByteArray &funcName,
95 QSSGShaderLibraryManager &shaderLibraryManager);
96 virtual void setCustomPropertyUniforms(
char *ubufData,
97 QSSGRhiShaderPipeline &shaderPipeline,
98 const QSSGRenderContextInterface &context);
99 virtual bool usesSharedVariables();
102struct Q_QUICK3DRUNTIMERENDER_EXPORT QSSGShaderDefaultMaterialAdapter final :
public QSSGShaderMaterialAdapter
104 QSSGShaderDefaultMaterialAdapter(
const QSSGRenderDefaultMaterial &material);
106 bool isPrincipled() override;
107 bool isSpecularGlossy() override;
108 bool isMetalnessEnabled() override;
109 bool isSpecularEnabled() override;
110 bool isVertexColorsEnabled() override;
111 bool isVertexColorsMaskEnabled() override;
112 bool isInvertOpacityMapValue() override;
113 bool isBaseColorSingleChannelEnabled() override;
114 bool isSpecularAmountSingleChannelEnabled() override;
115 bool isEmissiveSingleChannelEnabled() override;
116 bool isClearcoatEnabled() override;
117 bool isTransmissionEnabled() override;
118 bool isFresnelScaleBiasEnabled() override;
119 bool isClearcoatFresnelScaleBiasEnabled() override;
120 bool hasLighting() override;
121 bool usesCustomSkinning() override;
122 bool usesCustomMorphing() override;
123 QSSGRenderDefaultMaterial::MaterialSpecularModel specularModel() override;
124 QSSGRenderDefaultMaterial::MaterialAlphaMode alphaMode() override;
125 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorRedMask() override;
126 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorGreenMask() override;
127 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorBlueMask() override;
128 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorAlphaMask() override;
130 QSSGRenderImage *iblProbe() override;
131 QVector3D emissiveColor() override;
132 QVector4D color() override;
133 QVector3D specularTint() override;
134 float ior() override;
135 float fresnelScale() override;
136 float fresnelBias() override;
137 float fresnelPower() override;
138 float clearcoatFresnelScale() override;
139 float clearcoatFresnelBias() override;
140 float clearcoatFresnelPower() override;
141 float metalnessAmount() override;
142 float specularAmount() override;
143 float specularRoughness() override;
144 float bumpAmount() override;
145 float translucentFallOff() override;
146 float diffuseLightWrap() override;
147 float occlusionAmount() override;
148 float alphaCutOff() override;
149 float pointSize() override;
150 float lineWidth() override;
151 float heightAmount() override;
152 float minHeightSamples() override;
153 float maxHeightSamples() override;
154 float clearcoatAmount() override;
155 float clearcoatRoughnessAmount() override;
156 float clearcoatNormalStrength() override;
157 float transmissionFactor() override;
158 float thicknessFactor() override;
159 float attenuationDistance() override;
160 QVector3D attenuationColor() override;
163 const QSSGRenderDefaultMaterial &m_material;
166struct Q_QUICK3DRUNTIMERENDER_EXPORT QSSGShaderCustomMaterialAdapter final :
public QSSGShaderMaterialAdapter
168 QSSGShaderCustomMaterialAdapter(
const QSSGRenderCustomMaterial &material);
170 bool isPrincipled() override;
171 bool isSpecularGlossy() override;
172 bool isMetalnessEnabled() override;
173 bool isSpecularEnabled() override;
174 bool isVertexColorsEnabled() override;
175 bool isVertexColorsMaskEnabled() override;
176 bool isInvertOpacityMapValue() override;
177 bool isBaseColorSingleChannelEnabled() override;
178 bool isSpecularAmountSingleChannelEnabled() override;
179 bool isEmissiveSingleChannelEnabled() override;
180 bool isClearcoatEnabled() override;
181 bool isTransmissionEnabled() override;
182 bool isFresnelScaleBiasEnabled() override;
183 bool isClearcoatFresnelScaleBiasEnabled() override;
184 bool hasLighting() override;
185 bool usesCustomSkinning() override;
186 bool usesCustomMorphing() override;
187 QSSGRenderDefaultMaterial::MaterialSpecularModel specularModel() override;
188 QSSGRenderDefaultMaterial::MaterialAlphaMode alphaMode() override;
189 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorRedMask() override;
190 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorGreenMask() override;
191 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorBlueMask() override;
192 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorAlphaMask() override;
194 QSSGRenderImage *iblProbe() override;
195 QVector3D emissiveColor() override;
196 QVector4D color() override;
197 QVector3D specularTint() override;
198 float ior() override;
199 float fresnelScale() override;
200 float fresnelBias() override;
201 float fresnelPower() override;
202 float clearcoatFresnelScale() override;
203 float clearcoatFresnelBias() override;
204 float clearcoatFresnelPower() override;
205 float metalnessAmount() override;
206 float specularAmount() override;
207 float specularRoughness() override;
208 float bumpAmount() override;
209 float translucentFallOff() override;
210 float diffuseLightWrap() override;
211 float occlusionAmount() override;
212 float alphaCutOff() override;
213 float pointSize() override;
214 float lineWidth() override;
215 float heightAmount() override;
216 float minHeightSamples() override;
217 float maxHeightSamples() override;
218 float clearcoatAmount() override;
219 float clearcoatRoughnessAmount() override;
220 float clearcoatNormalStrength() override;
221 float transmissionFactor() override;
222 float thicknessFactor() override;
223 float attenuationDistance() override;
224 QVector3D attenuationColor() override;
226 bool isUnshaded() override;
227 bool hasCustomShaderSnippet(QSSGShaderCache::ShaderType type) override;
228 QByteArray customShaderSnippet(QSSGShaderCache::ShaderType type,
229 QSSGShaderLibraryManager &shaderLibraryManager,
230 bool multiViewCompatible) override;
231 bool hasCustomShaderFunction(QSSGShaderCache::ShaderType shaderType,
232 const QByteArray &funcName,
233 QSSGShaderLibraryManager &shaderLibraryManager) override;
234 void setCustomPropertyUniforms(
char *ubufData,
235 QSSGRhiShaderPipeline &shaderPipeline,
236 const QSSGRenderContextInterface &context) override;
237 bool usesSharedVariables() override;
239 using StringPair = QPair<QByteArray, QByteArray>;
240 using StringPairList = QVarLengthArray<StringPair, 16>;
241 using ShaderCodeAndMetaData = QPair<QByteArray, QSSGCustomShaderMetaData>;
243 struct CustomShaderPrepWorkData {
244 QByteArrayList inputs;
245 QByteArrayList outputs;
248 static void beginPrepareCustomShader(CustomShaderPrepWorkData *workData,
249 ShaderCodeAndMetaData *codeAndMetaData,
250 const QByteArray &shaderCode,
251 QSSGShaderCache::ShaderType type,
252 bool multiViewCompatible);
254 static void finishPrepareCustomShader(QByteArray *dst,
255 const CustomShaderPrepWorkData &workData,
256 const ShaderCodeAndMetaData &codeAndMetaData,
257 QSSGShaderCache::ShaderType type,
258 bool multiViewCompatible,
259 const StringPairList &baseUniforms,
260 const StringPairList &baseInputs,
261 const StringPairList &baseOutputs,
262 const StringPairList &multiViewDependentSamplers,
263 const StringPairList &multiViewDependentUniforms);
266 const QSSGRenderCustomMaterial &m_material;