diff --git a/tiny_gltf.h b/tiny_gltf.h index 5e709f1..214b415 100644 --- a/tiny_gltf.h +++ b/tiny_gltf.h @@ -40,8 +40,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -136,7 +136,7 @@ namespace tinygltf { #define TINYGLTF_SHADER_TYPE_FRAGMENT_SHADER (35632) #define TINYGLTF_DOUBLE_EPS (1.e-12) -#define TINYGLTF_DOUBLE_EQUAL(a,b) (abs((b)-(a)) *out, - std::string &mime_type, const std::string &in, - size_t reqBytes, bool checkSize); +bool DecodeDataURI(std::vector *out, std::string &mime_type, + const std::string &in, size_t reqBytes, bool checkSize); #ifdef __clang__ #pragma clang diagnostic push @@ -297,8 +296,8 @@ class Value { } size_t Size() const { return (IsArray() ? ArrayLen() : Keys().size()); } - - bool operator==(const tinygltf::Value& other) const; + + bool operator==(const tinygltf::Value &other) const; protected: int type_; @@ -381,7 +380,7 @@ struct Parameter { (number_array.size() > 3 ? number_array[3] : 1.0)}}; } - bool operator==(const Parameter&) const; + bool operator==(const Parameter &) const; }; #ifdef __clang__ @@ -404,7 +403,7 @@ struct AnimationChannel { Value extras; AnimationChannel() : sampler(-1), target_node(-1) {} - bool operator==(const AnimationChannel&) const; + bool operator==(const AnimationChannel &) const; }; struct AnimationSampler { @@ -415,7 +414,7 @@ struct AnimationSampler { Value extras; AnimationSampler() : input(-1), output(-1), interpolation("LINEAR") {} - bool operator==(const AnimationSampler&) const; + bool operator==(const AnimationSampler &) const; }; struct Animation { @@ -424,7 +423,7 @@ struct Animation { std::vector samplers; Value extras; - bool operator==(const Animation&) const; + bool operator==(const Animation &) const; }; struct Skin { @@ -437,7 +436,7 @@ struct Skin { inverseBindMatrices = -1; skeleton = -1; } - bool operator==(const Skin&) const; + bool operator==(const Skin &) const; }; struct Sampler { @@ -456,7 +455,7 @@ struct Sampler { Sampler() : wrapS(TINYGLTF_TEXTURE_WRAP_REPEAT), wrapT(TINYGLTF_TEXTURE_WRAP_REPEAT) {} - bool operator==(const Sampler&) const; + bool operator==(const Sampler &) const; }; struct Image { @@ -472,15 +471,21 @@ struct Image { Value extras; ExtensionMap extensions; - // When this flag is true, data is stored to `image` in as-is format(e.g. jpeg compressed for "image/jpeg" mime) - // This feature is good if you use custom image loader function. - // (e.g. delayed decoding of images for faster glTF parsing) - // Default parser for Image does not provide as-is loading feature at the moment. - // (You can manipulate this by providing your own LoadImageData function) + // When this flag is true, data is stored to `image` in as-is format(e.g. jpeg + // compressed for "image/jpeg" mime) This feature is good if you use custom + // image loader function. (e.g. delayed decoding of images for faster glTF + // parsing) Default parser for Image does not provide as-is loading feature at + // the moment. (You can manipulate this by providing your own LoadImageData + // function) bool as_is; - - Image() : as_is(false) { bufferView = -1; width = -1; height = -1; component = -1; } - bool operator==(const Image&) const; + + Image() : as_is(false) { + bufferView = -1; + width = -1; + height = -1; + component = -1; + } + bool operator==(const Image &) const; }; struct Texture { @@ -492,7 +497,7 @@ struct Texture { ExtensionMap extensions; Texture() : sampler(-1), source(-1) {} - bool operator==(const Texture&) const; + bool operator==(const Texture &) const; }; // Each extension should be stored in a ParameterMap. @@ -507,7 +512,7 @@ struct Material { ExtensionMap extensions; Value extras; - bool operator==(const Material&) const; + bool operator==(const Material &) const; }; struct BufferView { @@ -521,7 +526,7 @@ struct BufferView { Value extras; BufferView() : byteOffset(0), byteStride(0) {} - bool operator==(const BufferView&) const; + bool operator==(const BufferView &) const; }; struct Accessor { @@ -578,7 +583,7 @@ struct Accessor { } Accessor() { bufferView = -1; } - bool operator==(const tinygltf::Accessor&) const; + bool operator==(const tinygltf::Accessor &) const; }; struct PerspectiveCamera { @@ -588,12 +593,12 @@ struct PerspectiveCamera { double znear; // required. min > 0 PerspectiveCamera() - : aspectRatio(0.0f), - yfov(0.0f), - zfar(0.0f) // 0 = use infinite projecton matrix + : aspectRatio(0.0), + yfov(0.0), + zfar(0.0) // 0 = use infinite projecton matrix , - znear(0.0f) {} - bool operator==(const PerspectiveCamera&) const; + znear(0.0) {} + bool operator==(const PerspectiveCamera &) const; ExtensionMap extensions; Value extras; @@ -605,8 +610,8 @@ struct OrthographicCamera { double zfar; // required. `zfar` must be greater than `znear`. double znear; // required - OrthographicCamera() : xmag(0.0f), ymag(0.0f), zfar(0.0f), znear(0.0f) {} - bool operator==(const OrthographicCamera&) const; + OrthographicCamera() : xmag(0.0), ymag(0.0), zfar(0.0), znear(0.0) {} + bool operator==(const OrthographicCamera &) const; ExtensionMap extensions; Value extras; @@ -620,7 +625,7 @@ struct Camera { OrthographicCamera orthographic; Camera() {} - bool operator==(const Camera&) const; + bool operator==(const Camera &) const; ExtensionMap extensions; Value extras; @@ -635,7 +640,7 @@ struct Primitive { // when rendering. int indices; // The index of the accessor that contains the indices. int mode; // one of TINYGLTF_MODE_*** - std::vector> targets; // array of morph targets, + std::vector > targets; // array of morph targets, // where each target is a dict with attribues in ["POSITION, "NORMAL", // "TANGENT"] pointing // to their corresponding accessors @@ -645,18 +650,18 @@ struct Primitive { material = -1; indices = -1; } - bool operator==(const Primitive&) const; + bool operator==(const Primitive &) const; }; struct Mesh { std::string name; std::vector primitives; std::vector weights; // weights to be applied to the Morph Targets - std::vector> targets; + std::vector > targets; ExtensionMap extensions; Value extras; - bool operator==(const Mesh&) const; + bool operator==(const Mesh &) const; }; class Node { @@ -680,7 +685,7 @@ class Node { extras = rhs.extras; } ~Node() {} - bool operator==(const Node&) const; + bool operator==(const Node &) const; int camera; // the index of the camera referenced by this node @@ -704,8 +709,8 @@ struct Buffer { std::string uri; // considered as required here but not in the spec (need to clarify) Value extras; - - bool operator==(const Buffer&) const; + + bool operator==(const Buffer &) const; }; struct Asset { @@ -716,7 +721,7 @@ struct Asset { ExtensionMap extensions; Value extras; - bool operator==(const Asset&) const; + bool operator==(const Asset &) const; }; struct Scene { @@ -726,7 +731,7 @@ struct Scene { ExtensionMap extensions; Value extras; - bool operator==(const Scene&) const; + bool operator==(const Scene &) const; }; struct Light { @@ -734,14 +739,14 @@ struct Light { std::vector color; std::string type; - bool operator==(const Light&) const; + bool operator==(const Light &) const; }; class Model { public: Model() {} ~Model() {} - bool operator==(const Model&) const; + bool operator==(const Model &) const; std::vector accessors; std::vector animations; @@ -1081,308 +1086,218 @@ using nlohmann::json; namespace tinygltf { // Equals function for Value, for recursivity -bool Equals(const tinygltf::Value& one, const tinygltf::Value& other) -{ - if (one.Type() != other.Type()) - return false; +static bool Equals(const tinygltf::Value &one, const tinygltf::Value &other) { + if (one.Type() != other.Type()) return false; - switch (one.Type()) - { - case NULL_TYPE: - return true; - case BOOL_TYPE: - return one.Get() == other.Get(); - case NUMBER_TYPE: - return one.Get() == other.Get(); - case INT_TYPE: - return one.Get() == other.Get(); - case OBJECT_TYPE: - { - auto oneObj = one.Get(); - auto otherObj = other.Get(); - if (oneObj.size() != otherObj.size()) - return false; - for (auto& it : oneObj) - { - auto otherIt = otherObj.find(it.first); - if (otherIt == otherObj.end()) - return false; + switch (one.Type()) { + case NULL_TYPE: + return true; + case BOOL_TYPE: + return one.Get() == other.Get(); + case NUMBER_TYPE: + return TINYGLTF_DOUBLE_EQUAL(one.Get(), other.Get()); + case INT_TYPE: + return one.Get() == other.Get(); + case OBJECT_TYPE: { + auto oneObj = one.Get(); + auto otherObj = other.Get(); + if (oneObj.size() != otherObj.size()) return false; + for (auto &it : oneObj) { + auto otherIt = otherObj.find(it.first); + if (otherIt == otherObj.end()) return false; - if (!Equals(it.second, otherIt->second)) - return false; - } - return true; - } - case ARRAY_TYPE: - { - if (one.Size() != other.Size()) - return false; - for (int i = 0; i < one.Size(); ++i) - if (Equals(one.Get(i), other.Get(i))) - return false; - return true; - } - case STRING_TYPE: - return one.Get() == other.Get(); - case BINARY_TYPE: - return one.Get>() == other.Get>(); - default: - { - // unhandled type - return false; - } - } + if (!Equals(it.second, otherIt->second)) return false; + } + return true; + } + case ARRAY_TYPE: { + if (one.Size() != other.Size()) return false; + for (int i = 0; i < int(one.Size()); ++i) + if (Equals(one.Get(i), other.Get(i))) return false; + return true; + } + case STRING_TYPE: + return one.Get() == other.Get(); + case BINARY_TYPE: + return one.Get >() == + other.Get >(); + default: { + // unhandled type + return false; + } + } - return false; + return false; } // Equals function for std::vector using TINYGLTF_DOUBLE_EPSILON -bool Equals(const std::vector& one, const std::vector& other) -{ - if (one.size() != other.size()) - return false; - for (int i = 0; i < one.size(); ++i) - { - if (!TINYGLTF_DOUBLE_EQUAL(one[i], other[i])) - return false; - } - return true; +static bool Equals(const std::vector &one, + const std::vector &other) { + if (one.size() != other.size()) return false; + for (int i = 0; i < int(one.size()); ++i) { + if (!TINYGLTF_DOUBLE_EQUAL(one[size_t(i)], other[size_t(i)])) return false; + } + return true; } -bool Accessor::operator==(const Accessor& other) const -{ - return this->bufferView == other.bufferView - && this->byteOffset == other.byteOffset - && this->componentType == other.componentType - && this->count == other.count - && this->extras == other.extras - && Equals(this->maxValues, other.maxValues) - && Equals(this->minValues,other.minValues) - && this->name == other.name - && this->normalized == other.normalized - && this->type == other.type; +bool Accessor::operator==(const Accessor &other) const { + return this->bufferView == other.bufferView && + this->byteOffset == other.byteOffset && + this->componentType == other.componentType && + this->count == other.count && this->extras == other.extras && + Equals(this->maxValues, other.maxValues) && + Equals(this->minValues, other.minValues) && this->name == other.name && + this->normalized == other.normalized && this->type == other.type; } -bool Animation::operator==(const Animation& other) const -{ - return this->channels == other.channels - && this->extras == other.extras - && this->name == other.name - && this->samplers == other.samplers; +bool Animation::operator==(const Animation &other) const { + return this->channels == other.channels && this->extras == other.extras && + this->name == other.name && this->samplers == other.samplers; } -bool AnimationChannel::operator==(const AnimationChannel& other) const -{ - return this->extras == other.extras - && this->target_node == other.target_node - && this->target_path == other.target_path - && this->sampler == other.sampler; +bool AnimationChannel::operator==(const AnimationChannel &other) const { + return this->extras == other.extras && + this->target_node == other.target_node && + this->target_path == other.target_path && + this->sampler == other.sampler; } -bool AnimationSampler::operator==(const AnimationSampler& other) const -{ - return this->extras == other.extras - && this->input == other.input - && this->interpolation == other.interpolation - && this->output == other.output; +bool AnimationSampler::operator==(const AnimationSampler &other) const { + return this->extras == other.extras && this->input == other.input && + this->interpolation == other.interpolation && + this->output == other.output; } -bool Asset::operator==(const Asset& other) const -{ - return this->copyright == other.copyright - && this->extensions == other.extensions - && this->extras == other.extras - && this->generator == other.generator - && this->minVersion == other.minVersion - && this->version == other.version; +bool Asset::operator==(const Asset &other) const { + return this->copyright == other.copyright && + this->extensions == other.extensions && this->extras == other.extras && + this->generator == other.generator && + this->minVersion == other.minVersion && this->version == other.version; } -bool Buffer::operator==(const Buffer& other) const -{ - return this->data == other.data - && this->extras == other.extras - && this->name == other.name - && this->uri == other.uri; +bool Buffer::operator==(const Buffer &other) const { + return this->data == other.data && this->extras == other.extras && + this->name == other.name && this->uri == other.uri; } -bool BufferView::operator==(const BufferView& other) const -{ - return this->buffer == other.buffer - && this->byteLength == other.byteLength - && this->byteOffset == other.byteOffset - && this->byteStride == other.byteStride - && this->name == other.name - && this->target == other.target - && this->extras == other.extras; +bool BufferView::operator==(const BufferView &other) const { + return this->buffer == other.buffer && this->byteLength == other.byteLength && + this->byteOffset == other.byteOffset && + this->byteStride == other.byteStride && this->name == other.name && + this->target == other.target && this->extras == other.extras; } -bool Camera::operator==(const Camera& other) const -{ - return this->name == other.name - && this->extensions == other.extensions - && this->extras == other.extras - && this->orthographic == other.orthographic - && this->perspective == other.perspective - && this->type == other.type; +bool Camera::operator==(const Camera &other) const { + return this->name == other.name && this->extensions == other.extensions && + this->extras == other.extras && + this->orthographic == other.orthographic && + this->perspective == other.perspective && this->type == other.type; } -bool Image::operator==(const Image& other) const -{ - return this->bufferView == other.bufferView - && this->component == other.component - && this->extras == other.extras - && this->height == other.height - && this->image == other.image - && this->mimeType == other.mimeType - && this->name == other.name - && this->uri == other.uri - && this->width == other.width; +bool Image::operator==(const Image &other) const { + return this->bufferView == other.bufferView && + this->component == other.component && this->extras == other.extras && + this->height == other.height && this->image == other.image && + this->mimeType == other.mimeType && this->name == other.name && + this->uri == other.uri && this->width == other.width; } -bool Light::operator==(const Light& other) const -{ - return Equals(this->color, other.color) - && this->name == other.name - && this->type == other.type; +bool Light::operator==(const Light &other) const { + return Equals(this->color, other.color) && this->name == other.name && + this->type == other.type; } -bool Material::operator==(const Material& other) const -{ - return this->additionalValues == other.additionalValues - && this->extensions == other.extensions - && this->extras == other.extras - && this->name == other.name - && this->values == other.values; +bool Material::operator==(const Material &other) const { + return this->additionalValues == other.additionalValues && + this->extensions == other.extensions && this->extras == other.extras && + this->name == other.name && this->values == other.values; } -bool Mesh::operator==(const Mesh& other) const -{ - return this->extensions == other.extensions - && this->extras == other.extras - && this->name == other.name - && this->primitives == other.primitives - && this->targets == other.targets - && Equals(this->weights, other.weights); +bool Mesh::operator==(const Mesh &other) const { + return this->extensions == other.extensions && this->extras == other.extras && + this->name == other.name && this->primitives == other.primitives && + this->targets == other.targets && Equals(this->weights, other.weights); } -bool Model::operator==(const Model& other) const -{ - return this->accessors == other.accessors - && this->animations == other.animations - && this->asset == other.asset - && this->buffers == other.buffers - && this->bufferViews == other.bufferViews - && this->cameras == other.cameras - && this->defaultScene == other.defaultScene - && this->extensions == other.extensions - && this->extensionsRequired == other.extensionsRequired - && this->extensionsUsed == other.extensionsUsed - && this->extras == other.extras - && this->images == other.images - && this->lights == other.lights - && this->materials == other.materials - && this->meshes == other.meshes - && this->nodes == other.nodes - && this->samplers == other.samplers - && this->scenes == other.scenes - && this->skins == other.skins - && this->textures == other.textures; +bool Model::operator==(const Model &other) const { + return this->accessors == other.accessors && + this->animations == other.animations && this->asset == other.asset && + this->buffers == other.buffers && + this->bufferViews == other.bufferViews && + this->cameras == other.cameras && + this->defaultScene == other.defaultScene && + this->extensions == other.extensions && + this->extensionsRequired == other.extensionsRequired && + this->extensionsUsed == other.extensionsUsed && + this->extras == other.extras && this->images == other.images && + this->lights == other.lights && this->materials == other.materials && + this->meshes == other.meshes && this->nodes == other.nodes && + this->samplers == other.samplers && this->scenes == other.scenes && + this->skins == other.skins && this->textures == other.textures; } -bool Node::operator==(const Node& other) const -{ - return this->camera == other.camera - && this->children == other.children - && this->extensions == other.extensions - && this->extras == other.extras - && Equals(this->matrix, other.matrix) - && this->mesh == other.mesh - && this->name == other.name - && Equals(this->rotation, other.rotation) - && Equals(this->scale, other.scale) - && this->skin == other.skin - && Equals(this->translation, other.translation) - && Equals(this->weights, other.weights); +bool Node::operator==(const Node &other) const { + return this->camera == other.camera && this->children == other.children && + this->extensions == other.extensions && this->extras == other.extras && + Equals(this->matrix, other.matrix) && this->mesh == other.mesh && + this->name == other.name && Equals(this->rotation, other.rotation) && + Equals(this->scale, other.scale) && this->skin == other.skin && + Equals(this->translation, other.translation) && + Equals(this->weights, other.weights); } -bool OrthographicCamera::operator==(const OrthographicCamera& other) const -{ - return this->extensions == other.extensions - && this->extras == other.extras - && TINYGLTF_DOUBLE_EQUAL(this->xmag, other.xmag) - && TINYGLTF_DOUBLE_EQUAL(this->ymag, other.ymag) - && TINYGLTF_DOUBLE_EQUAL(this->zfar, other.zfar) - && TINYGLTF_DOUBLE_EQUAL(this->znear, other.znear); +bool OrthographicCamera::operator==(const OrthographicCamera &other) const { + return this->extensions == other.extensions && this->extras == other.extras && + TINYGLTF_DOUBLE_EQUAL(this->xmag, other.xmag) && + TINYGLTF_DOUBLE_EQUAL(this->ymag, other.ymag) && + TINYGLTF_DOUBLE_EQUAL(this->zfar, other.zfar) && + TINYGLTF_DOUBLE_EQUAL(this->znear, other.znear); } -bool Parameter::operator==(const Parameter& other) const -{ - if (this->bool_value != other.bool_value - || this->has_number_value != other.has_number_value) - return false; +bool Parameter::operator==(const Parameter &other) const { + if (this->bool_value != other.bool_value || + this->has_number_value != other.has_number_value) + return false; - if (this->has_number_value) - if(!TINYGLTF_DOUBLE_EQUAL(this->number_value, other.number_value)) - return false; - - if (this->json_double_value.size() != other.json_double_value.size()) - return false; - for (auto& it : this->json_double_value) - { - auto otherIt = other.json_double_value.find(it.first); - if (otherIt==other.json_double_value.end()) - return false; - - if(!TINYGLTF_DOUBLE_EQUAL(it.second, otherIt->second)) - return false; - } - - if (!Equals(this->number_array, other.number_array)) - return false; + if (this->has_number_value) + if (!TINYGLTF_DOUBLE_EQUAL(this->number_value, other.number_value)) + return false; - if (this->string_value != other.string_value) - return false; + if (this->json_double_value.size() != other.json_double_value.size()) + return false; + for (auto &it : this->json_double_value) { + auto otherIt = other.json_double_value.find(it.first); + if (otherIt == other.json_double_value.end()) return false; - return true; + if (!TINYGLTF_DOUBLE_EQUAL(it.second, otherIt->second)) return false; + } + + if (!Equals(this->number_array, other.number_array)) return false; + + if (this->string_value != other.string_value) return false; + + return true; } -bool PerspectiveCamera::operator==(const PerspectiveCamera& other) const -{ - return TINYGLTF_DOUBLE_EQUAL(this->aspectRatio, other.aspectRatio) - && this->extensions == other.extensions - && this->extras == other.extras - && TINYGLTF_DOUBLE_EQUAL(this->yfov, other.yfov) - && TINYGLTF_DOUBLE_EQUAL(this->zfar, other.zfar) - && TINYGLTF_DOUBLE_EQUAL(this->znear, other.znear); +bool PerspectiveCamera::operator==(const PerspectiveCamera &other) const { + return TINYGLTF_DOUBLE_EQUAL(this->aspectRatio, other.aspectRatio) && + this->extensions == other.extensions && this->extras == other.extras && + TINYGLTF_DOUBLE_EQUAL(this->yfov, other.yfov) && + TINYGLTF_DOUBLE_EQUAL(this->zfar, other.zfar) && + TINYGLTF_DOUBLE_EQUAL(this->znear, other.znear); } -bool Primitive::operator==(const Primitive& other) const -{ - return this->attributes == other.attributes - && this->extras == other.extras - && this->indices == other.indices - && this->material == other.material - && this->mode == other.mode - && this->targets == other.targets; +bool Primitive::operator==(const Primitive &other) const { + return this->attributes == other.attributes && this->extras == other.extras && + this->indices == other.indices && this->material == other.material && + this->mode == other.mode && this->targets == other.targets; } -bool Sampler::operator==(const Sampler& other) const -{ - return this->extras == other.extras - && this->magFilter == other.magFilter - && this->minFilter == other.minFilter - && this->name == other.name - && this->wrapR == other.wrapR - && this->wrapS == other.wrapS - && this->wrapT == other.wrapT; +bool Sampler::operator==(const Sampler &other) const { + return this->extras == other.extras && this->magFilter == other.magFilter && + this->minFilter == other.minFilter && this->name == other.name && + this->wrapR == other.wrapR && this->wrapS == other.wrapS && + this->wrapT == other.wrapT; } -bool Scene::operator==(const Scene& other) const -{ - return this->extensions == other.extensions - && this->extras == other.extras - && this->name == other.name - && this->nodes == other.nodes;; +bool Scene::operator==(const Scene &other) const { + return this->extensions == other.extensions && this->extras == other.extras && + this->name == other.name && this->nodes == other.nodes; + ; } -bool Skin::operator==(const Skin& other) const -{ - return this->inverseBindMatrices == other.inverseBindMatrices - && this->joints == other.joints - && this->name == other.name - && this->skeleton == other.skeleton; +bool Skin::operator==(const Skin &other) const { + return this->inverseBindMatrices == other.inverseBindMatrices && + this->joints == other.joints && this->name == other.name && + this->skeleton == other.skeleton; } -bool Texture::operator==(const Texture& other) const -{ - return this->extensions == other.extensions - && this->extras == other.extras - && this->name == other.name - && this->sampler == other.sampler - && this->source == other.source; +bool Texture::operator==(const Texture &other) const { + return this->extensions == other.extensions && this->extras == other.extras && + this->name == other.name && this->sampler == other.sampler && + this->source == other.source; } -bool Value::operator==(const Value& other) const -{ - return Equals(*this, other); +bool Value::operator==(const Value &other) const { + return Equals(*this, other); } static void swap4(unsigned int *val) { @@ -1588,8 +1503,8 @@ std::string base64_decode(std::string const &encoded_string) { static bool LoadExternalFile(std::vector *out, std::string *err, std::string *warn, const std::string &filename, - const std::string &basedir, bool required, size_t reqBytes, - bool checkSize, FsCallbacks *fs) { + const std::string &basedir, bool required, + size_t reqBytes, bool checkSize, FsCallbacks *fs) { if (fs == nullptr || fs->FileExists == nullptr || fs->ExpandFilePath == nullptr || fs->ReadWholeFile == nullptr) { // This is a developer error, assert() ? @@ -1599,7 +1514,7 @@ static bool LoadExternalFile(std::vector *out, std::string *err, return false; } - std::string* failMsgOut = required ? err : warn; + std::string *failMsgOut = required ? err : warn; out->clear(); @@ -1621,16 +1536,17 @@ static bool LoadExternalFile(std::vector *out, std::string *err, fs->ReadWholeFile(&buf, &fileReadErr, filepath, fs->user_data); if (!fileRead) { if (failMsgOut) { - (*failMsgOut) += "File read error : " + filepath + " : " + fileReadErr + "\n"; + (*failMsgOut) += + "File read error : " + filepath + " : " + fileReadErr + "\n"; } return false; } size_t sz = buf.size(); if (sz == 0) { - if(failMsgOut) { + if (failMsgOut) { (*failMsgOut) += "File is empty : " + filepath + "\n"; - } + } return false; } @@ -1665,18 +1581,19 @@ bool LoadImageData(Image *image, std::string *err, std::string *warn, (void)warn; int w, h, comp, req_comp; - + // force 32-bit textures for common Vulkan compatibility. It appears that // some GPU drivers do not support 24-bit images for Vulkan req_comp = 4; - + // if image cannot be decoded, ignore parsing and keep it by its path // don't break in this case // FIXME we should only enter this function if the image is embedded. If // image->uri references // an image file, it should be left as it is. Image loading should not be // mandatory (to support other formats) - unsigned char *data = stbi_load_from_memory(bytes, size, &w, &h, &comp, req_comp); + unsigned char *data = + stbi_load_from_memory(bytes, size, &w, &h, &comp, req_comp); if (!data) { // NOTE: you can use `warn` instead of `err` if (err) { @@ -1750,21 +1667,22 @@ bool WriteImageData(const std::string *basepath, const std::string *filename, if (ext == "png") { if (!stbi_write_png_to_func(WriteToMemory_stbi, &data, image->width, - image->height, image->component, &image->image[0], - 0)) { + image->height, image->component, + &image->image[0], 0)) { return false; } header = "data:image/png;base64,"; } else if (ext == "jpg") { if (!stbi_write_jpg_to_func(WriteToMemory_stbi, &data, image->width, - image->height, image->component, &image->image[0], - 100)) { + image->height, image->component, + &image->image[0], 100)) { return false; } header = "data:image/jpeg;base64,"; } else if (ext == "bmp") { if (!stbi_write_bmp_to_func(WriteToMemory_stbi, &data, image->width, - image->height, image->component, &image->image[0])) { + image->height, image->component, + &image->image[0])) { return false; } header = "data:image/bmp;base64,"; @@ -2018,9 +1936,8 @@ bool IsDataURI(const std::string &in) { return false; } -bool DecodeDataURI(std::vector *out, - std::string &mime_type, const std::string &in, - size_t reqBytes, bool checkSize) { +bool DecodeDataURI(std::vector *out, std::string &mime_type, + const std::string &in, size_t reqBytes, bool checkSize) { std::string header = "data:application/octet-stream;base64,"; std::string data; if (in.find(header) == 0) { @@ -2632,8 +2549,8 @@ static bool ParseBuffer(Buffer *buffer, std::string *err, const json &o, } } else { // External .bin file. - if (!LoadExternalFile(&buffer->data, err, /* warn */ nullptr, buffer->uri, - basedir, true, bytes, true, fs)) { + if (!LoadExternalFile(&buffer->data, err, /* warn */ nullptr, + buffer->uri, basedir, true, bytes, true, fs)) { return false; } } @@ -4236,9 +4153,9 @@ static void SerializeGltfAccessor(Accessor &accessor, json &o) { type = "MAT4"; break; } - + SerializeStringProperty("type", type, o); - if(!accessor.name.empty()) SerializeStringProperty("name", accessor.name, o); + if (!accessor.name.empty()) SerializeStringProperty("name", accessor.name, o); if (accessor.extras.Type() != NULL_TYPE) { SerializeValue("extras", accessor.extras, o); @@ -4269,7 +4186,8 @@ static void SerializeGltfAnimationSampler(AnimationSampler &sampler, json &o) { } static void SerializeGltfAnimation(Animation &animation, json &o) { - if(!animation.name.empty()) SerializeStringProperty("name", animation.name, o); + if (!animation.name.empty()) + SerializeStringProperty("name", animation.name, o); json channels; for (unsigned int i = 0; i < animation.channels.size(); ++i) { json channel; @@ -4460,7 +4378,7 @@ static void SerializeGltfMesh(Mesh &mesh, json &o) { } static void SerializeGltfLight(Light &light, json &o) { - if(!light.name.empty()) SerializeStringProperty("name", light.name, o); + if (!light.name.empty()) SerializeStringProperty("name", light.name, o); SerializeNumberArrayProperty("color", light.color, o); SerializeStringProperty("type", light.type, o); } @@ -4495,7 +4413,7 @@ static void SerializeGltfNode(Node &node, json &o) { } SerializeExtensionMap(node.extensions, o); - if(!node.name.empty()) SerializeStringProperty("name", node.name, o); + if (!node.name.empty()) SerializeStringProperty("name", node.name, o); SerializeNumberArrayProperty("children", node.children, o); } @@ -4596,7 +4514,7 @@ static void SerializeGltfTexture(Texture &texture, json &o) { static bool WriteGltfFile(const std::string &output, const std::string &content) { std::ofstream gltfFile(output.c_str()); - if(!gltfFile.is_open()) return false; + if (!gltfFile.is_open()) return false; gltfFile << content << std::endl; return true; }