Revision control

++ // 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_RENDER_CUSTOM_MATERIAL_H
++ #define QSSG_RENDER_CUSTOM_MATERIAL_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 <QtCore/qurl.h>
++ #include <QtCore/qvariant.h>
++ #include <QtCore/qvector.h>
++ #include <rhi/qrhi.h>
++
++ #include <QtQuick3DRuntimeRender/qtquick3druntimerenderexports.h>
++ #include <QtQuick3DRuntimeRender/private/qssgrendergraphobject_p.h>
++ #include <QtQuick3DUtils/private/qssgrenderbasetypes_p.h>
++
++ QT_BEGIN_NAMESPACE
++
++ struct QSSGRenderImage;
++ struct QSSGShaderMaterialAdapter;
++ class QQuick3DShaderUtilsTextureInput;
++ class QQuick3DTexture;
++
++ struct Q_QUICK3DRUNTIMERENDER_EXPORT QSSGRenderCustomMaterial : public QSSGRenderGraphObject
++ {
++ QSSGRenderCustomMaterial();
++ ~QSSGRenderCustomMaterial();
++
++ struct TextureProperty
++ {
++ QQuick3DShaderUtilsTextureInput *texInput = nullptr;
++ QSSGRenderImage *texImage = nullptr;
++ QByteArray name;
++ QSSGRenderShaderValue::Type shaderDataType;
++ QSSGRenderTextureFilterOp minFilterType = QSSGRenderTextureFilterOp::Linear;
++ QSSGRenderTextureFilterOp magFilterType = QSSGRenderTextureFilterOp::Linear;
++ QSSGRenderTextureFilterOp mipFilterType = QSSGRenderTextureFilterOp::Linear;
++ QSSGRenderTextureCoordOp horizontalClampType = QSSGRenderTextureCoordOp::ClampToEdge;
++ QSSGRenderTextureCoordOp verticalClampType = QSSGRenderTextureCoordOp::ClampToEdge;
++ QSSGRenderTextureCoordOp zClampType = QSSGRenderTextureCoordOp::ClampToEdge;
++ QQuick3DTexture *lastConnectedTexture = nullptr;
++ QMetaObject::Connection minFilterChangedConn;
++ QMetaObject::Connection magFilterChangedConn;
++ QMetaObject::Connection mipFilterChangedConn;
++ QMetaObject::Connection horizontalTilingChangedConn;
++ QMetaObject::Connection verticalTilingChangedConn;
++ QMetaObject::Connection depthTilingChangedConn;
++ };
++ using TexturePropertyList = QList<TextureProperty>;
++ using Property = QSSGBaseTypeProperty;
++ using PropertyUniformsList = QList<Property>;
++
++ enum class Flags : quint8
++ {
++ Dirty = 0x1,
++ AlwaysDirty = 0x2
++ };
++ using FlagT = std::underlying_type_t<Flags>;
++
++ enum class ShadingMode // must match QQuick3DCustomMaterial::ShadingMode
++ {
++ Unshaded,
++ Shaded
++ };
++
++ enum class CustomShaderPresenceFlag {
++ Vertex = 1 << 0,
++ Fragment = 1 << 1
++ };
++ Q_DECLARE_FLAGS(CustomShaderPresence, CustomShaderPresenceFlag)
++
++ enum class RenderFlag {
++ Blending = 1 << 0,
++ ScreenTexture = 1 << 1,
++ DepthTexture = 1 << 2,
++ AoTexture = 1 << 3,
++ OverridesPosition = 1 << 4,
++ ProjectionMatrix = 1 << 5,
++ InverseProjectionMatrix = 1 << 6,
++ ScreenMipTexture = 1 << 7,
++ VarColor = 1 << 8,
++ IblOrientation = 1 << 9,
++ Lightmap = 1 << 10,
++ Skinning = 1 << 11,
++ Morphing = 1 << 12,
++ ViewIndex = 1 << 13,
++ Clearcoat = 1 << 14,
++ ClearcoatFresnelScaleBias = 1 << 15,
++ FresnelScaleBias = 1 << 16,
++ Transmission = 1 << 17,
++ NormalTexture = 1 << 18,
++ MotionVectorTexture = 1 << 19,
++ Sheen = 1 << 20,
++ Anisotropy = 1 << 21,
++ Iridescence = 1 << 22,
++ Dispersion = 1 << 23
++ };
++ Q_DECLARE_FLAGS(RenderFlags, RenderFlag)
++
++ enum {
++ RegularShaderPathKeyIndex = 0,
++ MultiViewShaderPathKeyIndex = 1
++ };
++ QByteArray m_shaderPathKey[2];
++ CustomShaderPresence m_customShaderPresence;
++
++ TexturePropertyList m_textureProperties;
++ PropertyUniformsList m_properties;
++
++ QSSGRenderImage *m_iblProbe = nullptr;
++ QSSGRenderImage *m_emissiveMap = nullptr;
++ QSSGCullFaceMode m_cullMode = QSSGCullFaceMode::Back;
++ QSSGDepthDrawMode m_depthDrawMode = QSSGDepthDrawMode::OpaqueOnly;
++ RenderFlags m_renderFlags;
++ QRhiGraphicsPipeline::BlendFactor m_srcBlend;
++ QRhiGraphicsPipeline::BlendFactor m_dstBlend;
++ QRhiGraphicsPipeline::BlendFactor m_srcAlphaBlend;
++ QRhiGraphicsPipeline::BlendFactor m_dstAlphaBlend;
++ float m_lineWidth = 1.0f;
++
++ QSSGRenderGraphObject *m_nextSibling = nullptr;
++
++ ShadingMode m_shadingMode = ShadingMode::Shaded;
++
++ FlagT m_flags { FlagT(Flags::Dirty) };
++ bool incompleteBuildTimeObject = false; // Used by the shadergen tool
++ bool m_usesSharedVariables = false;
++
++ void markDirty();
++ void clearDirty();
++ void setAlwaysDirty(bool v);
++ [[nodiscard]] inline bool isDirty() const { return ((m_flags & (FlagT(Flags::Dirty) | FlagT(Flags::AlwaysDirty))) != 0); }
++
++ QSSGShaderMaterialAdapter *adapter = nullptr;
++
++ QString debugObjectName;
++ };
++
++
++
++ Q_DECLARE_OPERATORS_FOR_FLAGS(QSSGRenderCustomMaterial::CustomShaderPresence)
++
++ QT_END_NAMESPACE
++
++ #endif