Fixed gcc warnings and errors
parent
4f757cdf5a
commit
d72443d6b0
|
@ -353,6 +353,8 @@ namespace glTF
|
||||||
//! Objects marked as special are not exported (used to emulate the binary body buffer)
|
//! Objects marked as special are not exported (used to emulate the binary body buffer)
|
||||||
virtual bool IsSpecial() const
|
virtual bool IsSpecial() const
|
||||||
{ return false; }
|
{ return false; }
|
||||||
|
|
||||||
|
virtual ~Object() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -391,8 +393,8 @@ namespace glTF
|
||||||
{
|
{
|
||||||
friend struct Accessor;
|
friend struct Accessor;
|
||||||
|
|
||||||
uint8_t* data;
|
|
||||||
Accessor& accessor;
|
Accessor& accessor;
|
||||||
|
uint8_t* data;
|
||||||
size_t elemSize, stride;
|
size_t elemSize, stride;
|
||||||
|
|
||||||
Indexer(Accessor& acc);
|
Indexer(Accessor& acc);
|
||||||
|
@ -535,6 +537,8 @@ namespace glTF
|
||||||
|
|
||||||
std::string mimeType;
|
std::string mimeType;
|
||||||
|
|
||||||
|
int width, height;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint8_t* mData;
|
uint8_t* mData;
|
||||||
size_t mDataLength;
|
size_t mDataLength;
|
||||||
|
@ -770,7 +774,10 @@ namespace glTF
|
||||||
void AttachToDocument(Document& doc);
|
void AttachToDocument(Document& doc);
|
||||||
void DetachFromDocument();
|
void DetachFromDocument();
|
||||||
|
|
||||||
void WriteObjects(AssetWriter& writer);
|
void WriteObjectsImpl(AssetWriter& writer);
|
||||||
|
|
||||||
|
void WriteObjects(AssetWriter& writer)
|
||||||
|
{ WriteObjectsImpl(writer); }
|
||||||
|
|
||||||
Ref<T> Add(T* obj);
|
Ref<T> Add(T* obj);
|
||||||
|
|
||||||
|
|
|
@ -61,7 +61,7 @@ namespace {
|
||||||
|
|
||||||
template<size_t N> struct ReadHelper<float[N]> { static bool Read(Value& val, float (&out)[N]) {
|
template<size_t N> struct ReadHelper<float[N]> { static bool Read(Value& val, float (&out)[N]) {
|
||||||
if (!val.IsArray() || val.Size() != N) return false;
|
if (!val.IsArray() || val.Size() != N) return false;
|
||||||
for (int i = 0; i < N; ++i) {
|
for (size_t i = 0; i < N; ++i) {
|
||||||
if (val[i].IsNumber())
|
if (val[i].IsNumber())
|
||||||
out[i] = static_cast<float>(val[i].GetDouble());
|
out[i] = static_cast<float>(val[i].GetDouble());
|
||||||
}
|
}
|
||||||
|
@ -446,7 +446,9 @@ T Accessor::Indexer::GetValue(int i)
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Image::Image()
|
inline Image::Image()
|
||||||
: mData(0)
|
: width(0)
|
||||||
|
, height(0)
|
||||||
|
, mData(0)
|
||||||
, mDataLength(0)
|
, mDataLength(0)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -459,8 +461,8 @@ inline void Image::Read(Value& obj, Asset& r)
|
||||||
if (r.extensionsUsed.KHR_binary_glTF) {
|
if (r.extensionsUsed.KHR_binary_glTF) {
|
||||||
if (Value* ext = FindObject(*extensions, "KHR_binary_glTF")) {
|
if (Value* ext = FindObject(*extensions, "KHR_binary_glTF")) {
|
||||||
|
|
||||||
int width = MemberOrDefault(*ext, "width", 0);
|
width = MemberOrDefault(*ext, "width", 0);
|
||||||
int height = MemberOrDefault(*ext, "height", 0);
|
height = MemberOrDefault(*ext, "height", 0);
|
||||||
|
|
||||||
ReadMember(*ext, "mimeType", mimeType);
|
ReadMember(*ext, "mimeType", mimeType);
|
||||||
|
|
||||||
|
@ -607,25 +609,25 @@ namespace {
|
||||||
|
|
||||||
inline bool GetAttribVector(Mesh::Primitive& p, const char* attr, Mesh::AccessorList*& v, int& pos)
|
inline bool GetAttribVector(Mesh::Primitive& p, const char* attr, Mesh::AccessorList*& v, int& pos)
|
||||||
{
|
{
|
||||||
if (pos = Compare(attr, "POSITION")) {
|
if ((pos = Compare(attr, "POSITION"))) {
|
||||||
v = &(p.attributes.position);
|
v = &(p.attributes.position);
|
||||||
}
|
}
|
||||||
else if (pos = Compare(attr, "NORMAL")) {
|
else if ((pos = Compare(attr, "NORMAL"))) {
|
||||||
v = &(p.attributes.normal);
|
v = &(p.attributes.normal);
|
||||||
}
|
}
|
||||||
else if (pos = Compare(attr, "TEXCOORD")) {
|
else if ((pos = Compare(attr, "TEXCOORD"))) {
|
||||||
v = &(p.attributes.texcoord);
|
v = &(p.attributes.texcoord);
|
||||||
}
|
}
|
||||||
else if (pos = Compare(attr, "COLOR")) {
|
else if ((pos = Compare(attr, "COLOR"))) {
|
||||||
v = &(p.attributes.color);
|
v = &(p.attributes.color);
|
||||||
}
|
}
|
||||||
else if (pos = Compare(attr, "JOINT")) {
|
else if ((pos = Compare(attr, "JOINT"))) {
|
||||||
v = &(p.attributes.joint);
|
v = &(p.attributes.joint);
|
||||||
}
|
}
|
||||||
else if (pos = Compare(attr, "JOINTMATRIX")) {
|
else if ((pos = Compare(attr, "JOINTMATRIX"))) {
|
||||||
v = &(p.attributes.jointmatrix);
|
v = &(p.attributes.jointmatrix);
|
||||||
}
|
}
|
||||||
else if (pos = Compare(attr, "WEIGHT")) {
|
else if ((pos = Compare(attr, "WEIGHT"))) {
|
||||||
v = &(p.attributes.weight);
|
v = &(p.attributes.weight);
|
||||||
}
|
}
|
||||||
else return false;
|
else return false;
|
||||||
|
@ -647,7 +649,8 @@ inline void Mesh::Read(Value& obj, Asset& r)
|
||||||
for (Value::MemberIterator it = attrs->MemberBegin(); it != attrs->MemberEnd(); ++it) {
|
for (Value::MemberIterator it = attrs->MemberBegin(); it != attrs->MemberEnd(); ++it) {
|
||||||
if (!it->value.IsString()) continue;
|
if (!it->value.IsString()) continue;
|
||||||
const char* attr = it->name.GetString();
|
const char* attr = it->name.GetString();
|
||||||
// Valid attribute semantics include POSITION, NORMAL, TEXCOORD, COLOR, JOINT, JOINTMATRIX, and WEIGHT.Attribute semantics can be of the form[semantic]_[set_index], e.g., TEXCOORD_0, TEXCOORD_1, etc.
|
// Valid attribute semantics include POSITION, NORMAL, TEXCOORD, COLOR, JOINT, JOINTMATRIX,
|
||||||
|
// and WEIGHT.Attribute semantics can be of the form[semantic]_[set_index], e.g., TEXCOORD_0, TEXCOORD_1, etc.
|
||||||
|
|
||||||
int undPos = 0;
|
int undPos = 0;
|
||||||
Mesh::AccessorList* vec = 0;
|
Mesh::AccessorList* vec = 0;
|
||||||
|
@ -920,7 +923,7 @@ inline void Asset::Load(const std::string& pFile, bool isBinary)
|
||||||
|
|
||||||
if (doc.HasParseError()) {
|
if (doc.HasParseError()) {
|
||||||
char buffer[32];
|
char buffer[32];
|
||||||
sprintf(buffer, "%u", doc.GetErrorOffset());
|
sprintf(buffer, "%d", static_cast<int>(doc.GetErrorOffset()));
|
||||||
throw DeadlyImportError(std::string("JSON parse error, offset ") + buffer + ": "
|
throw DeadlyImportError(std::string("JSON parse error, offset ") + buffer + ": "
|
||||||
+ GetParseError_En(doc.GetParseError()));
|
+ GetParseError_En(doc.GetParseError()));
|
||||||
}
|
}
|
||||||
|
@ -1107,12 +1110,12 @@ namespace Util
|
||||||
|
|
||||||
inline char EncodeCharBase64(uint8_t b)
|
inline char EncodeCharBase64(uint8_t b)
|
||||||
{
|
{
|
||||||
return "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="[b];
|
return "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="[size_t(b)];
|
||||||
}
|
}
|
||||||
|
|
||||||
inline uint8_t DecodeCharBase64(char c)
|
inline uint8_t DecodeCharBase64(char c)
|
||||||
{
|
{
|
||||||
return DATA<true>::tableDecodeBase64[c]; // TODO faster with lookup table or ifs?
|
return DATA<true>::tableDecodeBase64[size_t(c)]; // TODO faster with lookup table or ifs?
|
||||||
/*if (c >= 'A' && c <= 'Z') return c - 'A';
|
/*if (c >= 'A' && c <= 'Z') return c - 'A';
|
||||||
if (c >= 'a' && c <= 'z') return c - 'a' + 26;
|
if (c >= 'a' && c <= 'z') return c - 'a' + 26;
|
||||||
if (c >= '0' && c <= '9') return c - '0' + 52;
|
if (c >= '0' && c <= '9') return c - '0' + 52;
|
||||||
|
|
|
@ -190,7 +190,7 @@ namespace glTF {
|
||||||
else {
|
else {
|
||||||
for (size_t i = 0; i < lst.size(); ++i) {
|
for (size_t i = 0; i < lst.size(); ++i) {
|
||||||
char buffer[32];
|
char buffer[32];
|
||||||
sprintf(buffer, "%s_%d", semantic, i);
|
sprintf(buffer, "%s_%d", semantic, int(i));
|
||||||
attrs.AddMember(Value(buffer, w.mAl).Move(), Value(lst[i]->id, w.mAl).Move(), w.mAl);
|
attrs.AddMember(Value(buffer, w.mAl).Move(), Value(lst[i]->id, w.mAl).Move(), w.mAl);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -304,52 +304,10 @@ namespace glTF {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
|
||||||
void LazyDict<T>::WriteObjects(AssetWriter& w)
|
|
||||||
{
|
|
||||||
if (mObjs.empty()) return;
|
|
||||||
|
|
||||||
Value* container = &w.mDoc;
|
|
||||||
|
|
||||||
if (mExtId) {
|
|
||||||
Value* exts = FindObject(w.mDoc, "extensions");
|
|
||||||
if (!exts) {
|
|
||||||
w.mDoc.AddMember("extensions", Value().SetObject().Move(), w.mDoc.GetAllocator());
|
|
||||||
exts = FindObject(w.mDoc, "extensions");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(container = FindObject(*exts, mExtId))) {
|
|
||||||
exts->AddMember(StringRef(mExtId), Value().SetObject().Move(), w.mDoc.GetAllocator());
|
|
||||||
container = FindObject(*exts, mExtId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Value* dict;
|
|
||||||
if (!(dict = FindObject(*container, mDictId))) {
|
|
||||||
container->AddMember(StringRef(mDictId), Value().SetObject().Move(), w.mDoc.GetAllocator());
|
|
||||||
dict = FindObject(*container, mDictId);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (size_t i = 0; i < mObjs.size(); ++i) {
|
|
||||||
if (mObjs[i]->IsSpecial()) continue;
|
|
||||||
|
|
||||||
Value obj;
|
|
||||||
obj.SetObject();
|
|
||||||
|
|
||||||
if (!mObjs[i]->name.empty()) {
|
|
||||||
obj.AddMember("name", StringRef(mObjs[i]->name.c_str()), w.mAl);
|
|
||||||
}
|
|
||||||
|
|
||||||
Write(obj, *mObjs[i], w);
|
|
||||||
|
|
||||||
dict->AddMember(StringRef(mObjs[i]->id), obj, w.mAl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
AssetWriter::AssetWriter(Asset& a)
|
AssetWriter::AssetWriter(Asset& a)
|
||||||
: mAsset(a)
|
: mDoc()
|
||||||
, mDoc()
|
, mAsset(a)
|
||||||
, mAl(mDoc.GetAllocator())
|
, mAl(mDoc.GetAllocator())
|
||||||
{
|
{
|
||||||
mDoc.SetObject();
|
mDoc.SetObject();
|
||||||
|
@ -368,7 +326,6 @@ namespace glTF {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void AssetWriter::WriteFile(const char* path)
|
void AssetWriter::WriteFile(const char* path)
|
||||||
{
|
{
|
||||||
bool isBinary = mAsset.extensionsUsed.KHR_binary_glTF;
|
bool isBinary = mAsset.extensionsUsed.KHR_binary_glTF;
|
||||||
|
@ -484,6 +441,48 @@ namespace glTF {
|
||||||
mDoc.AddMember("extensionsUsed", exts, mAl);
|
mDoc.AddMember("extensionsUsed", exts, mAl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
void LazyDict<T>::WriteObjectsImpl(AssetWriter& w)
|
||||||
|
{
|
||||||
|
if (mObjs.empty()) return;
|
||||||
|
|
||||||
|
Value* container = &w.mDoc;
|
||||||
|
|
||||||
|
if (mExtId) {
|
||||||
|
Value* exts = FindObject(w.mDoc, "extensions");
|
||||||
|
if (!exts) {
|
||||||
|
w.mDoc.AddMember("extensions", Value().SetObject().Move(), w.mDoc.GetAllocator());
|
||||||
|
exts = FindObject(w.mDoc, "extensions");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(container = FindObject(*exts, mExtId))) {
|
||||||
|
exts->AddMember(StringRef(mExtId), Value().SetObject().Move(), w.mDoc.GetAllocator());
|
||||||
|
container = FindObject(*exts, mExtId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Value* dict;
|
||||||
|
if (!(dict = FindObject(*container, mDictId))) {
|
||||||
|
container->AddMember(StringRef(mDictId), Value().SetObject().Move(), w.mDoc.GetAllocator());
|
||||||
|
dict = FindObject(*container, mDictId);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (size_t i = 0; i < mObjs.size(); ++i) {
|
||||||
|
if (mObjs[i]->IsSpecial()) continue;
|
||||||
|
|
||||||
|
Value obj;
|
||||||
|
obj.SetObject();
|
||||||
|
|
||||||
|
if (!mObjs[i]->name.empty()) {
|
||||||
|
obj.AddMember("name", StringRef(mObjs[i]->name.c_str()), w.mAl);
|
||||||
|
}
|
||||||
|
|
||||||
|
Write(obj, *mObjs[i], w);
|
||||||
|
|
||||||
|
dict->AddMember(StringRef(mObjs[i]->id), obj, w.mAl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -338,7 +338,7 @@ void glTFExporter::ExportScene()
|
||||||
|
|
||||||
// root node will be the first one exported (idx 0)
|
// root node will be the first one exported (idx 0)
|
||||||
if (mAsset->nodes.Size() > 0) {
|
if (mAsset->nodes.Size() > 0) {
|
||||||
scene->nodes.push_back(mAsset->nodes.Get(0u));
|
scene->nodes.push_back(mAsset->nodes.Get(size_t(0)));
|
||||||
}
|
}
|
||||||
|
|
||||||
// set as the default scene
|
// set as the default scene
|
||||||
|
|
|
@ -120,10 +120,10 @@ bool glTFImporter::CanRead(const std::string& pFile, IOSystem* pIOHandler, bool
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void CopyValue(const glTF::vec3& v, aiColor3D& out)
|
//static void CopyValue(const glTF::vec3& v, aiColor3D& out)
|
||||||
{
|
//{
|
||||||
out.r = v[0]; out.g = v[1]; out.b = v[2];
|
// out.r = v[0]; out.g = v[1]; out.b = v[2];
|
||||||
}
|
//}
|
||||||
|
|
||||||
static void CopyValue(const glTF::vec4& v, aiColor4D& out)
|
static void CopyValue(const glTF::vec4& v, aiColor4D& out)
|
||||||
{
|
{
|
||||||
|
@ -421,14 +421,14 @@ void glTFImporter::ImportLights(glTF::Asset& r)
|
||||||
case Light::Type_directional:
|
case Light::Type_directional:
|
||||||
ail->mType = aiLightSource_DIRECTIONAL; break;
|
ail->mType = aiLightSource_DIRECTIONAL; break;
|
||||||
|
|
||||||
case Light::Type_point:
|
|
||||||
ail->mType = aiLightSource_POINT; break;
|
|
||||||
|
|
||||||
case Light::Type_spot:
|
case Light::Type_spot:
|
||||||
ail->mType = aiLightSource_SPOT; break;
|
ail->mType = aiLightSource_SPOT; break;
|
||||||
|
|
||||||
case Light::Type_ambient:
|
case Light::Type_ambient:
|
||||||
ail->mType = aiLightSource_AMBIENT; break;
|
ail->mType = aiLightSource_AMBIENT; break;
|
||||||
|
|
||||||
|
default: // Light::Type_point
|
||||||
|
ail->mType = aiLightSource_POINT; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
CopyValue(l.color, ail->mColorAmbient);
|
CopyValue(l.color, ail->mColorAmbient);
|
||||||
|
|
Loading…
Reference in New Issue