4#ifndef QSSGMESHUTILITIES_P_H
5#define QSSGMESHUTILITIES_P_H
18#include <QtQuick3DUtils/private/qtquick3dutilsglobal_p.h>
20#include <QtQuick3DUtils/private/qssgbounds3_p.h>
22#include <QtQuick3DUtils/private/qssgrenderbasetypes_p.h>
24#include <QtCore/qstring.h>
25#include <QtCore/qbytearray.h>
26#include <QtCore/qiodevice.h>
27#include <QtCore/qmap.h>
33struct AssetVertexEntry;
34struct AssetMeshSubset;
35struct RuntimeMeshData;
38class Q_QUICK3DUTILS_EXPORT
Mesh
109 ComponentType indexComponentType,
116 bool isValid()
const {
return !m_subsets.isEmpty(); }
124 bool hasLightmapUVChannel()
const;
125 bool createLightmapUVChannel(
uint lightmapBaseResolution);
128 DrawMode m_drawMode = DrawMode::Triangles;
129 Winding m_winding = Winding::CounterClockwise;
130 VertexBuffer m_vertexBuffer;
131 IndexBuffer m_indexBuffer;
132 TargetBuffer m_targetBuffer;
151 quint32 boundsPositionEntryIndex = std::numeric_limits<quint32>::max();
171 TexCoord0Semantic = TexCoordSemantic
180 case IndexSemantic:
return 1;
181 case PositionSemantic:
return 3;
182 case NormalSemantic:
return 3;
183 case TexCoord0Semantic:
return 2;
184 case TexCoord1Semantic:
return 2;
185 case TangentSemantic:
return 3;
186 case BinormalSemantic:
return 3;
187 case JointSemantic:
return 4;
188 case WeightSemantic:
return 4;
189 case ColorSemantic:
return 4;
191 Q_UNREACHABLE_RETURN(0);
201 static const int MAX_ATTRIBUTES = 16;
202 static const int MAX_TARGET_ATTRIBUTES = 32;
206 clearVertexAndIndex();
211 m_vertexBuffer.clear();
212 m_indexBuffer.clear();
214 m_attributeCount = 0;
215 m_primitiveType = Mesh::DrawMode::Triangles;
219 m_targetBuffer.clear();
220 m_targetAttributeCount = 0;
229 int m_attributeCount = 0;
231 int m_targetAttributeCount = 0;
245 return fileId == FILE_ID && fileVersion == FILE_VERSION;
248 return { FILE_ID, FILE_VERSION, {} };
264 static const quint32 LEGACY_MESH_FILE_VERSION = 3;
273 return { FILE_ID, FILE_VERSION, 0, 0 };
278 && fileVersion <= FILE_VERSION
279 && fileVersion >= LEGACY_MESH_FILE_VERSION;
283 return fileVersion >= 5;
287 return fileVersion >= 6;
291 return fileVersion >= 7;
303 return startOffset + byteCounter;
307 advance(advanceAmount);
308 quint32 alignmentAmount = 4 - (byteCounter % 4);
309 byteCounter += alignmentAmount;
310 return alignmentAmount;
314 byteCounter += advanceAmount;
336 subset.
lods.resize(lodCount);
342 static void writeFileHeader(
QIODevice *
device,
const MultiMeshInfo &meshFileInfo);
372 const float* vertexPositions,
374 size_t vertexPositionsStride,
375 size_t targetIndexCount,
377 unsigned int options,
380float Q_QUICK3DUTILS_EXPORT
simplifyScale(
const float* vertexPositions,
382 size_t vertexPositionsStride);
IOBluetoothDevice * device
const char * constData() const noexcept
Returns a pointer to the const data stored in the byte array.
\inmodule QtCore \reentrant
static size_t getSizeOfType(QSSGRenderComponentType type)
Class representing 3D range or axis aligned bounding box.
VertexBuffer vertexBuffer() const
IndexBuffer indexBuffer() const
QVector< Subset > subsets() const
TargetBuffer targetBuffer() const
DrawMode drawMode() const
\macro QT_RESTRICTED_CAST_FROM_ASCII
static QString fromUtf16(const char16_t *, qsizetype size=-1)
The QVector3D class represents a vector or vertex in 3D space.
float simplifyScale(const float *vertexPositions, size_t vertexCount, size_t vertexPositionsStride)
void optimizeVertexCache(unsigned int *destination, const unsigned int *indices, size_t indexCount, size_t vertexCount)
size_t simplifyMesh(unsigned int *destination, const unsigned int *indices, size_t indexCount, const float *vertexPositions, size_t vertexCount, size_t vertexPositionsStride, size_t targetIndexCount, float targetError, unsigned int options, float *resultError)
Combined button and popup list for selecting options.
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char * destination
DBusConnection const char DBusError * error
static QString header(const QString &name)
static QByteArray fileId(HANDLE handle)
GLenum GLenum GLsizei count
const void GLsizei GLsizei stride
GLsizei GLsizei GLfloat distance
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLenum GLuint GLintptr offset
GLsizei GLenum const void * indices
unsigned long long quint64
QVector< Mesh::Lod > lods
void advance(int advanceAmount)
quint32 alignedAdvance(int advanceAmount)
MeshOffsetTracker(int offset)
static MultiMeshInfo withDefaults()
QMap< quint32, quint64 > meshEntries
Mesh::Subset toMeshSubset() const
Mesh::SubsetBounds bounds
static quint32 byteSizeForComponentType(Mesh::ComponentType componentType)
static const char * getLightmapUVAttrName()
static const char * getNormalAttrName()
static const char * getUV1AttrName()
static const char * getTexBinormalAttrName()
static const char * getPositionAttrName()
static const char * getTexTanAttrName()
static const char * getColorAttrName()
static const char * getJointAttrName()
static const char * getUV0AttrName()
static const char * getWeightAttrName()
QVector< VertexBufferEntry > entries
QSSGRenderVertexBufferEntry toRenderVertexBufferEntry() const
QVector< VertexBufferEntry > entries
int componentCount() const
QVector< Mesh::Subset > m_subsets
QByteArray m_targetBuffer
void clearVertexAndIndex()
QByteArray m_vertexBuffer