Files
workinf_Blender_Wasm/blender-5.2.0/intern/cycles/scene/image_vdb.h
2026-08-12 04:47:48 -04:00

77 lines
1.9 KiB
C++

/* SPDX-FileCopyrightText: 2011-2022 Blender Foundation
*
* SPDX-License-Identifier: Apache-2.0 */
#pragma once
#ifdef WITH_OPENVDB
# include <openvdb/openvdb.h>
#endif
#ifdef WITH_NANOVDB
# include <nanovdb/NanoVDB.h>
# if NANOVDB_MAJOR_VERSION_NUMBER > 32 || \
(NANOVDB_MAJOR_VERSION_NUMBER == 32 && NANOVDB_MINOR_VERSION_NUMBER >= 7)
# include <nanovdb/GridHandle.h>
# else
# include <nanovdb/util/GridHandle.h>
# endif
#endif
#include "scene/image_loader.h"
#include "util/transform.h"
CCL_NAMESPACE_BEGIN
class VDBImageLoader : public ImageLoader {
public:
#ifdef WITH_OPENVDB
VDBImageLoader(openvdb::GridBase::ConstPtr grid_,
const string &grid_name,
const float clipping = 0.001f);
#endif
VDBImageLoader(const string &grid_name, const float clipping = 0.001f);
~VDBImageLoader() override;
bool load_metadata(ImageMetaData &metadata,
const ImageLoaderParams &params,
Progress &progress) override;
bool load_pixels(const ImageMetaData &metadata, void *pixels) override;
string name() const override;
bool equals(const ImageLoader &other) const override;
void cleanup() override;
bool is_vdb_loader() const override;
#ifdef WITH_OPENVDB
openvdb::GridBase::ConstPtr get_grid();
#endif
protected:
virtual void load_grid() {}
void grid_from_dense_voxels(const size_t width,
const size_t height,
const size_t depth,
const int channels,
const float *voxels,
Transform transform_3d);
string grid_name;
float clipping = 0.001f;
#ifdef WITH_OPENVDB
openvdb::GridBase::ConstPtr grid;
openvdb::CoordBBox bbox;
#endif
#ifdef WITH_NANOVDB
nanovdb::GridHandle<> nanogrid;
int precision = 16;
#endif
};
CCL_NAMESPACE_END