|
@@ -91,6 +91,7 @@ bool Model::BeginLoad(Deserializer& source)
|
|
|
geometries_.Clear();
|
|
geometries_.Clear();
|
|
|
geometryBoneMappings_.Clear();
|
|
geometryBoneMappings_.Clear();
|
|
|
geometryCenters_.Clear();
|
|
geometryCenters_.Clear();
|
|
|
|
|
+ geometryNames_.Clear();
|
|
|
morphs_.Clear();
|
|
morphs_.Clear();
|
|
|
vertexBuffers_.Clear();
|
|
vertexBuffers_.Clear();
|
|
|
indexBuffers_.Clear();
|
|
indexBuffers_.Clear();
|
|
@@ -302,6 +303,13 @@ bool Model::BeginLoad(Deserializer& source)
|
|
|
// MODEL_VERSION
|
|
// MODEL_VERSION
|
|
|
unsigned version = source.ReadUInt();
|
|
unsigned version = source.ReadUInt();
|
|
|
|
|
|
|
|
|
|
+ // Read geometry names
|
|
|
|
|
+ geometryNames_.Resize(geometries_.Size());
|
|
|
|
|
+ for (unsigned i = 0; i < geometries_.Size(); ++i)
|
|
|
|
|
+ {
|
|
|
|
|
+ geometryNames_[i] = source.ReadString();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
SetMemoryUse(memoryUse);
|
|
SetMemoryUse(memoryUse);
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
@@ -445,6 +453,10 @@ bool Model::Save(Serializer& dest) const
|
|
|
|
|
|
|
|
dest.WriteUInt(MODEL_VERSION);
|
|
dest.WriteUInt(MODEL_VERSION);
|
|
|
|
|
|
|
|
|
|
+ // Write geometry names
|
|
|
|
|
+ for (unsigned i = 0; i < geometryNames_.Size(); ++i)
|
|
|
|
|
+ dest.WriteString(geometryNames_[i]);
|
|
|
|
|
+
|
|
|
// ATOMIC END
|
|
// ATOMIC END
|
|
|
|
|
|
|
|
|
|
|
|
@@ -512,6 +524,7 @@ void Model::SetNumGeometries(unsigned num)
|
|
|
geometries_.Resize(num);
|
|
geometries_.Resize(num);
|
|
|
geometryBoneMappings_.Resize(num);
|
|
geometryBoneMappings_.Resize(num);
|
|
|
geometryCenters_.Resize(num);
|
|
geometryCenters_.Resize(num);
|
|
|
|
|
+ geometryNames_.Resize(num);
|
|
|
|
|
|
|
|
// For easier creation of from-scratch geometry, ensure that all geometries start with at least 1 LOD level (0 makes no sense)
|
|
// For easier creation of from-scratch geometry, ensure that all geometries start with at least 1 LOD level (0 makes no sense)
|
|
|
for (unsigned i = 0; i < geometries_.Size(); ++i)
|
|
for (unsigned i = 0; i < geometries_.Size(); ++i)
|
|
@@ -653,8 +666,11 @@ SharedPtr<Model> Model::Clone(const String& cloneName) const
|
|
|
|
|
|
|
|
// Deep copy all the geometry LOD levels and refer to the copied vertex/index buffers
|
|
// Deep copy all the geometry LOD levels and refer to the copied vertex/index buffers
|
|
|
ret->geometries_.Resize(geometries_.Size());
|
|
ret->geometries_.Resize(geometries_.Size());
|
|
|
|
|
+ ret->geometryNames_.Resize(geometryNames_.Size());
|
|
|
for (unsigned i = 0; i < geometries_.Size(); ++i)
|
|
for (unsigned i = 0; i < geometries_.Size(); ++i)
|
|
|
{
|
|
{
|
|
|
|
|
+ ret->geometryNames_[i] = geometryNames_[i];
|
|
|
|
|
+
|
|
|
ret->geometries_[i].Resize(geometries_[i].Size());
|
|
ret->geometries_[i].Resize(geometries_[i].Size());
|
|
|
for (unsigned j = 0; j < geometries_[i].Size(); ++j)
|
|
for (unsigned j = 0; j < geometries_[i].Size(); ++j)
|
|
|
{
|
|
{
|
|
@@ -749,4 +765,31 @@ unsigned Model::GetMorphRangeCount(unsigned bufferIndex) const
|
|
|
return bufferIndex < vertexBuffers_.Size() ? morphRangeCounts_[bufferIndex] : 0;
|
|
return bufferIndex < vertexBuffers_.Size() ? morphRangeCounts_[bufferIndex] : 0;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// ATOMIC BEGIN
|
|
|
|
|
+
|
|
|
|
|
+bool Model::SetGeometryName(unsigned index, const String& name)
|
|
|
|
|
+{
|
|
|
|
|
+ if (index >= geometryNames_.Size())
|
|
|
|
|
+ {
|
|
|
|
|
+ LOGERROR("Geometry name index out of bounds");
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ geometryNames_[index] = name;
|
|
|
|
|
+
|
|
|
|
|
+ return true;
|
|
|
|
|
+
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+const String& Model::GetGeometryName(unsigned index) const
|
|
|
|
|
+{
|
|
|
|
|
+ if (index >= geometryNames_.Size())
|
|
|
|
|
+ return String::EMPTY;
|
|
|
|
|
+
|
|
|
|
|
+ return geometryNames_[index];
|
|
|
|
|
+
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// ATOMIC END
|
|
|
|
|
+
|
|
|
}
|
|
}
|