Skip trailing whitespace in mtl. Fixes #92.
This commit is contained in:
6
models/issue-92.mtl
Normal file
6
models/issue-92.mtl
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
newmtl default
|
||||||
|
Ka 0 0 0
|
||||||
|
Kd 0 0 0
|
||||||
|
Ks 0 0 0
|
||||||
|
map_Kd tmp.png
|
||||||
|
|
||||||
7
models/issue-92.obj
Normal file
7
models/issue-92.obj
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
mtllib issue-92.mtl
|
||||||
|
o Test
|
||||||
|
v 1.864151 -1.219172 -5.532511
|
||||||
|
v 0.575869 -0.666304 5.896140
|
||||||
|
v 0.940448 1.000000 -1.971128
|
||||||
|
usemtl default
|
||||||
|
f 1 2 3
|
||||||
@@ -351,6 +351,22 @@ TEST_CASE("stream_load", "[Stream]") {
|
|||||||
REQUIRE(true == TestStreamLoadObj());
|
REQUIRE(true == TestStreamLoadObj());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_CASE("trailing_whitespace_in_mtl", "[Issue92]") {
|
||||||
|
tinyobj::attrib_t attrib;
|
||||||
|
std::vector<tinyobj::shape_t> shapes;
|
||||||
|
std::vector<tinyobj::material_t> materials;
|
||||||
|
|
||||||
|
std::string err;
|
||||||
|
bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &err, "../models/issue-92.obj", gMtlBasePath);
|
||||||
|
|
||||||
|
if (!err.empty()) {
|
||||||
|
std::cerr << err << std::endl;
|
||||||
|
}
|
||||||
|
REQUIRE(true == ret);
|
||||||
|
REQUIRE(1 == materials.size());
|
||||||
|
REQUIRE(0 == materials[0].diffuse_texname.compare("tmp.png"));
|
||||||
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
int
|
int
|
||||||
main(
|
main(
|
||||||
|
|||||||
@@ -534,8 +534,7 @@ static vertex_index parseTriple(const char **token, int vsize, int vnsize,
|
|||||||
|
|
||||||
// Parse raw triples: i, i/j/k, i//k, i/j
|
// Parse raw triples: i, i/j/k, i//k, i/j
|
||||||
static vertex_index parseRawTriple(const char **token) {
|
static vertex_index parseRawTriple(const char **token) {
|
||||||
vertex_index vi(
|
vertex_index vi(static_cast<int>(0)); // 0 is an invalid index in OBJ
|
||||||
static_cast<int>(0)); // 0 is an invalid index in OBJ
|
|
||||||
|
|
||||||
vi.v_idx = atoi((*token));
|
vi.v_idx = atoi((*token));
|
||||||
(*token) += strcspn((*token), "/ \t\r");
|
(*token) += strcspn((*token), "/ \t\r");
|
||||||
@@ -679,6 +678,11 @@ void LoadMtl(std::map<std::string, int> *material_map,
|
|||||||
|
|
||||||
std::string linebuf(&buf[0]);
|
std::string linebuf(&buf[0]);
|
||||||
|
|
||||||
|
// Trim trailing whitespace.
|
||||||
|
if (linebuf.size() > 0) {
|
||||||
|
linebuf = linebuf.substr(0, linebuf.find_last_not_of(" \t") + 1);
|
||||||
|
}
|
||||||
|
|
||||||
// Trim newline '\r\n' or '\n'
|
// Trim newline '\r\n' or '\n'
|
||||||
if (linebuf.size() > 0) {
|
if (linebuf.size() > 0) {
|
||||||
if (linebuf[linebuf.size() - 1] == '\n')
|
if (linebuf[linebuf.size() - 1] == '\n')
|
||||||
|
|||||||
Reference in New Issue
Block a user