diff options
Diffstat (limited to 'src/quickshapes/qquickshapegenericrenderer_p.h')
-rw-r--r-- | src/quickshapes/qquickshapegenericrenderer_p.h | 109 |
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 |