Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 928377
Collapse All | Expand All

(-)a/intern/cycles/scene/image_vdb.cpp (-11 / +38 lines)
Lines 11-16 Link Here
11
#  include <openvdb/tools/Dense.h>
11
#  include <openvdb/tools/Dense.h>
12
#endif
12
#endif
13
#ifdef WITH_NANOVDB
13
#ifdef WITH_NANOVDB
14
#  define NANOVDB_USE_OPENVDB
14
#  include <nanovdb/util/OpenToNanoVDB.h>
15
#  include <nanovdb/util/OpenToNanoVDB.h>
15
#endif
16
#endif
16
17
Lines 52-74 struct ToNanoOp { Link Here
52
  {
53
  {
53
    if constexpr (!std::is_same_v<GridType, openvdb::MaskGrid>) {
54
    if constexpr (!std::is_same_v<GridType, openvdb::MaskGrid>) {
54
      try {
55
      try {
55
        FloatGridType floatgrid(*openvdb::gridConstPtrCast<GridType>(grid));
56
#    if NANOVDB_MAJOR_VERSION_NUMBER > 32 || \
57
        (NANOVDB_MAJOR_VERSION_NUMBER == 32 && NANOVDB_MINOR_VERSION_NUMBER >= 6)
58
        /* OpenVDB 11. */
56
        if constexpr (std::is_same_v<FloatGridType, openvdb::FloatGrid>) {
59
        if constexpr (std::is_same_v<FloatGridType, openvdb::FloatGrid>) {
60
          openvdb::FloatGrid floatgrid(*openvdb::gridConstPtrCast<GridType>(grid));
57
          if (precision == 0) {
61
          if (precision == 0) {
58
            nanogrid = nanovdb::openToNanoVDB<nanovdb::HostBuffer,
62
            nanogrid = nanovdb::createNanoGrid<openvdb::FloatGrid, nanovdb::FpN>(floatgrid);
59
                                              typename FloatGridType::TreeType,
60
                                              nanovdb::FpN>(floatgrid);
61
            return true;
62
          }
63
          }
63
          else if (precision == 16) {
64
          else if (precision == 16) {
64
            nanogrid = nanovdb::openToNanoVDB<nanovdb::HostBuffer,
65
            nanogrid = nanovdb::createNanoGrid<openvdb::FloatGrid, nanovdb::Fp16>(floatgrid);
65
                                              typename FloatGridType::TreeType,
66
          }
66
                                              nanovdb::Fp16>(floatgrid);
67
          else {
67
            return true;
68
            nanogrid = nanovdb::createNanoGrid<openvdb::FloatGrid, float>(floatgrid);
68
          }
69
          }
69
        }
70
        }
70
71
        else if constexpr (std::is_same_v<FloatGridType, openvdb::Vec3fGrid>) {
71
        nanogrid = nanovdb::openToNanoVDB(floatgrid);
72
          openvdb::Vec3fGrid floatgrid(*openvdb::gridConstPtrCast<GridType>(grid));
73
          nanogrid = nanovdb::createNanoGrid<openvdb::Vec3fGrid, nanovdb::Vec3f>(
74
              floatgrid, nanovdb::StatsMode::Disable);
75
        }
76
#    else
77
        /* OpenVDB 10. */
78
        if constexpr (std::is_same_v<FloatGridType, openvdb::FloatGrid>) {
79
          openvdb::FloatGrid floatgrid(*openvdb::gridConstPtrCast<GridType>(grid));
80
          if (precision == 0) {
81
            nanogrid =
82
                nanovdb::openToNanoVDB<nanovdb::HostBuffer, openvdb::FloatTree, nanovdb::FpN>(
83
                    floatgrid);
84
          }
85
          else if (precision == 16) {
86
            nanogrid =
87
                nanovdb::openToNanoVDB<nanovdb::HostBuffer, openvdb::FloatTree, nanovdb::Fp16>(
88
                    floatgrid);
89
          }
90
          else {
91
            nanogrid = nanovdb::openToNanoVDB(floatgrid);
92
          }
93
        }
94
        else if constexpr (std::is_same_v<FloatGridType, openvdb::Vec3fGrid>) {
95
          openvdb::Vec3fGrid floatgrid(*openvdb::gridConstPtrCast<GridType>(grid));
96
          nanogrid = nanovdb::openToNanoVDB(floatgrid);
97
        }
98
#    endif
72
      }
99
      }
73
      catch (const std::exception &e) {
100
      catch (const std::exception &e) {
74
        VLOG_WARNING << "Error converting OpenVDB to NanoVDB grid: " << e.what();
101
        VLOG_WARNING << "Error converting OpenVDB to NanoVDB grid: " << e.what();

Return to bug 928377