Compare commits
2 Commits
bugfix/fix
...
improvemen
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
30c4784619 | ||
|
|
f7d2de1efc |
@@ -140,9 +140,11 @@ void ObjFileParser::parseFile(IOStreamBuffer<char> &streamBuffer) {
|
||||
if (insideCstype) {
|
||||
switch (*m_DataIt) {
|
||||
case 'e': {
|
||||
std::string name;
|
||||
getNameNoSpace(m_DataIt, m_DataItEnd, name);
|
||||
insideCstype = name != "end";
|
||||
char *name{nullptr};
|
||||
size_t len{0};
|
||||
getNameNoSpace(m_DataIt, m_DataItEnd, &name, len);
|
||||
//insideCstype = name != "end";
|
||||
insideCstype = strncmp(name, "end", len) == 0;
|
||||
} break;
|
||||
}
|
||||
goto pf_skip_line;
|
||||
@@ -198,32 +200,37 @@ void ObjFileParser::parseFile(IOStreamBuffer<char> &streamBuffer) {
|
||||
|
||||
case 'u': // Parse a material desc. setter
|
||||
{
|
||||
std::string name;
|
||||
//std::string name;
|
||||
char *name{nullptr};
|
||||
size_t len{ 0 };
|
||||
getNameNoSpace(m_DataIt, m_DataItEnd, &name, len);
|
||||
|
||||
getNameNoSpace(m_DataIt, m_DataItEnd, name);
|
||||
//size_t nextSpace = name.find(' ');
|
||||
//if (nextSpace != std::string::npos)
|
||||
// name = name.substr(0, nextSpace);
|
||||
|
||||
size_t nextSpace = name.find(' ');
|
||||
if (nextSpace != std::string::npos)
|
||||
name = name.substr(0, nextSpace);
|
||||
|
||||
if (name == "usemtl") {
|
||||
//if (name == "usemtl") {
|
||||
if (strncmp(name, "usemtl", len) == 0) {
|
||||
getMaterialDesc();
|
||||
}
|
||||
} break;
|
||||
|
||||
case 'm': // Parse a material library or merging group ('mg')
|
||||
{
|
||||
std::string name;
|
||||
// std::string name;
|
||||
char *name{nullptr};
|
||||
size_t len{ 0 };
|
||||
getNameNoSpace(m_DataIt, m_DataItEnd, &name, len);
|
||||
|
||||
getNameNoSpace(m_DataIt, m_DataItEnd, name);
|
||||
//size_t nextSpace = name.find(' ');
|
||||
//if (nextSpace != std::string::npos)
|
||||
// name = name.substr(0, nextSpace);
|
||||
|
||||
size_t nextSpace = name.find(' ');
|
||||
if (nextSpace != std::string::npos)
|
||||
name = name.substr(0, nextSpace);
|
||||
|
||||
if (name == "mg")
|
||||
if (strncmp(name, "mg", len) == 0)
|
||||
//if (name == "mg")
|
||||
getGroupNumberAndResolution();
|
||||
else if (name == "mtllib")
|
||||
//else if (name == "mtllib")
|
||||
else if (strncmp(name, "mtllib", len) == 0)
|
||||
getMaterialLib();
|
||||
else
|
||||
goto pf_skip_line;
|
||||
@@ -246,9 +253,12 @@ void ObjFileParser::parseFile(IOStreamBuffer<char> &streamBuffer) {
|
||||
|
||||
case 'c': // handle cstype section start
|
||||
{
|
||||
std::string name;
|
||||
getNameNoSpace(m_DataIt, m_DataItEnd, name);
|
||||
insideCstype = name == "cstype";
|
||||
//std::string name;
|
||||
char *name{nullptr};
|
||||
size_t len{0};
|
||||
getNameNoSpace(m_DataIt, m_DataItEnd, &name, len);
|
||||
//insideCstype = name == "cstype";
|
||||
insideCstype = strncmp(name, "cstype", len) == 0;
|
||||
goto pf_skip_line;
|
||||
}
|
||||
|
||||
|
||||
@@ -177,8 +177,9 @@ inline char_t getName(char_t it, char_t end, std::string &name) {
|
||||
* @return Current-iterator with new position
|
||||
*/
|
||||
template <class char_t>
|
||||
inline char_t getNameNoSpace(char_t it, char_t end, std::string &name) {
|
||||
name = "";
|
||||
inline char_t getNameNoSpace(char_t it, char_t end, char **name, size_t &len) {
|
||||
*name = nullptr;
|
||||
len = 0;
|
||||
if (isEndOfBuffer(it, end)) {
|
||||
return end;
|
||||
}
|
||||
@@ -186,22 +187,23 @@ inline char_t getNameNoSpace(char_t it, char_t end, std::string &name) {
|
||||
char *pStart = &(*it);
|
||||
while (!isEndOfBuffer(it, end) && !IsLineEnd(*it) && !IsSpaceOrNewLine(*it)) {
|
||||
++it;
|
||||
++len;
|
||||
}
|
||||
|
||||
while (isEndOfBuffer(it, end) || IsLineEnd(*it) || IsSpaceOrNewLine(*it)) {
|
||||
--it;
|
||||
--len;
|
||||
}
|
||||
++it;
|
||||
++len;
|
||||
|
||||
// Get name
|
||||
// if there is no name, and the previous char is a separator, come back to start
|
||||
while (&(*it) < pStart) {
|
||||
++it;
|
||||
++len;
|
||||
}
|
||||
std::string strName(pStart, &(*it));
|
||||
if (!strName.empty()) {
|
||||
name = strName;
|
||||
}
|
||||
*name = pStart;
|
||||
|
||||
return it;
|
||||
}
|
||||
@@ -239,7 +241,7 @@ inline char_t CopyNextWord(char_t it, char_t end, char *pBuffer, size_t length)
|
||||
*/
|
||||
template <class char_t>
|
||||
inline char_t getFloat(char_t it, char_t end, ai_real &value) {
|
||||
static const size_t BUFFERSIZE = 1024;
|
||||
static constexpr size_t BUFFERSIZE = 1024;
|
||||
char buffer[BUFFERSIZE] = {};
|
||||
it = CopyNextWord<char_t>(it, end, buffer, BUFFERSIZE);
|
||||
value = (ai_real)fast_atof(buffer);
|
||||
|
||||
Reference in New Issue
Block a user