39 QSSGRenderCustomMaterial();
40 ~QSSGRenderCustomMaterial();
42 struct TextureProperty
44 QQuick3DShaderUtilsTextureInput *texInput =
nullptr;
45 QSSGRenderImage *texImage =
nullptr;
47 QSSGRenderShaderValue::Type shaderDataType;
48 QSSGRenderTextureFilterOp minFilterType = QSSGRenderTextureFilterOp::Linear;
49 QSSGRenderTextureFilterOp magFilterType = QSSGRenderTextureFilterOp::Linear;
50 QSSGRenderTextureFilterOp mipFilterType = QSSGRenderTextureFilterOp::Linear;
51 QSSGRenderTextureCoordOp horizontalClampType = QSSGRenderTextureCoordOp::ClampToEdge;
52 QSSGRenderTextureCoordOp verticalClampType = QSSGRenderTextureCoordOp::ClampToEdge;
53 QSSGRenderTextureCoordOp zClampType = QSSGRenderTextureCoordOp::ClampToEdge;
54 QQuick3DTexture *lastConnectedTexture =
nullptr;
55 QMetaObject::Connection minFilterChangedConn;
56 QMetaObject::Connection magFilterChangedConn;
57 QMetaObject::Connection mipFilterChangedConn;
58 QMetaObject::Connection horizontalTilingChangedConn;
59 QMetaObject::Connection verticalTilingChangedConn;
60 QMetaObject::Connection depthTilingChangedConn;
62 using TexturePropertyList = QList<TextureProperty>;
67 Property(
const QByteArray &name,
const QVariant &value, QSSGRenderShaderValue::Type shaderDataType,
int pid = -1)
68 : name(name), value(value), shaderDataType(shaderDataType), pid(pid)
72 QSSGRenderShaderValue::Type shaderDataType;
75 using PropertyList = QList<Property>;
77 enum class Flags : quint8
82 using FlagT = std::underlying_type_t<Flags>;
84 enum class ShadingMode
90 enum class CustomShaderPresenceFlag {
94 Q_DECLARE_FLAGS(CustomShaderPresence, CustomShaderPresenceFlag)
96 enum class RenderFlag {
98 ScreenTexture = 1 << 1,
99 DepthTexture = 1 << 2,
101 OverridesPosition = 1 << 4,
102 ProjectionMatrix = 1 << 5,
103 InverseProjectionMatrix = 1 << 6,
104 ScreenMipTexture = 1 << 7,
106 IblOrientation = 1 << 9,
112 ClearcoatFresnelScaleBias = 1 << 15,
113 FresnelScaleBias = 1 << 16,
114 Transmission = 1 << 17,
115 NormalTexture = 1 << 18,
116 MotionVectorTexture = 1 << 19,
118 Anisotropy = 1 << 21,
119 Iridescence = 1 << 22,
122 Q_DECLARE_FLAGS(RenderFlags, RenderFlag)
125 RegularShaderPathKeyIndex = 0,
126 MultiViewShaderPathKeyIndex = 1
128 QByteArray m_shaderPathKey[2];
129 CustomShaderPresence m_customShaderPresence;
131 TexturePropertyList m_textureProperties;
132 PropertyList m_properties;
134 QSSGRenderImage *m_iblProbe =
nullptr;
135 QSSGRenderImage *m_emissiveMap =
nullptr;
136 QSSGCullFaceMode m_cullMode = QSSGCullFaceMode::Back;
137 QSSGDepthDrawMode m_depthDrawMode = QSSGDepthDrawMode::OpaqueOnly;
138 RenderFlags m_renderFlags;
139 QRhiGraphicsPipeline::BlendFactor m_srcBlend;
140 QRhiGraphicsPipeline::BlendFactor m_dstBlend;
141 QRhiGraphicsPipeline::BlendFactor m_srcAlphaBlend;
142 QRhiGraphicsPipeline::BlendFactor m_dstAlphaBlend;
143 float m_lineWidth = 1.0f;
145 QSSGRenderGraphObject *m_nextSibling =
nullptr;
147 ShadingMode m_shadingMode = ShadingMode::Shaded;
149 FlagT m_flags { FlagT(Flags::Dirty) };
150 bool incompleteBuildTimeObject =
false;
151 bool m_usesSharedVariables =
false;
155 void setAlwaysDirty(
bool v);
156 [[nodiscard]]
inline bool isDirty()
const {
return ((m_flags & (FlagT(Flags::Dirty) | FlagT(Flags::AlwaysDirty))) != 0); }
158 QSSGShaderMaterialAdapter *adapter =
nullptr;
160 QString debugObjectName;
static QVector3D closestPointOnTriangle(const QVector3D &p, const QVector3D &a, const QVector3D &b, const QVector3D &c, const Dot &dot, float &u, float &v, float &w)