continue;
}
- std::shared_ptr<RWGltf_CafWriter::Mesh> aMeshPtr;
-#ifdef HAVE_DRACO
- ++aMeshIndex;
- if (myDracoParameters.DracoCompression)
+ for (RWGltf_GltfFaceList::Iterator aGltfFaceIter (*aGltfFaceList); aGltfFaceIter.More() && aPSentryBin.More(); aGltfFaceIter.Next())
{
- if (aMeshIndex <= aMeshes.size())
- {
- aMeshPtr = aMeshes.at(aMeshIndex - 1);
- }
- else
+ const Handle(RWGltf_GltfFace)& aGltfFace = aGltfFaceIter.Value();
+
+ std::shared_ptr<RWGltf_CafWriter::Mesh> aMeshPtr;
+#ifdef HAVE_DRACO
+ ++aMeshIndex;
+ if (myDracoParameters.DracoCompression)
{
- aMeshes.push_back(std::make_shared<RWGltf_CafWriter::Mesh>(RWGltf_CafWriter::Mesh()));
- aMeshPtr = aMeshes.back();
+ if (aMeshIndex <= aMeshes.size())
+ {
+ aMeshPtr = aMeshes.at(aMeshIndex - 1);
+ }
+ else
+ {
+ aMeshes.push_back(std::make_shared<RWGltf_CafWriter::Mesh>(RWGltf_CafWriter::Mesh()));
+ aMeshPtr = aMeshes.back();
+ }
}
- }
#endif
- for (RWGltf_GltfFaceList::Iterator aGltfFaceIter (*aGltfFaceList); aGltfFaceIter.More() && aPSentryBin.More(); aGltfFaceIter.Next())
- {
- const Handle(RWGltf_GltfFace)& aGltfFace = aGltfFaceIter.Value();
-
Handle(RWGltf_GltfFace) anOldGltfFace;
if (aWrittenPrimData.Find (aGltfFace->Shape, anOldGltfFace))
{
for (RWGltf_GltfFaceList::Iterator aFaceGroupIter (*aGltfFaceList); aFaceGroupIter.More(); aFaceGroupIter.Next())
{
const Handle(RWGltf_GltfFace)& aGltfFace = aFaceGroupIter.Value();
- const int aPrevSize = aDracoBufIndMap.Size();
- const int aTempDracoBufInd = aDracoBufInd;
- if (myDracoParameters.DracoCompression
- && !aDracoBufIndMap.FindFromKey (aGltfFace->NodePos.Id, aDracoBufInd))
- {
- aDracoBufIndMap.Add (aGltfFace->NodePos.Id, aDracoBufInd);
- }
+ int aCurrentDracoBufInd = 0;
- writePrimArray (*aGltfFace, aNodeName, aDracoBufInd, toStartPrims);
- if (aTempDracoBufInd != aDracoBufInd)
- {
- aDracoBufInd = aTempDracoBufInd;
- }
- if (!myDracoParameters.DracoCompression || aDracoBufIndMap.Size() > aPrevSize)
+ if (myDracoParameters.DracoCompression)
{
- ++aDracoBufInd;
+ // Check if we've seen this NodePos.Id before
+ if (!aDracoBufIndMap.FindFromKey(aGltfFace->NodePos.Id, aCurrentDracoBufInd))
+ {
+ // New Draco buffer entry needed
+ aCurrentDracoBufInd = aDracoBufInd;
+ aDracoBufIndMap.Add(aGltfFace->NodePos.Id, aCurrentDracoBufInd);
+ ++aDracoBufInd;
+ }
}
+
+ writePrimArray(*aGltfFace, aNodeName, aCurrentDracoBufInd, toStartPrims);
}
}
else
}
const Handle(RWGltf_GltfFace)& aGltfFace = aGltfFaceList->First();
- const int aPrevSize = aDracoBufIndMap.Size();
- const int aTempDracoBufInd = aDracoBufInd;
- if (myDracoParameters.DracoCompression
- && !aDracoBufIndMap.FindFromKey(aGltfFace->NodePos.Id, aDracoBufInd))
- {
- aDracoBufIndMap.Add(aGltfFace->NodePos.Id, aDracoBufInd);
- }
+ int aCurrentDracoBufInd = 0;
- writePrimArray (*aGltfFace, aNodeName, aDracoBufInd, toStartPrims);
- if (aTempDracoBufInd != aDracoBufInd)
- {
- aDracoBufInd = aTempDracoBufInd;
- }
- if (!myDracoParameters.DracoCompression || aDracoBufIndMap.Size() > aPrevSize)
+ if (myDracoParameters.DracoCompression)
{
- ++aDracoBufInd;
+ // Check if we've seen this NodePos.Id before
+ if (!aDracoBufIndMap.FindFromKey(aGltfFace->NodePos.Id, aCurrentDracoBufInd))
+ {
+ // New Draco buffer entry needed
+ aCurrentDracoBufInd = aDracoBufInd;
+ aDracoBufIndMap.Add(aGltfFace->NodePos.Id, aCurrentDracoBufInd);
+ ++aDracoBufInd;
+ }
}
+
+ writePrimArray(*aGltfFace, aNodeName, aCurrentDracoBufInd, toStartPrims);
}
}