1// Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB).
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include "attribute_p.h"
5#include <Qt3DCore/private/qattribute_p.h>
6#include <Qt3DRender/private/stringtoint_p.h>
7
8QT_BEGIN_NAMESPACE
9
10using namespace Qt3DCore;
11
12namespace Qt3DRender {
13namespace Render {
14
15Attribute::Attribute()
16 : BackendNode(ReadOnly)
17 , m_nameId(0)
18 , m_vertexBaseType(QAttribute::Float)
19 , m_vertexSize(1)
20 , m_count(0)
21 , m_byteStride(0)
22 , m_byteOffset(0)
23 , m_divisor(0)
24 , m_attributeType(QAttribute::VertexAttribute)
25 , m_attributeDirty(false)
26{
27}
28
29Attribute::~Attribute()
30{
31}
32
33void Attribute::cleanup()
34{
35 m_vertexBaseType = QAttribute::Float;
36 m_vertexSize = 1;
37 m_count = 0;
38 m_byteStride = 0;
39 m_byteOffset = 0;
40 m_divisor = 0;
41 m_attributeType = QAttribute::VertexAttribute;
42 m_bufferId = Qt3DCore::QNodeId();
43 m_name.clear();
44 m_attributeDirty = false;
45 m_nameId = 0;
46}
47
48void Attribute::syncFromFrontEnd(const QNode *frontEnd, bool firstTime)
49{
50 BackendNode::syncFromFrontEnd(frontEnd, firstTime);
51 const QAttribute *node = qobject_cast<const QAttribute *>(object: frontEnd);
52 if (!node)
53 return;
54
55 m_attributeDirty = firstTime;
56 if (m_name != node->name()) {
57 m_name = node->name();
58 m_nameId = StringToInt::lookupId(str: m_name);
59 m_attributeDirty = true;
60 }
61 if (m_vertexBaseType != node->vertexBaseType()) {
62 m_vertexBaseType = node->vertexBaseType();
63 m_attributeDirty = true;
64 }
65 if (m_vertexSize != node->vertexSize()) {
66 m_vertexSize = node->vertexSize();
67 m_attributeDirty = true;
68 }
69 if (m_count != node->count()) {
70 m_count = node->count();
71 m_attributeDirty = true;
72 }
73 if (m_byteStride != node->byteStride()) {
74 m_byteStride = node->byteStride();
75 m_attributeDirty = true;
76 }
77 if (m_byteOffset != node->byteOffset()) {
78 m_byteOffset = node->byteOffset();
79 m_attributeDirty = true;
80 }
81 if (m_divisor != node->divisor()) {
82 m_divisor = node->divisor();
83 m_attributeDirty = true;
84 }
85 if (m_attributeType != node->attributeType()) {
86 m_attributeType = node->attributeType();
87 m_attributeDirty = true;
88 }
89 const auto bufferId = node->buffer() ? node->buffer()->id() : QNodeId{};
90 if (bufferId != m_bufferId) {
91 m_bufferId = bufferId;
92 m_attributeDirty = true;
93 }
94
95 markDirty(changes: AbstractRenderer::AllDirty);
96}
97
98void Attribute::unsetDirty()
99{
100 m_attributeDirty = false;
101}
102
103} // namespace Render
104} // namespace Qt3DRender
105
106QT_END_NAMESPACE
107

source code of qt3d/src/render/geometry/attribute.cpp