Fix unittest of AC-Loader.
parent
a5583f3ec5
commit
6230e70d02
|
@ -92,7 +92,7 @@ inline const char *AcGetString(const char *buffer, const char *end, std::string
|
||||||
}
|
}
|
||||||
++buffer;
|
++buffer;
|
||||||
const char *sz = buffer;
|
const char *sz = buffer;
|
||||||
while ('\"' != *buffer || buffer != end) {
|
while ('\"' != *buffer && buffer != end) {
|
||||||
if (IsLineEnd(*buffer)) {
|
if (IsLineEnd(*buffer)) {
|
||||||
ASSIMP_LOG_ERROR("AC3D: Unexpected EOF/EOL in string");
|
ASSIMP_LOG_ERROR("AC3D: Unexpected EOF/EOL in string");
|
||||||
out = "ERROR";
|
out = "ERROR";
|
||||||
|
@ -801,6 +801,8 @@ void AC3DImporter::InternReadFile(const std::string &pFile,
|
||||||
mBuffer.data = TAcCheckedLoadFloatArray(mBuffer.data, mBuffer.end, "spec", 4, 3, &mat.spec);
|
mBuffer.data = TAcCheckedLoadFloatArray(mBuffer.data, mBuffer.end, "spec", 4, 3, &mat.spec);
|
||||||
mBuffer.data = TAcCheckedLoadFloatArray(mBuffer.data, mBuffer.end, "shi", 3, 1, &mat.shin);
|
mBuffer.data = TAcCheckedLoadFloatArray(mBuffer.data, mBuffer.end, "shi", 3, 1, &mat.shin);
|
||||||
mBuffer.data = TAcCheckedLoadFloatArray(mBuffer.data, mBuffer.end, "trans", 5, 1, &mat.trans);
|
mBuffer.data = TAcCheckedLoadFloatArray(mBuffer.data, mBuffer.end, "trans", 5, 1, &mat.trans);
|
||||||
|
} else {
|
||||||
|
LoadObjectSection(rootObjects);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -138,14 +138,16 @@ bool MD5Parser::ParseSection(Section &out) {
|
||||||
char *sz = buffer;
|
char *sz = buffer;
|
||||||
while (!IsSpaceOrNewLine(*buffer)) {
|
while (!IsSpaceOrNewLine(*buffer)) {
|
||||||
++buffer;
|
++buffer;
|
||||||
if (buffer == bufferEnd)
|
if (buffer == bufferEnd) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
out.mName = std::string(sz, (uintptr_t)(buffer - sz));
|
out.mName = std::string(sz, (uintptr_t)(buffer - sz));
|
||||||
while (IsSpace(*buffer)) {
|
while (IsSpace(*buffer)) {
|
||||||
++buffer;
|
++buffer;
|
||||||
if (buffer == bufferEnd)
|
if (buffer == bufferEnd) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool running = true;
|
bool running = true;
|
||||||
|
@ -153,14 +155,16 @@ bool MD5Parser::ParseSection(Section &out) {
|
||||||
if ('{' == *buffer) {
|
if ('{' == *buffer) {
|
||||||
// it is a normal section so read all lines
|
// it is a normal section so read all lines
|
||||||
++buffer;
|
++buffer;
|
||||||
if (buffer == bufferEnd)
|
if (buffer == bufferEnd) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
bool run = true;
|
bool run = true;
|
||||||
while (run) {
|
while (run) {
|
||||||
while (IsSpaceOrNewLine(*buffer)) {
|
while (IsSpaceOrNewLine(*buffer)) {
|
||||||
++buffer;
|
++buffer;
|
||||||
if (buffer == bufferEnd)
|
if (buffer == bufferEnd) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ('\0' == *buffer) {
|
if ('\0' == *buffer) {
|
||||||
return false; // seems this was the last section
|
return false; // seems this was the last section
|
||||||
|
@ -180,14 +184,16 @@ bool MD5Parser::ParseSection(Section &out) {
|
||||||
// terminate the line with zero
|
// terminate the line with zero
|
||||||
while (!IsLineEnd(*buffer)) {
|
while (!IsLineEnd(*buffer)) {
|
||||||
++buffer;
|
++buffer;
|
||||||
if (buffer == bufferEnd)
|
if (buffer == bufferEnd) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (*buffer) {
|
if (*buffer) {
|
||||||
++lineNumber;
|
++lineNumber;
|
||||||
*buffer++ = '\0';
|
*buffer++ = '\0';
|
||||||
if (buffer == bufferEnd)
|
if (buffer == bufferEnd) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -195,8 +201,9 @@ bool MD5Parser::ParseSection(Section &out) {
|
||||||
// it is an element at global scope. Parse its value and go on
|
// it is an element at global scope. Parse its value and go on
|
||||||
sz = buffer;
|
sz = buffer;
|
||||||
while (!IsSpaceOrNewLine(*buffer++)) {
|
while (!IsSpaceOrNewLine(*buffer++)) {
|
||||||
if (buffer == bufferEnd)
|
if (buffer == bufferEnd) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
out.mGlobalValue = std::string(sz, (uintptr_t)(buffer - sz));
|
out.mGlobalValue = std::string(sz, (uintptr_t)(buffer - sz));
|
||||||
continue;
|
continue;
|
||||||
|
@ -206,8 +213,9 @@ bool MD5Parser::ParseSection(Section &out) {
|
||||||
if (buffer == bufferEnd)
|
if (buffer == bufferEnd)
|
||||||
return false;
|
return false;
|
||||||
while (IsSpaceOrNewLine(*buffer)) {
|
while (IsSpaceOrNewLine(*buffer)) {
|
||||||
if (buffer == bufferEnd)
|
if (buffer == bufferEnd) {
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
++buffer;
|
++buffer;
|
||||||
}
|
}
|
||||||
return '\0' != *buffer;
|
return '\0' != *buffer;
|
||||||
|
@ -226,8 +234,11 @@ inline void AI_MD5_SKIP_SPACES(const char **sz, const char *bufferEnd, int linen
|
||||||
// read a triple float in brackets: (1.0 1.0 1.0)
|
// read a triple float in brackets: (1.0 1.0 1.0)
|
||||||
inline void AI_MD5_READ_TRIPLE(aiVector3D &vec, const char **sz, const char *bufferEnd, int linenumber) {
|
inline void AI_MD5_READ_TRIPLE(aiVector3D &vec, const char **sz, const char *bufferEnd, int linenumber) {
|
||||||
AI_MD5_SKIP_SPACES(sz, bufferEnd, linenumber);
|
AI_MD5_SKIP_SPACES(sz, bufferEnd, linenumber);
|
||||||
if ('(' != **sz++)
|
if ('(' != **sz) {
|
||||||
MD5Parser::ReportWarning("Unexpected token: ( was expected", linenumber);
|
MD5Parser::ReportWarning("Unexpected token: ( was expected", linenumber);
|
||||||
|
++*sz;
|
||||||
|
}
|
||||||
|
++*sz;
|
||||||
AI_MD5_SKIP_SPACES(sz, bufferEnd, linenumber);
|
AI_MD5_SKIP_SPACES(sz, bufferEnd, linenumber);
|
||||||
*sz = fast_atoreal_move<float>(*sz, (float &)vec.x);
|
*sz = fast_atoreal_move<float>(*sz, (float &)vec.x);
|
||||||
AI_MD5_SKIP_SPACES(sz, bufferEnd, linenumber);
|
AI_MD5_SKIP_SPACES(sz, bufferEnd, linenumber);
|
||||||
|
@ -235,17 +246,20 @@ inline void AI_MD5_READ_TRIPLE(aiVector3D &vec, const char **sz, const char *buf
|
||||||
AI_MD5_SKIP_SPACES(sz, bufferEnd, linenumber);
|
AI_MD5_SKIP_SPACES(sz, bufferEnd, linenumber);
|
||||||
*sz = fast_atoreal_move<float>(*sz, (float &)vec.z);
|
*sz = fast_atoreal_move<float>(*sz, (float &)vec.z);
|
||||||
AI_MD5_SKIP_SPACES(sz, bufferEnd, linenumber);
|
AI_MD5_SKIP_SPACES(sz, bufferEnd, linenumber);
|
||||||
if (')' != **sz++) {
|
if (')' != **sz) {
|
||||||
MD5Parser::ReportWarning("Unexpected token: ) was expected", linenumber);
|
MD5Parser::ReportWarning("Unexpected token: ) was expected", linenumber);
|
||||||
}
|
}
|
||||||
|
++*sz;
|
||||||
}
|
}
|
||||||
|
|
||||||
// parse a string, enclosed in quotation marks or not
|
// parse a string, enclosed in quotation marks or not
|
||||||
inline bool AI_MD5_PARSE_STRING(const char **sz, aiString &out, int linenumber) {
|
inline bool AI_MD5_PARSE_STRING(const char **sz, const char *bufferEnd, aiString &out, int linenumber) {
|
||||||
bool bQuota = (**sz == '\"');
|
bool bQuota = (**sz == '\"');
|
||||||
const char *szStart = *sz;
|
const char *szStart = *sz;
|
||||||
while (!IsSpaceOrNewLine(*sz))
|
while (!IsSpaceOrNewLine(*sz)) {
|
||||||
++sz;
|
++*sz;
|
||||||
|
if (*sz == bufferEnd) break;
|
||||||
|
}
|
||||||
const char *szEnd = *sz;
|
const char *szEnd = *sz;
|
||||||
if (bQuota) {
|
if (bQuota) {
|
||||||
szStart++;
|
szStart++;
|
||||||
|
@ -260,15 +274,18 @@ inline bool AI_MD5_PARSE_STRING(const char **sz, aiString &out, int linenumber)
|
||||||
}
|
}
|
||||||
|
|
||||||
// parse a string, enclosed in quotation marks
|
// parse a string, enclosed in quotation marks
|
||||||
inline void AI_MD5_PARSE_STRING_IN_QUOTATION(const char **sz, aiString &out) {
|
inline void AI_MD5_PARSE_STRING_IN_QUOTATION(const char **sz, const char *bufferEnd, aiString &out) {
|
||||||
out.length = 0u;
|
out.length = 0u;
|
||||||
while ('\"' != **sz && '\0' != *sz)
|
while (('\"' != **sz && '\0' != **sz) && *sz != bufferEnd) {
|
||||||
++sz;
|
++*sz;
|
||||||
if ('\0' != *sz) {
|
}
|
||||||
|
if ('\0' != **sz) {
|
||||||
const char *szStart = ++(*sz);
|
const char *szStart = ++(*sz);
|
||||||
while ('\"' != **sz && '\0' != *sz)
|
|
||||||
++sz;
|
while (('\"' != **sz && '\0' != **sz) && *sz != bufferEnd) {
|
||||||
if ('\0' != *sz) {
|
++*sz;
|
||||||
|
}
|
||||||
|
if ('\0' != **sz) {
|
||||||
const char *szEnd = (*sz++);
|
const char *szEnd = (*sz++);
|
||||||
out.length = (ai_uint32)(szEnd - szStart);
|
out.length = (ai_uint32)(szEnd - szStart);
|
||||||
::memcpy(out.data, szStart, out.length);
|
::memcpy(out.data, szStart, out.length);
|
||||||
|
@ -294,7 +311,7 @@ MD5MeshParser::MD5MeshParser(SectionArray &mSections) {
|
||||||
BoneDesc &desc = mJoints.back();
|
BoneDesc &desc = mJoints.back();
|
||||||
|
|
||||||
const char *sz = elem.szStart;
|
const char *sz = elem.szStart;
|
||||||
AI_MD5_PARSE_STRING_IN_QUOTATION(&sz, desc.mName);
|
AI_MD5_PARSE_STRING_IN_QUOTATION(&sz, elem.end, desc.mName);
|
||||||
|
|
||||||
AI_MD5_SKIP_SPACES(&sz, elem.end, elem.iLineNumber);
|
AI_MD5_SKIP_SPACES(&sz, elem.end, elem.iLineNumber);
|
||||||
|
|
||||||
|
@ -314,7 +331,7 @@ MD5MeshParser::MD5MeshParser(SectionArray &mSections) {
|
||||||
// shader attribute
|
// shader attribute
|
||||||
if (TokenMatch(sz, "shader", 6)) {
|
if (TokenMatch(sz, "shader", 6)) {
|
||||||
AI_MD5_SKIP_SPACES(&sz, elem.end, elem.iLineNumber);
|
AI_MD5_SKIP_SPACES(&sz, elem.end, elem.iLineNumber);
|
||||||
AI_MD5_PARSE_STRING_IN_QUOTATION(&sz, desc.mShader);
|
AI_MD5_PARSE_STRING_IN_QUOTATION(&sz, elem.end, desc.mShader);
|
||||||
}
|
}
|
||||||
// numverts attribute
|
// numverts attribute
|
||||||
else if (TokenMatch(sz, "numverts", 8)) {
|
else if (TokenMatch(sz, "numverts", 8)) {
|
||||||
|
@ -406,7 +423,7 @@ MD5AnimParser::MD5AnimParser(SectionArray &mSections) {
|
||||||
AnimBoneDesc &desc = mAnimatedBones.back();
|
AnimBoneDesc &desc = mAnimatedBones.back();
|
||||||
|
|
||||||
const char *sz = elem.szStart;
|
const char *sz = elem.szStart;
|
||||||
AI_MD5_PARSE_STRING_IN_QUOTATION(&sz, desc.mName);
|
AI_MD5_PARSE_STRING_IN_QUOTATION(&sz, elem.end, desc.mName);
|
||||||
AI_MD5_SKIP_SPACES(&sz, elem.end, elem.iLineNumber);
|
AI_MD5_SKIP_SPACES(&sz, elem.end, elem.iLineNumber);
|
||||||
|
|
||||||
// parent index - negative values are allowed (at least -1)
|
// parent index - negative values are allowed (at least -1)
|
||||||
|
|
|
@ -1193,6 +1193,10 @@ ENDIF ()
|
||||||
|
|
||||||
TARGET_USE_COMMON_OUTPUT_DIRECTORY(assimp)
|
TARGET_USE_COMMON_OUTPUT_DIRECTORY(assimp)
|
||||||
|
|
||||||
|
add_compile_options(
|
||||||
|
"$<$<CONFIG:DEBUG>:-O0;-g3;-ggdb>"
|
||||||
|
)
|
||||||
|
|
||||||
IF (ASSIMP_WARNINGS_AS_ERRORS)
|
IF (ASSIMP_WARNINGS_AS_ERRORS)
|
||||||
MESSAGE(STATUS "Treating all warnings as errors (for assimp library only)")
|
MESSAGE(STATUS "Treating all warnings as errors (for assimp library only)")
|
||||||
IF (MSVC)
|
IF (MSVC)
|
||||||
|
|
Loading…
Reference in New Issue