tornavis/source/blender/blenkernel/BKE_volume_grid_file_cache.hh

60 lines
1.6 KiB
C++

/* SPDX-FileCopyrightText: 2023 Blender Foundation
*
* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
/** \file
* \ingroup bke
*/
#ifdef WITH_OPENVDB
# include "BLI_vector.hh"
# include "BKE_volume_grid.hh"
/**
* The global volume grid file cache makes it easy to load volumes only once from disk and to then
* reuse the loaded volume across Blender. Additionally, this also supports caching simplify
* levels which are used when the "volume resolution" simplify scene setting is reduced. Working
* with reduced resolution can improve performance and uses less memory.
*/
namespace blender::bke::volume_grid::file_cache {
/**
* Get the volume grid identified by the parameters from a cache. This does not load the tree data
* in grid because that is done on demand when it is accessed.
*/
GVolumeGrid get_grid_from_file(StringRef file_path, StringRef grid_name, int simplify_level = 0);
struct GridsFromFile {
/**
* Empty on success. Otherwise it contains information about why loading the file failed.
*/
std::string error_message;
/**
* Meta data for the entire file (not for individual grids).
*/
std::shared_ptr<openvdb::MetaMap> file_meta_data;
/**
* All grids stored in the file.
*/
Vector<GVolumeGrid> grids;
};
/**
* Get all the data stored in a `.vdb` file.
* This does not actually load the tree data, which is done on demand.
*/
GridsFromFile get_all_grids_from_file(StringRef file_path, int simplify_level = 0);
/**
* Remove all cached volume grids that are currently not referenced outside of the cache.
*/
void unload_unused();
} // namespace blender::bke::volume_grid::file_cache
#endif