Fix glTF not accepting VEC3 colors

Aside from the colors themselves, the rejection was adding somes issues later in the mesh import process.
This commit is contained in:
Pedro J. Estébanez 2018-03-19 00:05:29 +01:00
parent 201d2d7226
commit adbe749513

View file

@ -762,14 +762,22 @@ PoolVector<Color> EditorSceneImporterGLTF::_decode_accessor_as_color(GLTFState &
PoolVector<Color> ret; PoolVector<Color> ret;
if (attribs.size() == 0) if (attribs.size() == 0)
return ret; return ret;
ERR_FAIL_COND_V(attribs.size() % 4 != 0, ret); int type = state.accessors[p_accessor].type;
ERR_FAIL_COND_V(!(type == TYPE_VEC3 || type == TYPE_VEC4), ret);
int components;
if (type == TYPE_VEC3) {
components = 3;
} else { // TYPE_VEC4
components = 4;
}
ERR_FAIL_COND_V(attribs.size() % components != 0, ret);
const double *attribs_ptr = attribs.ptr(); const double *attribs_ptr = attribs.ptr();
int ret_size = attribs.size() / 4; int ret_size = attribs.size() / components;
ret.resize(ret_size); ret.resize(ret_size);
{ {
PoolVector<Color>::Write w = ret.write(); PoolVector<Color>::Write w = ret.write();
for (int i = 0; i < ret_size; i++) { for (int i = 0; i < ret_size; i++) {
w[i] = Color(attribs_ptr[i * 4 + 0], attribs_ptr[i * 4 + 1], attribs_ptr[i * 4 + 2], attribs_ptr[i * 4 + 3]); w[i] = Color(attribs_ptr[i * 4 + 0], attribs_ptr[i * 4 + 1], attribs_ptr[i * 4 + 2], components == 4 ? attribs_ptr[i * 4 + 3] : 1.0);
} }
} }
return ret; return ret;