Revision control

Copy as Markdown

// Copyright (C) 2008-2012 NVIDIA Corporation.
// Copyright (C) 2019 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
// Qt-Security score:significant reason:default
#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 isSheenEnabled() = 0;
virtual bool isAnisotropyEnabled() = 0;
virtual bool isIridescenceEnabled() = 0;
virtual bool isDispersionEnabled() = 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 QVector3D sheenColor() = 0;
virtual float sheenRoughness() = 0;
virtual float anisotropyStrength() = 0;
virtual float anisotropyRotation() = 0;
virtual float iridescenceFactor() = 0;
virtual float iridescenceIndexOfRefraction() = 0;
virtual float iridescenceThicknessMinimum() = 0;
virtual float iridescenceThicknessMaximum() = 0;
virtual float dispersion() = 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 isSheenEnabled() override;
bool isAnisotropyEnabled() override;
bool isIridescenceEnabled() override;
bool isDispersionEnabled() 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;
QVector3D sheenColor() override;
float sheenRoughness() override;
float anisotropyStrength() override;
float anisotropyRotation() override;
float iridescenceFactor() override;
float iridescenceIndexOfRefraction() override;
float iridescenceThicknessMinimum() override;
float iridescenceThicknessMaximum() override;
float dispersion() 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 isSheenEnabled() override;
bool isAnisotropyEnabled() override;
bool isIridescenceEnabled() override;
bool isDispersionEnabled() 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;
QVector3D sheenColor() override;
float sheenRoughness() override;
float anisotropyStrength() override;
float anisotropyRotation() override;
float iridescenceFactor() override;
float iridescenceIndexOfRefraction() override;
float iridescenceThicknessMinimum() override;
float iridescenceThicknessMaximum() override;
float dispersion() 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>;
struct CustomShaderPrepWorkData {
QByteArrayList inputs;
QByteArrayList outputs;
};
static void beginPrepareCustomShader(CustomShaderPrepWorkData *workData,
ShaderCodeAndMetaData *codeAndMetaData,
const QByteArray &shaderCode,
QSSGShaderCache::ShaderType type,
bool multiViewCompatible);
static void finishPrepareCustomShader(QByteArray *dst,
const CustomShaderPrepWorkData &workData,
const ShaderCodeAndMetaData &codeAndMetaData,
QSSGShaderCache::ShaderType type,
bool multiViewCompatible,
const StringPairList &baseUniforms,
const StringPairList &baseInputs,
const StringPairList &baseOutputs,
const StringPairList &multiViewDependentSamplers,
const StringPairList &multiViewDependentUniforms);
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