Merge pull request #113245 from aaronfranke/gltf-order-of-operations

GLTF: Fix order of operations for buffers and accessors
This commit is contained in:
Rémi Verschelde 2025-12-01 11:49:20 +01:00
commit fc033ce088
No known key found for this signature in database
GPG key ID: C3336907360768E1

View file

@ -188,12 +188,6 @@ Error GLTFDocument::_serialize(Ref<GLTFState> p_state) {
return Error::FAILED;
}
/* STEP SERIALIZE ACCESSORS */
err = _encode_accessors(p_state);
if (err != OK) {
return Error::FAILED;
}
/* STEP SERIALIZE IMAGES */
err = _serialize_images(p_state);
if (err != OK) {
@ -206,12 +200,6 @@ Error GLTFDocument::_serialize(Ref<GLTFState> p_state) {
return Error::FAILED;
}
/* STEP SERIALIZE BUFFER VIEWS */
err = _encode_buffer_views(p_state);
if (err != OK) {
return Error::FAILED;
}
/* STEP SERIALIZE NODES */
err = _serialize_nodes(p_state);
if (err != OK) {
@ -242,6 +230,18 @@ Error GLTFDocument::_serialize(Ref<GLTFState> p_state) {
return Error::FAILED;
}
/* STEP SERIALIZE ACCESSORS */
err = _encode_accessors(p_state);
if (err != OK) {
return Error::FAILED;
}
/* STEP SERIALIZE BUFFER VIEWS */
err = _encode_buffer_views(p_state);
if (err != OK) {
return Error::FAILED;
}
for (Ref<GLTFDocumentExtension> ext : document_extensions) {
ERR_CONTINUE(ext.is_null());
err = ext->export_post(p_state);
@ -6992,6 +6992,18 @@ Error GLTFDocument::_parse_asset_header(Ref<GLTFState> p_state) {
Error GLTFDocument::_parse_gltf_state(Ref<GLTFState> p_state, const String &p_search_path) {
Error err;
/* PARSE BUFFERS */
err = _parse_buffers(p_state, p_search_path);
ERR_FAIL_COND_V(err != OK, ERR_PARSE_ERROR);
/* PARSE BUFFER VIEWS */
err = _parse_buffer_views(p_state);
ERR_FAIL_COND_V(err != OK, ERR_PARSE_ERROR);
/* PARSE ACCESSORS */
err = _parse_accessors(p_state);
ERR_FAIL_COND_V(err != OK, ERR_PARSE_ERROR);
/* PARSE EXTENSIONS */
err = _parse_gltf_extensions(p_state);
ERR_FAIL_COND_V(err != OK, ERR_PARSE_ERROR);
@ -7004,21 +7016,6 @@ Error GLTFDocument::_parse_gltf_state(Ref<GLTFState> p_state, const String &p_se
err = _parse_nodes(p_state);
ERR_FAIL_COND_V(err != OK, ERR_PARSE_ERROR);
/* PARSE BUFFERS */
err = _parse_buffers(p_state, p_search_path);
ERR_FAIL_COND_V(err != OK, ERR_PARSE_ERROR);
/* PARSE BUFFER VIEWS */
err = _parse_buffer_views(p_state);
ERR_FAIL_COND_V(err != OK, ERR_PARSE_ERROR);
/* PARSE ACCESSORS */
err = _parse_accessors(p_state);
ERR_FAIL_COND_V(err != OK, ERR_PARSE_ERROR);
if (!p_state->discard_meshes_and_materials) {
/* PARSE IMAGES */
err = _parse_images(p_state, p_search_path);