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>
64 if (
this != &inOther) {
76struct AssetVertexEntry;
77struct AssetMeshSubset;
78struct RuntimeMeshData;
81class Q_QUICK3DUTILS_EXPORT
Mesh
143 QVector<Subset>
subsets()
const {
return m_subsets; }
150 static Mesh fromAssetData(
const QVector<AssetVertexEntry> &vbufEntries,
152 ComponentType indexComponentType,
153 const QVector<AssetMeshSubset> &subsets,
159 bool isValid()
const {
return !m_subsets.isEmpty(); }
167 bool hasLightmapUVChannel()
const;
168 bool createLightmapUVChannel(
uint lightmapBaseResolution);
171 DrawMode m_drawMode = DrawMode::Triangles;
172 Winding m_winding = Winding::CounterClockwise;
173 VertexBuffer m_vertexBuffer;
174 IndexBuffer m_indexBuffer;
175 TargetBuffer m_targetBuffer;
176 QVector<Subset> m_subsets;
194 quint32 boundsPositionEntryIndex = std::numeric_limits<quint32>::max();
214 TexCoord0Semantic = TexCoordSemantic
223 case IndexSemantic:
return 1;
224 case PositionSemantic:
return 3;
225 case NormalSemantic:
return 3;
226 case TexCoord0Semantic:
return 2;
227 case TexCoord1Semantic:
return 2;
228 case TangentSemantic:
return 3;
229 case BinormalSemantic:
return 3;
230 case JointSemantic:
return 4;
231 case WeightSemantic:
return 4;
232 case ColorSemantic:
return 4;
234 Q_UNREACHABLE_RETURN(0);
244 static const int MAX_ATTRIBUTES = 16;
245 static const int MAX_TARGET_ATTRIBUTES = 32;
249 clearVertexAndIndex();
254 m_vertexBuffer.clear();
255 m_indexBuffer.clear();
257 m_attributeCount = 0;
258 m_primitiveType = Mesh::DrawMode::Triangles;
262 m_targetBuffer.clear();
263 m_targetAttributeCount = 0;
272 int m_attributeCount = 0;
274 int m_targetAttributeCount = 0;
288 return fileId == FILE_ID && fileVersion == FILE_VERSION;
291 return { FILE_ID, FILE_VERSION, {} };
307 static const quint32 LEGACY_MESH_FILE_VERSION = 3;
316 return { FILE_ID, FILE_VERSION, 0, 0 };
321 && fileVersion <= FILE_VERSION
322 && fileVersion >= LEGACY_MESH_FILE_VERSION;
326 return fileVersion >= 5;
330 return fileVersion >= 6;
334 return fileVersion >= 7;
346 return startOffset + byteCounter;
350 advance(advanceAmount);
351 quint32 alignmentAmount = 4 - (byteCounter % 4);
352 byteCounter += alignmentAmount;
353 return alignmentAmount;
357 byteCounter += advanceAmount;
379 subset.
lods.resize(lodCount);
385 static void writeFileHeader(
QIODevice *
device,
const MultiMeshInfo &meshFileInfo);
415 const float* vertexPositions,
417 size_t vertexPositionsStride,
418 size_t targetIndexCount,
420 unsigned int options,
423float Q_QUICK3DUTILS_EXPORT
simplifyScale(
const float* vertexPositions,
425 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
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
const void GLsizei GLsizei stride
GLsizei GLsizei GLfloat distance
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
QSSGRenderVertexBufferEntry & operator=(const QSSGRenderVertexBufferEntry &inOther)
QSSGRenderVertexBufferEntry(const QSSGRenderVertexBufferEntry &inOther)
quint32 m_firstItemOffset
QSSGRenderVertexBufferEntry(const QByteArray &nm, QSSGRenderComponentType type, quint32 numComponents, quint32 firstItemOffset=0)
QSSGRenderComponentType m_componentType
QSSGRenderVertexBufferEntry()