Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qssgmeshbvhbuilder_p.h
Go to the documentation of this file.
1// Copyright (C) 2020 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5
6#ifndef QSSGMESHBVHBUILDER_H
7#define QSSGMESHBVHBUILDER_H
8
9//
10// W A R N I N G
11// -------------
12//
13// This file is not part of the Qt API. It exists purely as an
14// implementation detail. This header file may change from version to
15// version without notice, or even be removed.
16//
17// We mean it.
18//
19#include <QtQuick3DUtils/private/qtquick3dutilsglobal_p.h>
20#include <QtQuick3DUtils/private/qssgmeshbvh_p.h>
21#include <QtQuick3DUtils/private/qssgmesh_p.h>
22
24
26{
27public:
28 QSSGMeshBVHBuilder(const QSSGMesh::Mesh &mesh);
29 QSSGMeshBVHBuilder(const QByteArray &vertexBuffer,
30 int stride,
31 int posOffset,
32 bool hasUV = false,
33 int uvOffset = -1,
34 bool hasIndexBuffer = false,
35 const QByteArray &indexBuffer = QByteArray(),
36 QSSGRenderComponentType indexBufferType = QSSGRenderComponentType::Int32);
37
38 std::unique_ptr<QSSGMeshBVH> buildTree();
39
40private:
41 enum class Axis
42 {
43 None = -1,
44 X = 0,
45 Y = 1,
46 Z = 2
47 };
48 struct Split {
49 Axis axis;
50 float pos;
51 };
52
53 QSSGMeshBVHTriangles calculateTriangleBounds(quint32 indexOffset, quint32 indexCount) const;
54
55 static QSSGMeshBVHNode::Handle splitNode(QSSGMeshBVH &bvh, QSSGMeshBVHNode::Handle node, quint32 offset, quint32 count, quint32 depth = 0);
56 static QSSGBounds3 getBounds(const QSSGMeshBVH &bvh, quint32 offset, quint32 count);
57 static Split getOptimalSplit(const QSSGMeshBVH &bvh, const QSSGBounds3 &nodeBounds, quint32 offset, quint32 count);
58 static Axis getLongestDimension(const QSSGBounds3 &nodeBounds);
59 static float getAverageValue(const QSSGMeshBVH &bvh, quint32 offset, quint32 count, Axis axis);
60 static quint32 partition(QSSGMeshBVH &bvh, quint32 offset, quint32 count, const Split &split);
61
62 QSSGMesh::Mesh m_mesh;
63 QSSGRenderComponentType m_indexBufferComponentType;
64 QByteArray m_indexBufferData;
65 QByteArray m_vertexBufferData;
66 quint32 m_vertexStride;
67 bool m_hasPositionData = false;
68 quint32 m_vertexPosOffset;
69 bool m_hasUVData = false;
70 quint32 m_vertexUVOffset;
71 bool m_hasIndexBuffer = true;
72};
73
74QT_END_NAMESPACE
75
76#endif // QSSGMESHBVHBUILDER_H
Combined button and popup list for selecting options.
static QT_BEGIN_NAMESPACE constexpr quint32 QSSG_MAX_TREE_DEPTH
static QVector2D getVertexBufferValueUV(quint32 index, const quint32 vertexStride, const quint32 vertexUVOffset, const QByteArray &vertexBufferData)
static quint32 getIndexBufferValue(quint32 index, const quint32 indexCount, const QByteArray &indexBufferData)
static void calculateTriangleBoundsImpl(quint32 indexOffset, quint32 indexCount, const QByteArray &indexBufferData, const QByteArray &vertexBufferData, const quint32 vertexStride, const quint32 vertexUVOffset, const quint32 vertexPosOffset, QSSGMeshBVHTriangles &triangleBounds)
static constexpr quint32 QSSG_MAX_LEAF_TRIANGLES
static QVector3D getVertexBufferValuePosition(quint32 index, const quint32 vertexStride, const quint32 vertexPosOffset, const QByteArray &vertexBufferData)