Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
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
5#ifndef QSSG_SHADER_MATERIAL_ADAPTER_H
6#define QSSG_SHADER_MATERIAL_ADAPTER_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <QtQuick3DRuntimeRender/private/qssgrendershadercodegenerator_p.h>
20#include <QtQuick3DRuntimeRender/private/qssgrendershadowmap_p.h>
21#include <QtQuick3DRuntimeRender/private/qssgrenderlight_p.h>
22#include <QtQuick3DRuntimeRender/private/qssgrenderableimage_p.h>
23#include <QtQuick3DRuntimeRender/private/qssgrendershaderlibrarymanager_p.h>
24
26
27struct Q_QUICK3DRUNTIMERENDER_EXPORT QSSGShaderMaterialAdapter
28{
29 static QSSGShaderMaterialAdapter *create(const QSSGRenderGraphObject &materialNode);
31
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;
42 virtual bool isFresnelScaleBiasEnabled() = 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;
51 virtual QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorRedMask() = 0;
52 virtual QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorGreenMask() = 0;
53 virtual QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorBlueMask() = 0;
54 virtual QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorAlphaMask() = 0;
55
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;
87
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,
99 virtual bool usesSharedVariables();
100};
101
102struct Q_QUICK3DRUNTIMERENDER_EXPORT QSSGShaderDefaultMaterialAdapter final : public QSSGShaderMaterialAdapter
103{
105
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;
125 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorRedMask() override;
126 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorGreenMask() override;
127 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorBlueMask() override;
128 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorAlphaMask() override;
129
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;
161
162private:
163 const QSSGRenderDefaultMaterial &m_material;
164};
165
166struct Q_QUICK3DRUNTIMERENDER_EXPORT QSSGShaderCustomMaterialAdapter final : public QSSGShaderMaterialAdapter
167{
169
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;
189 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorRedMask() override;
190 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorGreenMask() override;
191 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorBlueMask() override;
192 QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorAlphaMask() override;
193
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;
225
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;
238
239 using StringPair = QPair<QByteArray, QByteArray>;
240 using StringPairList = QVarLengthArray<StringPair, 16>;
241 using ShaderCodeAndMetaData = QPair<QByteArray, QSSGCustomShaderMetaData>;
243 const QByteArray &shaderCode,
245 const StringPairList &baseUniforms,
246 const StringPairList &baseInputs = StringPairList(),
247 const StringPairList &baseOutputs = StringPairList(),
248 bool multiViewCompatible = false);
249
250private:
251 const QSSGRenderCustomMaterial &m_material;
252};
253
260
261namespace QtQuick3DEditorHelpers {
262// NOTE: Returns a copy of the actual list, cache as needed!
263namespace CustomMaterial {
264[[nodiscard]] Q_QUICK3DRUNTIMERENDER_EXPORT QList<QByteArrayView> preprocessorVars();
265}
266}
267
269
270#endif
\inmodule QtCore
Definition qbytearray.h:57
The QVector3D class represents a vector or vertex in 3D space.
Definition qvectornd.h:171
The QVector4D class represents a vector or vertex in 4D space.
Definition qvectornd.h:330
Combined button and popup list for selecting options.
Q_QUICK3DRUNTIMERENDER_EXPORT QList< QByteArrayView > preprocessorVars()
static void * context
GLuint color
[2]
GLenum type
GLenum GLenum dst
static QByteArray prepareCustomShader(QSSGRenderCustomMaterial *customMaterial, const QSSGShaderCustomMaterialAdapter::StringPairList &uniforms, const QByteArray &snippet, QSSGShaderCache::ShaderType shaderType, QSSGCustomShaderMetaData &meta, bool multiViewCompatible)
view create()
QPair< QByteArray, QByteArray > StringPair
QPair< QByteArray, QSSGCustomShaderMetaData > ShaderCodeAndMetaData
virtual float bumpAmount()=0
virtual float ior()=0
virtual bool isVertexColorsMaskEnabled()=0
virtual float clearcoatFresnelBias()=0
virtual float clearcoatRoughnessAmount()=0
virtual float heightAmount()=0
virtual ~QSSGShaderMaterialAdapter()
virtual QVector3D specularTint()=0
virtual bool isFresnelScaleBiasEnabled()=0
virtual float clearcoatNormalStrength()=0
virtual float maxHeightSamples()=0
virtual bool isVertexColorsEnabled()=0
virtual float occlusionAmount()=0
virtual bool isSpecularAmountSingleChannelEnabled()=0
virtual QSSGRenderImage * iblProbe()=0
virtual float specularAmount()=0
virtual bool usesCustomMorphing()=0
virtual float attenuationDistance()=0
virtual QVector3D attenuationColor()=0
virtual bool isClearcoatFresnelScaleBiasEnabled()=0
virtual float clearcoatAmount()=0
virtual bool usesCustomSkinning()=0
virtual float transmissionFactor()=0
virtual QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorGreenMask()=0
virtual bool isPrincipled()=0
virtual bool isSpecularEnabled()=0
virtual bool isBaseColorSingleChannelEnabled()=0
virtual QVector3D emissiveColor()=0
virtual bool isEmissiveSingleChannelEnabled()=0
virtual float specularRoughness()=0
virtual bool isTransmissionEnabled()=0
virtual float pointSize()=0
virtual float fresnelPower()=0
virtual float metalnessAmount()=0
virtual float lineWidth()=0
virtual QVector4D color()=0
virtual QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorBlueMask()=0
virtual float alphaCutOff()=0
virtual bool isInvertOpacityMapValue()=0
virtual float fresnelScale()=0
virtual float translucentFallOff()=0
virtual float diffuseLightWrap()=0
virtual float minHeightSamples()=0
virtual float thicknessFactor()=0
virtual bool hasLighting()=0
virtual bool isSpecularGlossy()=0
virtual QSSGRenderDefaultMaterial::MaterialSpecularModel specularModel()=0
virtual bool isClearcoatEnabled()=0
virtual QSSGRenderDefaultMaterial::MaterialAlphaMode alphaMode()=0
virtual float clearcoatFresnelPower()=0
virtual bool isMetalnessEnabled()=0
virtual QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorRedMask()=0
virtual float clearcoatFresnelScale()=0
virtual float fresnelBias()=0
virtual QSSGRenderDefaultMaterial::VertexColorMaskFlags vertexColorAlphaMask()=0