37 QSSGRenderCustomMaterial();
38 ~QSSGRenderCustomMaterial();
40 struct TextureProperty
42 QQuick3DShaderUtilsTextureInput *texInput =
nullptr;
43 QSSGRenderImage *texImage =
nullptr;
45 QSSGRenderShaderValue::Type shaderDataType;
46 QSSGRenderTextureFilterOp minFilterType = QSSGRenderTextureFilterOp::Linear;
47 QSSGRenderTextureFilterOp magFilterType = QSSGRenderTextureFilterOp::Linear;
48 QSSGRenderTextureFilterOp mipFilterType = QSSGRenderTextureFilterOp::Linear;
49 QSSGRenderTextureCoordOp horizontalClampType = QSSGRenderTextureCoordOp::ClampToEdge;
50 QSSGRenderTextureCoordOp verticalClampType = QSSGRenderTextureCoordOp::ClampToEdge;
51 QSSGRenderTextureCoordOp zClampType = QSSGRenderTextureCoordOp::ClampToEdge;
52 QQuick3DTexture *lastConnectedTexture =
nullptr;
53 QMetaObject::Connection minFilterChangedConn;
54 QMetaObject::Connection magFilterChangedConn;
55 QMetaObject::Connection mipFilterChangedConn;
56 QMetaObject::Connection horizontalTilingChangedConn;
57 QMetaObject::Connection verticalTilingChangedConn;
58 QMetaObject::Connection depthTilingChangedConn;
60 using TexturePropertyList = QList<TextureProperty>;
65 Property(
const QByteArray &name,
const QVariant &value, QSSGRenderShaderValue::Type shaderDataType,
int pid = -1)
66 : name(name), value(value), shaderDataType(shaderDataType), pid(pid)
70 QSSGRenderShaderValue::Type shaderDataType;
73 using PropertyList = QList<Property>;
75 enum class Flags : quint8
80 using FlagT = std::underlying_type_t<Flags>;
82 enum class ShadingMode
88 enum class CustomShaderPresenceFlag {
92 Q_DECLARE_FLAGS(CustomShaderPresence, CustomShaderPresenceFlag)
94 enum class RenderFlag {
96 ScreenTexture = 1 << 1,
97 DepthTexture = 1 << 2,
99 OverridesPosition = 1 << 4,
100 ProjectionMatrix = 1 << 5,
101 InverseProjectionMatrix = 1 << 6,
102 ScreenMipTexture = 1 << 7,
104 IblOrientation = 1 << 9,
110 ClearcoatFresnelScaleBias = 1 << 15,
111 FresnelScaleBias = 1 << 16,
112 Transmission = 1 << 17,
113 NormalTexture = 1 << 18
115 Q_DECLARE_FLAGS(RenderFlags, RenderFlag)
118 RegularShaderPathKeyIndex = 0,
119 MultiViewShaderPathKeyIndex = 1
121 QByteArray m_shaderPathKey[2];
122 CustomShaderPresence m_customShaderPresence;
124 TexturePropertyList m_textureProperties;
125 PropertyList m_properties;
127 QSSGRenderImage *m_iblProbe =
nullptr;
128 QSSGRenderImage *m_emissiveMap =
nullptr;
129 QSSGCullFaceMode m_cullMode = QSSGCullFaceMode::Back;
130 QSSGDepthDrawMode m_depthDrawMode = QSSGDepthDrawMode::OpaqueOnly;
131 RenderFlags m_renderFlags;
132 QRhiGraphicsPipeline::BlendFactor m_srcBlend;
133 QRhiGraphicsPipeline::BlendFactor m_dstBlend;
134 QRhiGraphicsPipeline::BlendFactor m_srcAlphaBlend;
135 QRhiGraphicsPipeline::BlendFactor m_dstAlphaBlend;
136 float m_lineWidth = 1.0f;
138 QSSGRenderGraphObject *m_nextSibling =
nullptr;
140 ShadingMode m_shadingMode = ShadingMode::Shaded;
142 FlagT m_flags { FlagT(Flags::Dirty) };
143 bool incompleteBuildTimeObject =
false;
144 bool m_usesSharedVariables =
false;
148 void setAlwaysDirty(
bool v);
149 [[nodiscard]]
inline bool isDirty()
const {
return ((m_flags & (FlagT(Flags::Dirty) | FlagT(Flags::AlwaysDirty))) != 0); }
151 QSSGShaderMaterialAdapter *adapter =
nullptr;
153 QString debugObjectName;