diff options
author | mberezhnoy <mberezhnoy@productengine.com> | 2013-08-21 18:56:11 +0300 |
---|---|---|
committer | mberezhnoy <mberezhnoy@productengine.com> | 2013-08-21 18:56:11 +0300 |
commit | 15e59b81b0f1117384d2400619f3460dafbb7a3f (patch) | |
tree | 33e2c5f8635465a2046838e9abeeacb0fa5bd193 /indra/llprimitive/llmodel.cpp | |
parent | 10419d802f88e7636a6ca45c6025b7e19b3ca3c7 (diff) | |
parent | 82bf4e4db2bdb9effdf64e9edaa76a78913e25d3 (diff) |
merge
Diffstat (limited to 'indra/llprimitive/llmodel.cpp')
-rwxr-xr-x | indra/llprimitive/llmodel.cpp | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp index 28ed051c55..5ed05e2201 100755 --- a/indra/llprimitive/llmodel.cpp +++ b/indra/llprimitive/llmodel.cpp @@ -628,25 +628,41 @@ LLModel::EModelStatus load_face_from_dom_polygons(std::vector<LLVolumeFace>& fac if (v) { U32 v_idx = idx[j*stride+v_offset]*3; + v_idx = llclamp(v_idx, (U32) 0, (U32) v->getCount()); vert.getPosition().set(v->get(v_idx), v->get(v_idx+1), v->get(v_idx+2)); } - if (n) + //bounds check n and t lookups because some FBX to DAE converters + //use negative indices and empty arrays to indicate data does not exist + //for a particular channel + if (n && n->getCount() > 0) { U32 n_idx = idx[j*stride+n_offset]*3; + n_idx = llclamp(n_idx, (U32) 0, (U32) n->getCount()); vert.getNormal().set(n->get(n_idx), n->get(n_idx+1), n->get(n_idx+2)); } + else + { + vert.getNormal().clear(); + } + - if (t) + if (t && t->getCount() > 0) { U32 t_idx = idx[j*stride+t_offset]*2; + t_idx = llclamp(t_idx, (U32) 0, (U32) t->getCount()); vert.mTexCoord.setVec(t->get(t_idx), t->get(t_idx+1)); } + else + { + vert.mTexCoord.clear(); + } + verts.push_back(vert); } |