std::shared_ptr GltfModel::AddBufferViewForFile()

in src/gltf/GltfModel.cpp [37:64]


std::shared_ptr<BufferViewData> GltfModel::AddBufferViewForFile(
    BufferData& buffer,
    const std::string& filename) {
  // see if we've already created a BufferViewData for this precise file
  auto iter = filenameToBufferView.find(filename);
  if (iter != filenameToBufferView.end()) {
    return iter->second;
  }

  std::shared_ptr<BufferViewData> result;
  std::ifstream file(filename, std::ios::binary | std::ios::ate);
  if (file) {
    std::streamsize size = file.tellg();
    file.seekg(0, std::ios::beg);

    std::vector<char> fileBuffer(size);
    if (file.read(fileBuffer.data(), size)) {
      result = AddRawBufferView(buffer, fileBuffer.data(), to_uint32(size));
    } else {
      fmt::printf("Warning: Couldn't read %lu bytes from %s, skipping file.\n", size, filename);
    }
  } else {
    fmt::printf("Warning: Couldn't open file %s, skipping file.\n", filename);
  }
  // note that we persist here not only success, but also failure, as nullptr
  filenameToBufferView[filename] = result;
  return result;
}