remove layer usage to reduce vram consumption
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
#pragma once
|
||||
|
||||
#include "blobgroup2.hpp"
|
||||
|
||||
#include <qmatrix4x4.h>
|
||||
#include <qquickitem.h>
|
||||
|
||||
class BlobGroup2;
|
||||
|
||||
// Data-only shape.
|
||||
//
|
||||
// The group draws a single node for the whole group, so a shape here contributes
|
||||
// only what the shader needs: position, radii, exclusion, physics. A shape does
|
||||
// not create a render node, so no pixel can be evaluated by one shape and missed
|
||||
// by another.
|
||||
class BlobShape2 : public QQuickItem {
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(BlobGroup2* group READ group WRITE setGroup NOTIFY groupChanged)
|
||||
Q_PROPERTY(qreal radius READ radius WRITE setRadius NOTIFY radiusChanged)
|
||||
Q_PROPERTY(
|
||||
QMatrix4x4 deformMatrix READ deformMatrix NOTIFY deformMatrixChanged)
|
||||
Q_PROPERTY(
|
||||
QMatrix4x4 rawDeformMatrix READ rawDeformMatrix NOTIFY
|
||||
rawDeformMatrixChanged)
|
||||
|
||||
friend class BlobGroup2;
|
||||
|
||||
public:
|
||||
explicit BlobShape2(QQuickItem* parent = nullptr);
|
||||
~BlobShape2() override = default;
|
||||
|
||||
[[nodiscard]] BlobGroup2* group() const { return m_group; }
|
||||
|
||||
void setGroup(BlobGroup2* g);
|
||||
|
||||
[[nodiscard]] qreal radius() const { return m_radius; }
|
||||
|
||||
void setRadius(qreal r);
|
||||
|
||||
[[nodiscard]] QMatrix4x4 deformMatrix() const {
|
||||
return m_centeredDeformMatrix;
|
||||
}
|
||||
|
||||
[[nodiscard]] QMatrix4x4 rawDeformMatrix() const { return m_deformMatrix; }
|
||||
|
||||
signals:
|
||||
void groupChanged();
|
||||
void radiusChanged();
|
||||
void deformMatrixChanged();
|
||||
void rawDeformMatrixChanged();
|
||||
|
||||
protected:
|
||||
void componentComplete() override;
|
||||
void geometryChange(
|
||||
const QRectF& newGeometry, const QRectF& oldGeometry) override;
|
||||
|
||||
virtual bool isExcluded(const BlobShape2*) const { return false; }
|
||||
|
||||
virtual bool isCornerExcluded(const BlobShape2* /*other*/) const {
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual void cornerRadii(float out[4]) const;
|
||||
|
||||
// Called by the group when it rebuilds the shared data, once per frame.
|
||||
virtual void updatePhysics() {}
|
||||
|
||||
virtual void registerWithGroup();
|
||||
virtual void unregisterFromGroup();
|
||||
void updateCenteredDeformMatrix();
|
||||
|
||||
BlobGroup2* m_group = nullptr;
|
||||
qreal m_radius = 0;
|
||||
QMatrix4x4 m_deformMatrix; // identity by default
|
||||
QMatrix4x4 m_centeredDeformMatrix;
|
||||
};
|
||||
Reference in New Issue
Block a user