// Copyright (C) 2019 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #ifndef QSSG_RENDER_GEOMETRY_H #define QSSG_RENDER_GEOMETRY_H // // W A R N I N G // ------------- // // This file is not part of the Qt API. It exists purely as an // implementation detail. This header file may change from version to // version without notice, or even be removed. // // We mean it. // #include #include #include #include #include #include QT_BEGIN_NAMESPACE class Q_QUICK3DRUNTIMERENDER_EXPORT QSSGRenderGeometry : public QSSGRenderGraphObject { public: struct Attribute { QSSGMesh::RuntimeMeshData::Attribute::Semantic semantic = QSSGMesh::RuntimeMeshData::Attribute::PositionSemantic; int offset = -1; QSSGMesh::Mesh::ComponentType componentType = QSSGMesh::Mesh::ComponentType::Float32; }; struct TargetAttribute { quint32 targetId = 0; Attribute attr; int stride = 0; }; explicit QSSGRenderGeometry(); virtual ~QSSGRenderGeometry(); const QByteArray &vertexBuffer() const; QByteArray &vertexBuffer(); const QByteArray &indexBuffer() const; QByteArray &indexBuffer(); int attributeCount() const; Attribute attribute(int idx) const; QSSGMesh::Mesh::DrawMode primitiveType() const; QVector3D boundsMin() const; QVector3D boundsMax() const; int stride() const; int targetStride() const; void setVertexData(const QByteArray &data); void setIndexData(const QByteArray &data); void setStride(int stride); void setBounds(const QVector3D &min, const QVector3D &max); void setPrimitiveType(QSSGMesh::Mesh::DrawMode type); void addAttribute(QSSGMesh::RuntimeMeshData::Attribute::Semantic semantic, int offset, QSSGMesh::Mesh::ComponentType componentType); void addAttribute(const Attribute &att); void addSubset(quint32 offset, quint32 count, const QVector3D &boundsMin, const QVector3D &boundsMax, const QString &name = {}); void clear(); void clearAttributes(); uint32_t generationId() const; const QSSGMesh::RuntimeMeshData &meshData() const; QString debugObjectName; void clearVertexAndIndex(); void clearTarget(); void setTargetData(const QByteArray &data); void addTargetAttribute(quint32 targetId, QSSGMesh::RuntimeMeshData::Attribute::Semantic semantic, int offset, int stride = 0); void addTargetAttribute(const TargetAttribute &att); protected: Q_DISABLE_COPY(QSSGRenderGeometry) void markDirty(); uint32_t m_generationId = 1; QSSGMesh::RuntimeMeshData m_meshData; QSSGBounds3 m_bounds; }; QT_END_NAMESPACE #endif // QSSG_GEOMETRY_H