better implementation for bin file name checking

This commit is contained in:
Selmar Kok 2018-10-05 16:25:54 +02:00
parent 7cb31e4e23
commit c884e5827e

View File

@ -4567,7 +4567,7 @@ bool TinyGLTF::WriteGltfSceneToFile(Model *model, const std::string &filename,
} }
// BUFFERS // BUFFERS
int numDefaultBufferNamesUsed = 0; std::vector<std::string> usedUris;
json buffers; json buffers;
for (unsigned int i = 0; i < model->buffers.size(); ++i) { for (unsigned int i = 0; i < model->buffers.size(); ++i) {
json buffer; json buffer;
@ -4575,17 +4575,26 @@ bool TinyGLTF::WriteGltfSceneToFile(Model *model, const std::string &filename,
SerializeGltfBuffer(model->buffers[i], buffer); SerializeGltfBuffer(model->buffers[i], buffer);
} else { } else {
std::string binSavePath; std::string binSavePath;
std::string binUri; std::string binUri;
if (!model->buffers[i].uri.empty() if (!model->buffers[i].uri.empty()
&& !IsDataURI(model->buffers[i].uri)) { && !IsDataURI(model->buffers[i].uri)) {
binUri = model->buffers[i].uri; binUri = model->buffers[i].uri;
} }
else { else {
binUri = defaultBinFilename; binUri = defaultBinFilename + defaultBinFileExt;
if(numDefaultBufferNamesUsed > 0) bool inUse = true;
binUri += std::to_string(numDefaultBufferNamesUsed++); int numUsed = 0;
binUri += defaultBinFileExt; while(inUse) {
} inUse = false;
for (const std::string& usedName : usedUris) {
if (binUri.compare(usedName) != 0) continue;
inUse = true;
binUri = defaultBinFilename + std::to_string(numUsed++) + defaultBinFileExt;
break;
}
}
}
usedUris.push_back(binUri);
binSavePath = JoinPath(baseDir, binUri); binSavePath = JoinPath(baseDir, binUri);
SerializeGltfBuffer(model->buffers[i], buffer, binSavePath, SerializeGltfBuffer(model->buffers[i], buffer, binSavePath,
binUri); binUri);