- support writing multiple bin files

- use existing buffer.uri as filename if not empty and not a data uri
This commit is contained in:
Selmar Kok 2018-10-05 16:02:29 +02:00
parent 2bda71c8fb
commit 7cb31e4e23

View File

@ -4554,31 +4554,41 @@ bool TinyGLTF::WriteGltfSceneToFile(Model *model, const std::string &filename,
SerializeGltfAsset(model->asset, asset); SerializeGltfAsset(model->asset, asset);
output["asset"] = asset; output["asset"] = asset;
std::string binFilename = GetBaseFilename(filename); std::string defaultBinFilename = GetBaseFilename(filename);
std::string ext = ".bin"; std::string defaultBinFileExt = ".bin";
std::string::size_type pos = binFilename.rfind('.', binFilename.length()); std::string::size_type pos = defaultBinFilename.rfind('.', defaultBinFilename.length());
if (pos != std::string::npos) { if (pos != std::string::npos) {
binFilename = binFilename.substr(0, pos) + ext; defaultBinFilename = defaultBinFilename.substr(0, pos);
} else {
binFilename = binFilename + ".bin";
} }
std::string baseDir = GetBaseDir(filename); std::string baseDir = GetBaseDir(filename);
if (baseDir.empty()) { if (baseDir.empty()) {
baseDir = "./"; baseDir = "./";
} }
std::string binSaveFilePath = JoinPath(baseDir, binFilename); // BUFFERS
int numDefaultBufferNamesUsed = 0;
// BUFFERS (We expect only one buffer here)
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;
if (embedBuffers) { if (embedBuffers) {
SerializeGltfBuffer(model->buffers[i], buffer); SerializeGltfBuffer(model->buffers[i], buffer);
} else { } else {
SerializeGltfBuffer(model->buffers[i], buffer, binSaveFilePath, std::string binSavePath;
binFilename); std::string binUri;
if (!model->buffers[i].uri.empty()
&& !IsDataURI(model->buffers[i].uri)) {
binUri = model->buffers[i].uri;
}
else {
binUri = defaultBinFilename;
if(numDefaultBufferNamesUsed > 0)
binUri += std::to_string(numDefaultBufferNamesUsed++);
binUri += defaultBinFileExt;
}
binSavePath = JoinPath(baseDir, binUri);
SerializeGltfBuffer(model->buffers[i], buffer, binSavePath,
binUri);
} }
buffers.push_back(buffer); buffers.push_back(buffer);
} }