| 778 | } |
| 779 | |
| 780 | Error GLTFDocument::_encode_buffer_bins(Ref<GLTFState> p_state, const String &p_path) { |
| 781 | print_verbose("glTF: Total buffers: " + itos(p_state->buffers.size())); |
| 782 | |
| 783 | if (p_state->buffers.is_empty()) { |
| 784 | return OK; |
| 785 | } |
| 786 | Array buffers; |
| 787 | |
| 788 | for (GLTFBufferIndex i = 0; i < p_state->buffers.size(); i++) { |
| 789 | Vector<uint8_t> buffer_data = p_state->buffers[i]; |
| 790 | Dictionary gltf_buffer; |
| 791 | String filename = p_path.get_basename().get_file() + itos(i) + ".bin"; |
| 792 | String path = p_path.get_base_dir() + "/" + filename; |
| 793 | Error err; |
| 794 | Ref<FileAccess> file = FileAccess::open(path, FileAccess::WRITE, &err); |
| 795 | if (file.is_null()) { |
| 796 | return err; |
| 797 | } |
| 798 | if (buffer_data.is_empty()) { |
| 799 | return OK; |
| 800 | } |
| 801 | file->create(FileAccess::ACCESS_RESOURCES); |
| 802 | file->store_buffer(buffer_data.ptr(), buffer_data.size()); |
| 803 | gltf_buffer["uri"] = filename; |
| 804 | gltf_buffer["byteLength"] = buffer_data.size(); |
| 805 | buffers.push_back(gltf_buffer); |
| 806 | } |
| 807 | p_state->json["buffers"] = buffers; |
| 808 | |
| 809 | return OK; |
| 810 | } |
| 811 | |
| 812 | Error GLTFDocument::_parse_buffers(Ref<GLTFState> p_state, const String &p_base_path) { |
| 813 | if (!p_state->json.has("buffers")) { |
nothing calls this directly
no test coverage detected