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

Function _encode_buffer_bins

exporters/scene_exporter.cpp:528–569  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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();
530 print_verbose("glTF: Total buffers: " + itos(state_buffers.size()));
531
532 if (state_buffers.is_empty() || _all_buffers_empty(state_buffers)) {
533 ERR_FAIL_COND_V_MSG(!p_state->get_buffer_views().is_empty(), ERR_INVALID_DATA, "glTF: Buffer views are present, but buffers are empty.");
534 return OK;
535 }
536 Array buffers;
537
538 for (GLTFBufferIndex i = 0; i < state_buffers.size(); i++) {
539 Vector<uint8_t> buffer_data = state_buffers[i];
540 Dictionary gltf_buffer;
541 if (buffer_data.is_empty()) {
542 if (i < state_buffers.size() - 1 && !_all_buffers_empty(state_buffers, i + 1)) {
543 // have to push back a dummy buffer to avoid changing the buffer index
544 WARN_PRINT("glTF: Buffer " + itos(i) + " is empty, but there are non-empty subsequent buffers.");
545 gltf_buffer["byteLength"] = 0;
546 buffers.push_back(gltf_buffer);
547 }
548 continue;
549 }
550 String filename = p_path.get_basename().get_file() + itos(i) + ".bin";
551 String path = p_path.get_base_dir() + "/" + filename;
552 Error err;
553 Ref<FileAccess> file = FileAccess::open(path, FileAccess::WRITE, &err);
554 if (file.is_null()) {
555 return err;
556 }
557 r_buffer_paths.push_back(path);
558 file->create(FileAccess::ACCESS_RESOURCES);
559 file->store_buffer(buffer_data.ptr(), buffer_data.size());
560 gltf_buffer["uri"] = filename;
561 gltf_buffer["byteLength"] = buffer_data.size();
562 buffers.push_back(gltf_buffer);
563 }
564 if (!buffers.is_empty()) {
565 p_state->get_json()["buffers"] = buffers;
566 }
567
568 return OK;
569}
570
571Error _serialize_file(Ref<GLTFState> p_state, const String p_path, Vector<String> &r_buffer_paths, bool p_force_single_precision) {
572 Error err = FAILED;

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