Suppress clang warnings.

Apply clang-format.
This commit is contained in:
Syoyo Fujita 2018-10-04 15:43:33 +09:00
parent 7518334044
commit 641b3ccf8c

View File

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