Merge pull request #34594 from marstaik/gltf_colorfix_u
Fix Hard Crash on glTF Color Accessor Import
This commit is contained in:
commit
e799271bb7
1 changed files with 7 additions and 8 deletions
|
@ -855,25 +855,24 @@ PoolVector<Color> EditorSceneImporterGLTF::_decode_accessor_as_color(GLTFState &
|
|||
|
||||
const 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;
|
||||
int vec_len = 3;
|
||||
if (type == TYPE_VEC4) {
|
||||
vec_len = 4;
|
||||
}
|
||||
|
||||
ERR_FAIL_COND_V(attribs.size() % components != 0, ret);
|
||||
ERR_FAIL_COND_V(attribs.size() % vec_len != 0, ret);
|
||||
const double *attribs_ptr = attribs.ptr();
|
||||
const int ret_size = attribs.size() / components;
|
||||
const int ret_size = attribs.size() / vec_len;
|
||||
ret.resize(ret_size);
|
||||
{
|
||||
PoolVector<Color>::Write w = ret.write();
|
||||
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], components == 4 ? attribs_ptr[i * 4 + 3] : 1.0);
|
||||
w[i] = Color(attribs_ptr[i * vec_len + 0], attribs_ptr[i * vec_len + 1], attribs_ptr[i * vec_len + 2], vec_len == 4 ? attribs_ptr[i * 4 + 3] : 1.0);
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
Vector<Quat> EditorSceneImporterGLTF::_decode_accessor_as_quat(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex) {
|
||||
|
||||
const Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex);
|
||||
|
|
Loading…
Reference in a new issue