From cc455dff5a4de391295189c79d3872b11d30ca7c Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Thu, 19 Sep 2024 08:39:14 +0200 Subject: [PATCH] using more intuitive function names for QskBoxRenderer --- src/nodes/QskBoxClipNode.cpp | 2 +- src/nodes/QskBoxRectangleNode.cpp | 12 ++++++------ src/nodes/QskBoxRenderer.cpp | 31 ++++++++++++++++++++++--------- src/nodes/QskBoxRenderer.h | 23 +++++++++++++++-------- 4 files changed, 44 insertions(+), 24 deletions(-) diff --git a/src/nodes/QskBoxClipNode.cpp b/src/nodes/QskBoxClipNode.cpp index d90891b6..c04d79e2 100644 --- a/src/nodes/QskBoxClipNode.cpp +++ b/src/nodes/QskBoxClipNode.cpp @@ -67,7 +67,7 @@ void QskBoxClipNode::setBox( const QRectF& rect, else { setIsRectangular( false ); - QskBoxRenderer::renderFillGeometry( rect, shape, border, m_geometry ); + QskBoxRenderer::setFillLines( rect, shape, border, m_geometry ); } /* diff --git a/src/nodes/QskBoxRectangleNode.cpp b/src/nodes/QskBoxRectangleNode.cpp index dd5c7fb0..ec8b2a7e 100644 --- a/src/nodes/QskBoxRectangleNode.cpp +++ b/src/nodes/QskBoxRectangleNode.cpp @@ -112,8 +112,8 @@ void QskBoxRectangleNode::updateFilling( const QRectF& rect, { setColoring( QskFillNode::Polychrome ); - QskBoxRenderer::renderBox( rect, shape, - borderMetrics, QskBoxBorderColors(), fillGradient, *geometry() ); + QskBoxRenderer::setColoredFillLines( rect, shape, + borderMetrics, fillGradient, *geometry() ); markDirty( QSGNode::DirtyGeometry ); } @@ -132,7 +132,7 @@ void QskBoxRectangleNode::updateFilling( const QRectF& rect, if ( dirtyMetrics ) { - QskBoxRenderer::renderFillGeometry( + QskBoxRenderer::setFillLines( rect, shape, borderMetrics, *geometry() ); markDirty( QSGNode::DirtyGeometry ); @@ -165,8 +165,8 @@ void QskBoxRectangleNode::updateBorder( const QRectF& rect, else setColoring( borderColors.left().rgbStart() ); - QskBoxRenderer::renderBox( rect, shape, borderMetrics, - borderColors, QskGradient(), *this->geometry() ); + QskBoxRenderer::setColoredBorderLines( rect, shape, borderMetrics, + borderColors, *this->geometry() ); markDirty( QSGNode::DirtyGeometry ); } @@ -208,7 +208,7 @@ void QskBoxRectangleNode::updateBox( const QRectF& rect, fillGradient.setDirection( QskGradient::Linear ); } - QskBoxRenderer::renderBox( rect, shape, borderMetrics, + QskBoxRenderer::setColoredBorderAndFillLines( rect, shape, borderMetrics, borderColors, fillGradient, *geometry() ); markDirty( QSGNode::DirtyGeometry ); diff --git a/src/nodes/QskBoxRenderer.cpp b/src/nodes/QskBoxRenderer.cpp index a1e95e9f..cb432d3c 100644 --- a/src/nodes/QskBoxRenderer.cpp +++ b/src/nodes/QskBoxRenderer.cpp @@ -109,7 +109,7 @@ bool QskBoxRenderer::isGradientSupported( const QskGradient& gradient ) return false; } -void QskBoxRenderer::renderBorderGeometry( +void QskBoxRenderer::setBorderLines( const QRectF& rect, const QskBoxShapeMetrics& shape, const QskBoxBorderMetrics& border, QSGGeometry& geometry ) { @@ -124,13 +124,13 @@ void QskBoxRenderer::renderBorderGeometry( stroker.setBorderLines( lines ); } -void QskBoxRenderer::renderFillGeometry( +void QskBoxRenderer::setFillLines( const QRectF& rect, const QskBoxShapeMetrics& shape, QSGGeometry& geometry ) { - renderFillGeometry( rect, shape, QskBoxBorderMetrics(), geometry ); + setFillLines( rect, shape, QskBoxBorderMetrics(), geometry ); } -void QskBoxRenderer::renderFillGeometry( +void QskBoxRenderer::setFillLines( const QRectF& rect, const QskBoxShapeMetrics& shape, const QskBoxBorderMetrics& border, QSGGeometry& geometry ) { @@ -144,15 +144,28 @@ void QskBoxRenderer::renderFillGeometry( stroker.setFillLines( lines ); } -void QskBoxRenderer::renderBox( const QRectF& rect, - const QskBoxShapeMetrics& shape, const QskGradient& gradient, - QSGGeometry& geometry ) +void QskBoxRenderer::setColoredFillLines( const QRectF& rect, + const QskBoxShapeMetrics& shape, const QskBoxBorderMetrics& border, + const QskGradient& gradient, QSGGeometry& geometry ) { - renderBox( rect, shape, QskBoxBorderMetrics(), + setColoredBorderAndFillLines( rect, shape, border, QskBoxBorderColors(), gradient, geometry ); } -void QskBoxRenderer::renderBox( const QRectF& rect, +void QskBoxRenderer::setColoredBorderLines( const QRectF& rect, + const QskBoxShapeMetrics& shape, const QskBoxBorderMetrics& border, + const QskBoxBorderColors& borderColors, QSGGeometry& geometry ) +{ + geometry.setDrawingMode( QSGGeometry::DrawTriangleStrip ); + geometry.markVertexDataDirty(); + + const QskBoxBasicStroker stroker( QskBoxMetrics( rect, shape, border ), borderColors ); + + if ( auto lines = qskAllocateColoredLines( geometry, stroker.borderCount() ) ) + stroker.setBoxLines( lines, nullptr ); +} + +void QskBoxRenderer::setColoredBorderAndFillLines( const QRectF& rect, const QskBoxShapeMetrics& shape, const QskBoxBorderMetrics& border, const QskBoxBorderColors& borderColors, const QskGradient& gradient, QSGGeometry& geometry ) diff --git a/src/nodes/QskBoxRenderer.h b/src/nodes/QskBoxRenderer.h index 06a4bb30..2f8c89fc 100644 --- a/src/nodes/QskBoxRenderer.h +++ b/src/nodes/QskBoxRenderer.h @@ -26,27 +26,34 @@ namespace QskBoxRenderer - using shaders setting the color information */ - QSK_EXPORT void renderBorderGeometry( const QRectF&, + QSK_EXPORT void setBorderLines( const QRectF&, const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, QSGGeometry& ); - QSK_EXPORT void renderFillGeometry( const QRectF&, + QSK_EXPORT void setFillLines( const QRectF&, const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, QSGGeometry& ); - QSK_EXPORT void renderFillGeometry( const QRectF&, + QSK_EXPORT void setFillLines( const QRectF&, const QskBoxShapeMetrics&, QSGGeometry& ); /* - Filling the geometry usually with color information: + Filling the geometry with color information: see QSGGeometry::defaultAttributes_ColoredPoint2D() + + Usually used in combination with QSGVertexColorMaterial */ QSK_EXPORT bool isGradientSupported( const QskGradient& ); - QSK_EXPORT void renderBox( const QRectF&, + QSK_EXPORT void setColoredBorderLines( const QRectF&, + const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, + const QskBoxBorderColors&, QSGGeometry& ); + + QSK_EXPORT void setColoredFillLines( const QRectF&, + const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, + const QskGradient&, QSGGeometry& ); + + QSK_EXPORT void setColoredBorderAndFillLines( const QRectF&, const QskBoxShapeMetrics&, const QskBoxBorderMetrics&, const QskBoxBorderColors&, const QskGradient&, QSGGeometry& ); - - QSK_EXPORT void renderBox( const QRectF&, - const QskBoxShapeMetrics&, const QskGradient&, QSGGeometry& ); } #endif