MCPcopy Create free account
hub / github.com/GDRETools/gdsdecomp / _encode_buffer_glb

Function _encode_buffer_glb

exporters/scene_exporter.cpp:483–526  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

481}
482
483Error _encode_buffer_glb(Ref<GLTFState> p_state, const String &p_path, Vector<String> &r_buffer_paths) {
484 auto state_buffers = p_state->get_buffers();
485 print_verbose("glTF: Total buffers: " + itos(state_buffers.size()));
486
487 if (state_buffers.is_empty() || _all_buffers_empty(state_buffers)) {
488 ERR_FAIL_COND_V_MSG(!p_state->get_buffer_views().is_empty(), ERR_INVALID_DATA, "glTF: Buffer views are present, but buffers are empty.");
489 return OK;
490 }
491 Array buffers;
492 Dictionary gltf_buffer;
493
494 gltf_buffer["byteLength"] = state_buffers[0].size();
495 buffers.push_back(gltf_buffer);
496
497 for (GLTFBufferIndex i = 1; i < state_buffers.size() - 1; i++) {
498 Vector<uint8_t> buffer_data = state_buffers[i];
499 if (buffer_data.is_empty()) {
500 if (i < state_buffers.size() - 1 && !_all_buffers_empty(state_buffers, i + 1)) {
501 // have to push back a dummy buffer to avoid changing the buffer index
502 WARN_PRINT("glTF: Buffer " + itos(i) + " is empty, but there are non-empty subsequent buffers.");
503 gltf_buffer["byteLength"] = 0;
504 buffers.push_back(gltf_buffer);
505 }
506 continue;
507 }
508 Dictionary gltf_buffer;
509 String filename = p_path.get_basename().get_file() + itos(i) + ".bin";
510 String path = p_path.get_base_dir() + "/" + filename;
511 Error err;
512 Ref<FileAccess> file = FileAccess::open(path, FileAccess::WRITE, &err);
513 if (file.is_null()) {
514 return err;
515 }
516 r_buffer_paths.push_back(path);
517 file->create(FileAccess::ACCESS_RESOURCES);
518 file->store_buffer(buffer_data.ptr(), buffer_data.size());
519 gltf_buffer["uri"] = filename;
520 gltf_buffer["byteLength"] = buffer_data.size();
521 buffers.push_back(gltf_buffer);
522 }
523 p_state->get_json()["buffers"] = buffers;
524
525 return OK;
526}
527
528Error _encode_buffer_bins(Ref<GLTFState> p_state, const String &p_path, Vector<String> &r_buffer_paths) {
529 auto state_buffers = p_state->get_buffers();

Callers 1

_serialize_fileFunction · 0.85

Calls 6

_all_buffers_emptyFunction · 0.85
push_backMethod · 0.80
sizeMethod · 0.45
get_fileMethod · 0.45
createMethod · 0.45
store_bufferMethod · 0.45

Tested by

no test coverage detected