mirror of
https://git.mirrors.martin98.com/https://github.com/syoyo/tinygltf.git
synced 2025-08-14 23:56:01 +08:00
dont serialize a couple of empty arrays
This commit is contained in:
parent
e2c3fe1c0b
commit
eb9d29c06e
121
tiny_gltf.h
121
tiny_gltf.h
@ -7003,14 +7003,16 @@ static void SerializeGltfTexture(Texture &texture, json &o) {
|
|||||||
///
|
///
|
||||||
static void SerializeGltfModel(Model *model, json &o) {
|
static void SerializeGltfModel(Model *model, json &o) {
|
||||||
// ACCESSORS
|
// ACCESSORS
|
||||||
json accessors;
|
if (model->accessors.size()) {
|
||||||
JsonReserveArray(accessors, model->accessors.size());
|
json accessors;
|
||||||
for (unsigned int i = 0; i < model->accessors.size(); ++i) {
|
JsonReserveArray(accessors, model->accessors.size());
|
||||||
json accessor;
|
for (unsigned int i = 0; i < model->accessors.size(); ++i) {
|
||||||
SerializeGltfAccessor(model->accessors[i], accessor);
|
json accessor;
|
||||||
JsonPushBack(accessors, std::move(accessor));
|
SerializeGltfAccessor(model->accessors[i], accessor);
|
||||||
|
JsonPushBack(accessors, std::move(accessor));
|
||||||
|
}
|
||||||
|
JsonAddMember(o, "accessors", std::move(accessors));
|
||||||
}
|
}
|
||||||
JsonAddMember(o, "accessors", std::move(accessors));
|
|
||||||
|
|
||||||
// ANIMATIONS
|
// ANIMATIONS
|
||||||
if (model->animations.size()) {
|
if (model->animations.size()) {
|
||||||
@ -7033,14 +7035,16 @@ static void SerializeGltfModel(Model *model, json &o) {
|
|||||||
JsonAddMember(o, "asset", std::move(asset));
|
JsonAddMember(o, "asset", std::move(asset));
|
||||||
|
|
||||||
// BUFFERVIEWS
|
// BUFFERVIEWS
|
||||||
json bufferViews;
|
if(model->bufferViews.size()) {
|
||||||
JsonReserveArray(bufferViews, model->bufferViews.size());
|
json bufferViews;
|
||||||
for (unsigned int i = 0; i < model->bufferViews.size(); ++i) {
|
JsonReserveArray(bufferViews, model->bufferViews.size());
|
||||||
json bufferView;
|
for (unsigned int i = 0; i < model->bufferViews.size(); ++i) {
|
||||||
SerializeGltfBufferView(model->bufferViews[i], bufferView);
|
json bufferView;
|
||||||
JsonPushBack(bufferViews, std::move(bufferView));
|
SerializeGltfBufferView(model->bufferViews[i], bufferView);
|
||||||
|
JsonPushBack(bufferViews, std::move(bufferView));
|
||||||
|
}
|
||||||
|
JsonAddMember(o, "bufferViews", std::move(bufferViews));
|
||||||
}
|
}
|
||||||
JsonAddMember(o, "bufferViews", std::move(bufferViews));
|
|
||||||
|
|
||||||
// Extensions used
|
// Extensions used
|
||||||
if (model->extensionsUsed.size()) {
|
if (model->extensionsUsed.size()) {
|
||||||
@ -7304,20 +7308,21 @@ bool TinyGLTF::WriteGltfSceneToStream(Model *model, std::ostream &stream,
|
|||||||
SerializeGltfModel(model, output);
|
SerializeGltfModel(model, output);
|
||||||
|
|
||||||
// BUFFERS
|
// BUFFERS
|
||||||
std::vector<std::string> usedUris;
|
|
||||||
std::vector<unsigned char> binBuffer;
|
std::vector<unsigned char> binBuffer;
|
||||||
json buffers;
|
if(model->buffers.size()) {
|
||||||
JsonReserveArray(buffers, model->buffers.size());
|
json buffers;
|
||||||
for (unsigned int i = 0; i < model->buffers.size(); ++i) {
|
JsonReserveArray(buffers, model->buffers.size());
|
||||||
json buffer;
|
for (unsigned int i = 0; i < model->buffers.size(); ++i) {
|
||||||
if (writeBinary && i==0 && model->buffers[i].uri.empty()){
|
json buffer;
|
||||||
SerializeGltfBufferBin(model->buffers[i], buffer,binBuffer);
|
if (writeBinary && i==0 && model->buffers[i].uri.empty()){
|
||||||
} else {
|
SerializeGltfBufferBin(model->buffers[i], buffer,binBuffer);
|
||||||
SerializeGltfBuffer(model->buffers[i], buffer);
|
} else {
|
||||||
|
SerializeGltfBuffer(model->buffers[i], buffer);
|
||||||
|
}
|
||||||
|
JsonPushBack(buffers, std::move(buffer));
|
||||||
}
|
}
|
||||||
JsonPushBack(buffers, std::move(buffer));
|
JsonAddMember(output, "buffers", std::move(buffers));
|
||||||
}
|
}
|
||||||
JsonAddMember(output, "buffers", std::move(buffers));
|
|
||||||
|
|
||||||
// IMAGES
|
// IMAGES
|
||||||
if (model->images.size()) {
|
if (model->images.size()) {
|
||||||
@ -7371,44 +7376,46 @@ bool TinyGLTF::WriteGltfSceneToFile(Model *model, const std::string &filename,
|
|||||||
// BUFFERS
|
// BUFFERS
|
||||||
std::vector<std::string> usedUris;
|
std::vector<std::string> usedUris;
|
||||||
std::vector<unsigned char> binBuffer;
|
std::vector<unsigned char> binBuffer;
|
||||||
json buffers;
|
if (model->buffers.size()) {
|
||||||
JsonReserveArray(buffers, model->buffers.size());
|
json buffers;
|
||||||
for (unsigned int i = 0; i < model->buffers.size(); ++i) {
|
JsonReserveArray(buffers, model->buffers.size());
|
||||||
json buffer;
|
for (unsigned int i = 0; i < model->buffers.size(); ++i) {
|
||||||
if (writeBinary && i==0 && model->buffers[i].uri.empty()){
|
json buffer;
|
||||||
SerializeGltfBufferBin(model->buffers[i], buffer,binBuffer);
|
if (writeBinary && i==0 && model->buffers[i].uri.empty()){
|
||||||
} else if (embedBuffers) {
|
SerializeGltfBufferBin(model->buffers[i], buffer,binBuffer);
|
||||||
SerializeGltfBuffer(model->buffers[i], buffer);
|
} else if (embedBuffers) {
|
||||||
} else {
|
SerializeGltfBuffer(model->buffers[i], buffer);
|
||||||
std::string binSavePath;
|
|
||||||
std::string binUri;
|
|
||||||
if (!model->buffers[i].uri.empty() && !IsDataURI(model->buffers[i].uri)) {
|
|
||||||
binUri = model->buffers[i].uri;
|
|
||||||
} else {
|
} else {
|
||||||
binUri = defaultBinFilename + defaultBinFileExt;
|
std::string binSavePath;
|
||||||
bool inUse = true;
|
std::string binUri;
|
||||||
int numUsed = 0;
|
if (!model->buffers[i].uri.empty() && !IsDataURI(model->buffers[i].uri)) {
|
||||||
while (inUse) {
|
binUri = model->buffers[i].uri;
|
||||||
inUse = false;
|
} else {
|
||||||
for (const std::string &usedName : usedUris) {
|
binUri = defaultBinFilename + defaultBinFileExt;
|
||||||
if (binUri.compare(usedName) != 0) continue;
|
bool inUse = true;
|
||||||
inUse = true;
|
int numUsed = 0;
|
||||||
binUri = defaultBinFilename + std::to_string(numUsed++) +
|
while (inUse) {
|
||||||
defaultBinFileExt;
|
inUse = false;
|
||||||
break;
|
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);
|
||||||
|
if (!SerializeGltfBuffer(model->buffers[i], buffer, binSavePath,
|
||||||
|
binUri)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
usedUris.push_back(binUri);
|
JsonPushBack(buffers, std::move(buffer));
|
||||||
binSavePath = JoinPath(baseDir, binUri);
|
|
||||||
if (!SerializeGltfBuffer(model->buffers[i], buffer, binSavePath,
|
|
||||||
binUri)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
JsonPushBack(buffers, std::move(buffer));
|
|
||||||
}
|
|
||||||
JsonAddMember(output, "buffers", std::move(buffers));
|
JsonAddMember(output, "buffers", std::move(buffers));
|
||||||
|
}
|
||||||
|
|
||||||
// IMAGES
|
// IMAGES
|
||||||
if (model->images.size()) {
|
if (model->images.size()) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user