5#ifndef QQUICKSHAPEGENERICRENDERER_P_H
6#define QQUICKSHAPEGENERICRENDERER_P_H
19#include <QtQuickShapes/private/qquickshapesglobal_p.h>
20#include <QtQuickShapes/private/qquickshape_p_p.h>
21#include <QtQuick/private/qsggradientcache_p.h>
23#include <qsggeometry.h>
24#include <qsgmaterial.h>
25#include <qsgrendererinterface.h>
26#include <qsgtexture.h>
27#include <QtCore/qrunnable.h>
54 m_asyncCallback(
nullptr),
55 m_asyncCallbackData(
nullptr)
59 void beginSync(
int totalCount,
bool *countChanged)
override;
60 void setPath(
int index,
const QPainterPath &path, QQuickShapePath::PathHints pathHints = {})
override;
64 void setFillColor(
int index,
const QColor &color)
override;
65 void setFillRule(
int index, QQuickShapePath::FillRule fillRule)
override;
66 void setJoinStyle(
int index, QQuickShapePath::JoinStyle joinStyle,
int miterLimit)
override;
67 void setCapStyle(
int index, QQuickShapePath::CapStyle capStyle)
override;
68 void setStrokeStyle(
int index, QQuickShapePath::StrokeStyle strokeStyle,
69 qreal dashOffset,
const QList<qreal> &dashPattern)
override;
70 void setFillGradient(
int index, QQuickShapeGradient *gradient)
override;
74 void endSync(
bool async)
override;
92 QSGGeometry::Type *indexType,
93 bool supportsElementIndexUint,
94 qreal triangulationScale);
99 const QSize &clipSize,
100 qreal triangulationScale);
103 void maybeUpdateAsyncItem();
105 struct ShapePathData {
107 float triangulationScale;
109 Color4ub strokeColor = { uchar(0), uchar(0), uchar(0), uchar(0) };
110 Color4ub fillColor = { uchar(0), uchar(0), uchar(0), uchar(0) };
111 Qt::FillRule fillRule;
113 FillGradientType fillGradientActive;
114 QSGGradientCache::GradientDesc fillGradient;
115 QQuickItem *fillTextureProviderItem =
nullptr;
116 QSGTransform fillTransform;
119 QSGGeometry::Type indexType;
122 int effectiveDirty = 0;
134 QList<ShapePathData> m_sp;
136 void (*m_asyncCallback)(
void *);
137 void *m_asyncCallbackData;
211 void handleTextureProviderDestroyed();
214 QScopedPointer<QSGMaterial> m_material;
243 QSGMaterial *oldMaterial)
override;
245 QSGMaterial *newMaterial, QSGMaterial *oldMaterial)
override;
248 QSGTransform m_fillTransform;
264 setFlag(Blending | RequiresFullMatrix);
283 QSGMaterial *oldMaterial)
override;
285 QSGMaterial *newMaterial, QSGMaterial *oldMaterial)
override;
288 QSGTransform m_fillTransform;
289 QVector2D m_focalPoint;
290 QVector2D m_focalToCenter;
291 float m_centerRadius;
301 setFlag(Blending | RequiresFullMatrix);
320 QSGMaterial *oldMaterial)
override;
322 QSGMaterial *newMaterial, QSGMaterial *oldMaterial)
override;
325 QSGTransform m_fillTransform;
326 QVector2D m_centerPoint;
336 setFlag(Blending | RequiresFullMatrix);
355 QSGMaterial *oldMaterial)
override;
357 QSGMaterial *newMaterial, QSGMaterial *oldMaterial)
override;
360 QSGTransform m_fillTransform;
361 QVector2D m_boundsOffset;
362 QVector2D m_boundsSize;
371 setFlag(Blending | RequiresFullMatrix);
383 return m_dummyTexture;
388 m_dummyTexture = texture;
393 QSGPlainTexture *m_dummyTexture =
nullptr;
virtual void setFillTextureProvider(int index, QQuickItem *textureProviderItem)=0
virtual void beginSync(int totalCount, bool *countChanged)=0
virtual void setStrokeColor(int index, const QColor &color)=0
virtual void setPath(int index, const QPainterPath &path, QQuickShapePath::PathHints pathHints={})=0
virtual void setAsyncCallback(void(*)(void *), void *)
virtual Flags flags() const
virtual void setCapStyle(int index, QQuickShapePath::CapStyle capStyle)=0
virtual void setStrokeStyle(int index, QQuickShapePath::StrokeStyle strokeStyle, qreal dashOffset, const QList< qreal > &dashPattern)=0
virtual void setFillGradient(int index, QQuickShapeGradient *gradient)=0
virtual ~QQuickAbstractPathRenderer()
virtual void setFillColor(int index, const QColor &color)=0
virtual void setCosmeticStroke(int index, bool c)=0
virtual void setPath(int index, const QQuickPath *path)
virtual void setTriangulationScale(int, qreal)
virtual void setFillRule(int index, QQuickShapePath::FillRule fillRule)=0
virtual void setStrokeWidth(int index, qreal w)=0
virtual void setFillTransform(int index, const QSGTransform &transform)=0
virtual void endSync(bool async)=0
virtual void updateNode()=0
virtual void handleSceneChange(QQuickWindow *window)=0
virtual void setJoinStyle(int index, QQuickShapePath::JoinStyle joinStyle, int miterLimit)=0
QSGMaterialType * type() const override
This function is called by the scene graph to query an identifier that is unique to the QSGMaterialSh...
QQuickShapeConicalGradientMaterial(QQuickShapeGenericStrokeFillNode *node)
int compare(const QSGMaterial *other) const override
Compares this material to other and returns 0 if they are equal; -1 if this material should sort befo...
QSGMaterialShader * createShader(QSGRendererInterface::RenderMode renderMode) const override
This function returns a new instance of a the QSGMaterialShader implementation used to render geometr...
QQuickShapeGenericStrokeFillNode * node() const
void updateSampledImage(RenderState &state, int binding, QSGTexture **texture, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) override
This function is called by the scene graph to prepare use of sampled images in the shader,...
bool updateUniformData(RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) override
This function is called by the scene graph to get the contents of the shader program's uniform buffer...
QQuickShapeConicalGradientRhiShader(int viewCount)
bool supportsElementIndexUint
QQuickShapeGenericRenderer::Color4ub fillColor
QQuickShapeGenericRenderer::VertexContainerType fillVertices
QQuickShapeGenericRenderer::IndexContainerType fillIndices
static QSGMaterial * createLinearGradient(QQuickWindow *window, QQuickShapeGenericStrokeFillNode *node)
static QSGMaterial * createTextureFill(QQuickWindow *window, QQuickShapeGenericStrokeFillNode *node)
static QSGMaterial * createConicalGradient(QQuickWindow *window, QQuickShapeGenericStrokeFillNode *node)
static QSGMaterial * createVertexColor(QQuickWindow *window)
static QSGMaterial * createRadialGradient(QQuickWindow *window, QQuickShapeGenericStrokeFillNode *node)
QQuickShapeGenericStrokeFillNode * m_fillNode
QQuickShapeGenericStrokeFillNode * m_strokeNode
QQuickShapeGenericNode * m_next
void setAsyncCallback(void(*)(void *), void *) override
void setFillGradient(int index, QQuickShapeGradient *gradient) override
void setStrokeStyle(int index, QQuickShapePath::StrokeStyle strokeStyle, qreal dashOffset, const QList< qreal > &dashPattern) override
QQuickShapeGenericRenderer(QQuickItem *item)
void setFillTransform(int index, const QSGTransform &transform) override
QList< quint32 > IndexContainerType
void setCosmeticStroke(int index, bool c) override
static void triangulateFill(const QPainterPath &path, const Color4ub &fillColor, VertexContainerType *fillVertices, IndexContainerType *fillIndices, QSGGeometry::Type *indexType, bool supportsElementIndexUint, qreal triangulationScale)
QList< QSGGeometry::ColoredPoint2D > VertexContainerType
void setPath(int index, const QPainterPath &path, QQuickShapePath::PathHints pathHints={}) override
void setStrokeColor(int index, const QColor &color) override
void setFillRule(int index, QQuickShapePath::FillRule fillRule) override
void setFillTextureProvider(int index, QQuickItem *textureProviderItem) override
void setFillColor(int index, const QColor &color) override
void setTriangulationScale(int index, qreal scale) override
void setJoinStyle(int index, QQuickShapePath::JoinStyle joinStyle, int miterLimit) override
void setStrokeWidth(int index, qreal w) override
~QQuickShapeGenericRenderer()
void setRootNode(QQuickShapeGenericNode *node)
QList< QSGGeometry::TexturedPoint2D > TexturedVertexContainerType
void handleSceneChange(QQuickWindow *window) override
void beginSync(int totalCount, bool *countChanged) override
void setCapStyle(int index, QQuickShapePath::CapStyle capStyle) override
Flags flags() const override
static void triangulateStroke(const QPainterPath &path, const QPen &pen, const Color4ub &strokeColor, VertexContainerType *strokeVertices, const QSize &clipSize, qreal triangulationScale)
void updateNode() override
void endSync(bool async) override
QSGGradientCache::GradientDesc m_fillGradient
void preprocess() override
Override this function to do processing on the node before it is rendered.
QSGTransform m_fillTransform
QSGTextureProvider * m_fillTextureProvider
void activateMaterial(QQuickWindow *window, Material m)
QQuickShapeLinearGradientMaterial(QQuickShapeGenericStrokeFillNode *node)
QSGMaterialShader * createShader(QSGRendererInterface::RenderMode renderMode) const override
This function returns a new instance of a the QSGMaterialShader implementation used to render geometr...
int compare(const QSGMaterial *other) const override
Compares this material to other and returns 0 if they are equal; -1 if this material should sort befo...
QSGMaterialType * type() const override
This function is called by the scene graph to query an identifier that is unique to the QSGMaterialSh...
QQuickShapeGenericStrokeFillNode * node() const
void updateSampledImage(RenderState &state, int binding, QSGTexture **texture, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) override
This function is called by the scene graph to prepare use of sampled images in the shader,...
QQuickShapeLinearGradientRhiShader(int viewCount)
bool updateUniformData(RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) override
This function is called by the scene graph to get the contents of the shader program's uniform buffer...
QQuickShapeGenericStrokeFillNode * node() const
QQuickShapeRadialGradientMaterial(QQuickShapeGenericStrokeFillNode *node)
QSGMaterialType * type() const override
This function is called by the scene graph to query an identifier that is unique to the QSGMaterialSh...
QSGMaterialShader * createShader(QSGRendererInterface::RenderMode renderMode) const override
This function returns a new instance of a the QSGMaterialShader implementation used to render geometr...
int compare(const QSGMaterial *other) const override
Compares this material to other and returns 0 if they are equal; -1 if this material should sort befo...
bool updateUniformData(RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) override
This function is called by the scene graph to get the contents of the shader program's uniform buffer...
QQuickShapeRadialGradientRhiShader(int viewCount)
void updateSampledImage(RenderState &state, int binding, QSGTexture **texture, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) override
This function is called by the scene graph to prepare use of sampled images in the shader,...
QQuickShapeGenericRenderer::Color4ub strokeColor
QQuickShapeGenericRenderer::VertexContainerType strokeVertices
QQuickShapeTextureFillMaterial(QQuickShapeGenericStrokeFillNode *node)
void setDummyTexture(QSGPlainTexture *texture)
QSGMaterialShader * createShader(QSGRendererInterface::RenderMode renderMode) const override
This function returns a new instance of a the QSGMaterialShader implementation used to render geometr...
int compare(const QSGMaterial *other) const override
Compares this material to other and returns 0 if they are equal; -1 if this material should sort befo...
QSGPlainTexture * dummyTexture() const
QQuickShapeGenericStrokeFillNode * node() const
~QQuickShapeTextureFillMaterial() override
QSGMaterialType * type() const override
This function is called by the scene graph to query an identifier that is unique to the QSGMaterialSh...
QQuickShapeTextureFillRhiShader(int viewCount)
bool updateUniformData(RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) override
This function is called by the scene graph to get the contents of the shader program's uniform buffer...
void updateSampledImage(RenderState &state, int binding, QSGTexture **texture, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) override
This function is called by the scene graph to prepare use of sampled images in the shader,...
Combined button and popup list for selecting options.
QT_BEGIN_NAMESPACE Q_STATIC_LOGGING_CATEGORY(lcSynthesizedIterableAccess, "qt.iterable.synthesized", QtWarningMsg)
static void initResources()
static void vpe_clear(QQmlListProperty< QObject > *property)
static void vpe_append(QQmlListProperty< QObject > *property, QObject *obj)
Q_GHS_KEEP_REFERENCE(QQuickShapes_initializeModule)
QList< qreal > dashPattern
QSGTransform fillTransform
QQuickShapeStrokeFillParams()
QQuickShapeGradient * fillGradient