Merge branch 'master' into partial-cleanup-m3d
commit
4a29cc7fcb
|
@ -445,7 +445,7 @@ aiReturn Exporter::Export( const aiScene* pScene, const char* pFormatId, const c
|
||||||
|
|
||||||
ExportProperties emptyProperties; // Never pass NULL ExportProperties so Exporters don't have to worry.
|
ExportProperties emptyProperties; // Never pass NULL ExportProperties so Exporters don't have to worry.
|
||||||
ExportProperties* pProp = pProperties ? (ExportProperties*)pProperties : &emptyProperties;
|
ExportProperties* pProp = pProperties ? (ExportProperties*)pProperties : &emptyProperties;
|
||||||
pProp->SetPropertyBool("bJoinIdenticalVertices", must_join_again);
|
pProp->SetPropertyBool("bJoinIdenticalVertices", pp & aiProcess_JoinIdenticalVertices);
|
||||||
exp.mExportFunction(pPath,pimpl->mIOSystem.get(),scenecopy.get(), pProp);
|
exp.mExportFunction(pPath,pimpl->mIOSystem.get(),scenecopy.get(), pProp);
|
||||||
|
|
||||||
pimpl->mProgressHandler->UpdateFileWrite(4, 4);
|
pimpl->mProgressHandler->UpdateFileWrite(4, 4);
|
||||||
|
|
|
@ -1860,6 +1860,7 @@ void FBXExporter::WriteObjects ()
|
||||||
sdnode.AddChild("Version", int32_t(100));
|
sdnode.AddChild("Version", int32_t(100));
|
||||||
sdnode.AddChild("UserData", "", "");
|
sdnode.AddChild("UserData", "", "");
|
||||||
|
|
||||||
|
std::set<int32_t> setWeightedVertex;
|
||||||
// add indices and weights, if any
|
// add indices and weights, if any
|
||||||
if (b) {
|
if (b) {
|
||||||
std::vector<int32_t> subdef_indices;
|
std::vector<int32_t> subdef_indices;
|
||||||
|
@ -1867,7 +1868,8 @@ void FBXExporter::WriteObjects ()
|
||||||
int32_t last_index = -1;
|
int32_t last_index = -1;
|
||||||
for (size_t wi = 0; wi < b->mNumWeights; ++wi) {
|
for (size_t wi = 0; wi < b->mNumWeights; ++wi) {
|
||||||
int32_t vi = vertex_indices[b->mWeights[wi].mVertexId];
|
int32_t vi = vertex_indices[b->mWeights[wi].mVertexId];
|
||||||
if (vi == last_index) {
|
bool bIsWeightedAlready = (setWeightedVertex.find(vi) != setWeightedVertex.end());
|
||||||
|
if (vi == last_index || bIsWeightedAlready) {
|
||||||
// only for vertices we exported to fbx
|
// only for vertices we exported to fbx
|
||||||
// TODO, FIXME: this assumes identically-located vertices
|
// TODO, FIXME: this assumes identically-located vertices
|
||||||
// will always deform in the same way.
|
// will always deform in the same way.
|
||||||
|
@ -1877,6 +1879,7 @@ void FBXExporter::WriteObjects ()
|
||||||
// identical vertex.
|
// identical vertex.
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
setWeightedVertex.insert(vi);
|
||||||
subdef_indices.push_back(vi);
|
subdef_indices.push_back(vi);
|
||||||
subdef_weights.push_back(b->mWeights[wi].mWeight);
|
subdef_weights.push_back(b->mWeights[wi].mWeight);
|
||||||
last_index = vi;
|
last_index = vi;
|
||||||
|
|
|
@ -270,13 +270,14 @@ Ref<T> LazyDict<T>::Retrieve(unsigned int i)
|
||||||
throw DeadlyImportError("GLTF: Object at index \"" + to_string(i) + "\" is not a JSON object");
|
throw DeadlyImportError("GLTF: Object at index \"" + to_string(i) + "\" is not a JSON object");
|
||||||
}
|
}
|
||||||
|
|
||||||
T* inst = new T();
|
// Unique ptr prevents memory leak in case of Read throws an exception
|
||||||
|
auto inst = std::unique_ptr<T>(new T());
|
||||||
inst->id = std::string(mDictId) + "_" + to_string(i);
|
inst->id = std::string(mDictId) + "_" + to_string(i);
|
||||||
inst->oIndex = i;
|
inst->oIndex = i;
|
||||||
ReadMember(obj, "name", inst->name);
|
ReadMember(obj, "name", inst->name);
|
||||||
inst->Read(obj, mAsset);
|
inst->Read(obj, mAsset);
|
||||||
|
|
||||||
return Add(inst);
|
return Add(inst.release());
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
|
|
Loading…
Reference in New Issue