aboutsummaryrefslogtreecommitdiffstats
path: root/src/quickshapes/qquickshapegenericrenderer_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/quickshapes/qquickshapegenericrenderer_p.h')
-rw-r--r--src/quickshapes/qquickshapegenericrenderer_p.h109
1 files changed, 67 insertions, 42 deletions
diff --git a/src/quickshapes/qquickshapegenericrenderer_p.h b/src/quickshapes/qquickshapegenericrenderer_p.h
index 9928d7ab72..4590c662c1 100644
--- a/src/quickshapes/qquickshapegenericrenderer_p.h
+++ b/src/quickshapes/qquickshapegenericrenderer_p.h
@@ -244,7 +244,7 @@ public:
#if QT_CONFIG(opengl)
-class QQuickShapeLinearGradientShader : public QSGMaterialShader
+ class QQuickShapeLinearGradientShader : public QSGMaterialShader
{
public:
QQuickShapeLinearGradientShader();
@@ -253,8 +253,6 @@ public:
void updateState(const RenderState &state, QSGMaterial *newEffect, QSGMaterial *oldEffect) override;
char const *const *attributeNames() const override;
- static QSGMaterialType type;
-
private:
int m_opacityLoc = -1;
int m_matrixLoc = -1;
@@ -262,6 +260,23 @@ private:
int m_gradEndLoc = -1;
};
+#endif // QT_CONFIG(opengl)
+
+class QQuickShapeLinearGradientRhiShader : public QSGMaterialRhiShader
+{
+public:
+ QQuickShapeLinearGradientRhiShader();
+
+ bool updateUniformData(RenderState &state, QSGMaterial *newMaterial,
+ QSGMaterial *oldMaterial) override;
+ void updateSampledImage(RenderState &state, int binding, QSGTexture **texture,
+ QSGMaterial *newMaterial, QSGMaterial *oldMaterial) override;
+
+private:
+ QVector2D m_gradA;
+ QVector2D m_gradB;
+};
+
class QQuickShapeLinearGradientMaterial : public QSGMaterial
{
public:
@@ -273,20 +288,12 @@ public:
// the vertex data. The shader will rely on the fact that
// vertexCoord.xy is the Shape-space coordinate and so no modifications
// are welcome.
- setFlag(Blending | RequiresFullMatrix);
- }
-
- QSGMaterialType *type() const override
- {
- return &QQuickShapeLinearGradientShader::type;
+ setFlag(Blending | RequiresFullMatrix | SupportsRhiShader);
}
+ QSGMaterialType *type() const override;
int compare(const QSGMaterial *other) const override;
-
- QSGMaterialShader *createShader() const override
- {
- return new QQuickShapeLinearGradientShader;
- }
+ QSGMaterialShader *createShader() const override;
QQuickShapeGenericStrokeFillNode *node() const { return m_node; }
@@ -294,6 +301,8 @@ private:
QQuickShapeGenericStrokeFillNode *m_node;
};
+#if QT_CONFIG(opengl)
+
class QQuickShapeRadialGradientShader : public QSGMaterialShader
{
public:
@@ -303,8 +312,6 @@ public:
void updateState(const RenderState &state, QSGMaterial *newEffect, QSGMaterial *oldEffect) override;
char const *const *attributeNames() const override;
- static QSGMaterialType type;
-
private:
int m_opacityLoc = -1;
int m_matrixLoc = -1;
@@ -314,26 +321,37 @@ private:
int m_focalRadiusLoc = -1;
};
+#endif // QT_CONFIG(opengl)
+
+class QQuickShapeRadialGradientRhiShader : public QSGMaterialRhiShader
+{
+public:
+ QQuickShapeRadialGradientRhiShader();
+
+ bool updateUniformData(RenderState &state, QSGMaterial *newMaterial,
+ QSGMaterial *oldMaterial) override;
+ void updateSampledImage(RenderState &state, int binding, QSGTexture **texture,
+ QSGMaterial *newMaterial, QSGMaterial *oldMaterial) override;
+
+private:
+ QVector2D m_focalPoint;
+ QVector2D m_focalToCenter;
+ float m_centerRadius;
+ float m_focalRadius;
+};
+
class QQuickShapeRadialGradientMaterial : public QSGMaterial
{
public:
QQuickShapeRadialGradientMaterial(QQuickShapeGenericStrokeFillNode *node)
: m_node(node)
{
- setFlag(Blending | RequiresFullMatrix);
- }
-
- QSGMaterialType *type() const override
- {
- return &QQuickShapeRadialGradientShader::type;
+ setFlag(Blending | RequiresFullMatrix | SupportsRhiShader);
}
+ QSGMaterialType *type() const override;
int compare(const QSGMaterial *other) const override;
-
- QSGMaterialShader *createShader() const override
- {
- return new QQuickShapeRadialGradientShader;
- }
+ QSGMaterialShader *createShader() const override;
QQuickShapeGenericStrokeFillNode *node() const { return m_node; }
@@ -341,6 +359,8 @@ private:
QQuickShapeGenericStrokeFillNode *m_node;
};
+#if QT_CONFIG(opengl)
+
class QQuickShapeConicalGradientShader : public QSGMaterialShader
{
public:
@@ -350,8 +370,6 @@ public:
void updateState(const RenderState &state, QSGMaterial *newEffect, QSGMaterial *oldEffect) override;
char const *const *attributeNames() const override;
- static QSGMaterialType type;
-
private:
int m_opacityLoc = -1;
int m_matrixLoc = -1;
@@ -359,26 +377,35 @@ private:
int m_translationPointLoc = -1;
};
+#endif // QT_CONFIG(opengl)
+
+class QQuickShapeConicalGradientRhiShader : public QSGMaterialRhiShader
+{
+public:
+ QQuickShapeConicalGradientRhiShader();
+
+ bool updateUniformData(RenderState &state, QSGMaterial *newMaterial,
+ QSGMaterial *oldMaterial) override;
+ void updateSampledImage(RenderState &state, int binding, QSGTexture **texture,
+ QSGMaterial *newMaterial, QSGMaterial *oldMaterial) override;
+
+private:
+ QVector2D m_centerPoint;
+ float m_angle;
+};
+
class QQuickShapeConicalGradientMaterial : public QSGMaterial
{
public:
QQuickShapeConicalGradientMaterial(QQuickShapeGenericStrokeFillNode *node)
: m_node(node)
{
- setFlag(Blending | RequiresFullMatrix);
- }
-
- QSGMaterialType *type() const override
- {
- return &QQuickShapeConicalGradientShader::type;
+ setFlag(Blending | RequiresFullMatrix | SupportsRhiShader);
}
+ QSGMaterialType *type() const override;
int compare(const QSGMaterial *other) const override;
-
- QSGMaterialShader *createShader() const override
- {
- return new QQuickShapeConicalGradientShader;
- }
+ QSGMaterialShader *createShader() const override;
QQuickShapeGenericStrokeFillNode *node() const { return m_node; }
@@ -386,8 +413,6 @@ private:
QQuickShapeGenericStrokeFillNode *m_node;
};
-#endif // QT_CONFIG(opengl)
-
QT_END_NAMESPACE
#endif // QQUICKSHAPEGENERICRENDERER_P_H