// Copyright 2009-2021 Intel Corporation // SPDX-License-Identifier: Apache-2.0 #pragma once #include "default.h" #include "accel.h" namespace embree { #define MODE_HIGH_QUALITY (1<<8) /*! virtual interface for all hierarchy builders */ class Builder : public RefCount { public: static const size_t DEFAULT_SINGLE_THREAD_THRESHOLD = 1024; /*! initiates the hierarchy builder */ virtual void build() = 0; /*! notifies the builder about the deletion of some geometry */ virtual void deleteGeometry(size_t geomID) {}; /*! clears internal builder state */ virtual void clear() = 0; }; /*! virtual interface for progress monitor class */ struct BuildProgressMonitor { virtual void operator() (size_t dn) const = 0; }; /*! build the progress monitor interface from a closure */ template struct ProgressMonitorClosure : BuildProgressMonitor { public: ProgressMonitorClosure (const Closure& closure) : closure(closure) {} void operator() (size_t dn) const { closure(dn); } private: const Closure closure; }; template __forceinline const ProgressMonitorClosure BuildProgressMonitorFromClosure(const Closure& closure) { return ProgressMonitorClosure(closure); } struct LineSegments; struct TriangleMesh; struct QuadMesh; struct UserGeometry; class Scene; typedef void (*createLineSegmentsAccelTy)(Scene* scene, LineSegments* mesh, AccelData*& accel, Builder*& builder); typedef void (*createTriangleMeshAccelTy)(Scene* scene, unsigned int geomID, AccelData*& accel, Builder*& builder); typedef void (*createQuadMeshAccelTy)(Scene* scene, unsigned int geomID, AccelData*& accel, Builder*& builder); typedef void (*createUserGeometryAccelTy)(Scene* scene, unsigned int geomID, AccelData*& accel, Builder*& builder); }