summaryrefslogtreecommitdiffstats
path: root/src/api/studio3d/q3dsgeometry.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/api/studio3d/q3dsgeometry.cpp')
-rw-r--r--src/api/studio3d/q3dsgeometry.cpp152
1 files changed, 152 insertions, 0 deletions
diff --git a/src/api/studio3d/q3dsgeometry.cpp b/src/api/studio3d/q3dsgeometry.cpp
new file mode 100644
index 0000000..bfc66a9
--- /dev/null
+++ b/src/api/studio3d/q3dsgeometry.cpp
@@ -0,0 +1,152 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "q3dsgeometry_p.h"
+
+QT_BEGIN_NAMESPACE
+
+Q3DSGeometry::Q3DSGeometry()
+ : d_ptr(new Q3DSGeometryPrivate(this))
+{
+}
+
+Q3DSGeometry::~Q3DSGeometry()
+{
+ delete d_ptr;
+}
+
+void Q3DSGeometry::setVertexData(const QByteArray &data)
+{
+ d_ptr->m_meshData.m_vertexBuffer = data;
+}
+
+void Q3DSGeometry::setIndexData(const QByteArray &data)
+{
+ d_ptr->m_meshData.m_indexBuffer = data;
+}
+
+const QByteArray &Q3DSGeometry::vertexBuffer() const
+{
+ return d_ptr->m_meshData.m_vertexBuffer;
+}
+
+QByteArray &Q3DSGeometry::vertexBuffer()
+{
+ return d_ptr->m_meshData.m_vertexBuffer;
+}
+
+const QByteArray &Q3DSGeometry::indexBuffer() const
+{
+ return d_ptr->m_meshData.m_indexBuffer;
+}
+
+QByteArray &Q3DSGeometry::indexBuffer()
+{
+ return d_ptr->m_meshData.m_indexBuffer;
+}
+
+int Q3DSGeometry::attributeCount() const
+{
+ return d_ptr->m_meshData.m_attributeCount;
+}
+
+void Q3DSGeometry::addAttribute(Q3DSGeometry::Attribute::Semantic semantic,
+ Q3DSGeometry::Attribute::ComponentType componentType)
+{
+ Q_ASSERT(d_ptr->m_meshData.m_attributeCount < Q3DSViewer::MeshData::MAX_ATTRIBUTES);
+
+ Q3DSViewer::MeshData::Attribute &att
+ = d_ptr->m_meshData.m_attributes[d_ptr->m_meshData.m_attributeCount];
+
+ Q3DSGeometry::Attribute::ComponentType theCompType = componentType;
+ if (theCompType == Attribute::DefaultType) {
+ theCompType = semantic == Attribute::IndexSemantic ? Attribute::U32Type
+ : Attribute::F32Type;
+ }
+ att.semantic = static_cast<Q3DSViewer::MeshData::Attribute::Semantic>(semantic);
+ att.componentType = static_cast<Q3DSViewer::MeshData::Attribute::ComponentType>(theCompType);
+ if (semantic != Q3DSGeometry::Attribute::IndexSemantic)
+ att.offset = d_ptr->getNextAttributeOffset();
+
+ d_ptr->m_meshData.m_attributeCount++;
+ d_ptr->m_meshData.m_stride = d_ptr->getNextAttributeOffset();
+}
+
+void Q3DSGeometry::addAttribute(const Q3DSGeometry::Attribute &att)
+{
+ addAttribute(att.semantic, att.componentType);
+}
+
+Q3DSGeometry::Attribute Q3DSGeometry::attribute(int idx) const
+{
+ Attribute att;
+ att.semantic = static_cast<Q3DSGeometry::Attribute::Semantic>(
+ d_ptr->m_meshData.m_attributes[idx].semantic);
+ att.componentType = static_cast<Q3DSGeometry::Attribute::ComponentType>(
+ d_ptr->m_meshData.m_attributes[idx].componentType);
+ return att;
+}
+
+Q3DSGeometry::PrimitiveType Q3DSGeometry::primitiveType() const
+{
+ return static_cast<Q3DSGeometry::PrimitiveType>(d_ptr->m_meshData.m_primitiveType);
+}
+
+void Q3DSGeometry::setPrimitiveType(Q3DSGeometry::PrimitiveType type)
+{
+ d_ptr->m_meshData.m_primitiveType = static_cast<Q3DSViewer::MeshData::PrimitiveType>(type);
+}
+
+void Q3DSGeometry::clear()
+{
+ d_ptr->m_meshData.clear();
+}
+
+Q3DSGeometryPrivate::Q3DSGeometryPrivate(Q3DSGeometry *parent)
+ : q_ptr(parent)
+{
+}
+
+Q3DSGeometryPrivate::~Q3DSGeometryPrivate()
+{
+}
+
+int Q3DSGeometryPrivate::getNextAttributeOffset() const
+{
+ int retval = 0;
+ for (int i = 0; i < m_meshData.m_attributeCount; ++i) {
+ if (m_meshData.m_attributes[i].semantic != Q3DSViewer::MeshData::Attribute::IndexSemantic) {
+ retval += m_meshData.m_attributes[i].typeSize()
+ * m_meshData.m_attributes[i].componentCount();
+ }
+ }
+ return retval;
+}
+
+QT_END_NAMESPACE