Path: blob/master/thirdparty/embree/kernels/common/builder.h
9905 views
// Copyright 2009-2021 Intel Corporation1// SPDX-License-Identifier: Apache-2.023#pragma once45#include "default.h"6#include "accel.h"78namespace embree9{10#define MODE_HIGH_QUALITY (1<<8)1112/*! virtual interface for all hierarchy builders */13class Builder : public RefCount {14public:1516static const size_t DEFAULT_SINGLE_THREAD_THRESHOLD = 1024;1718/*! initiates the hierarchy builder */19virtual void build() = 0;2021/*! notifies the builder about the deletion of some geometry */22virtual void deleteGeometry(size_t geomID) {};2324/*! clears internal builder state */25virtual void clear() = 0;26};2728/*! virtual interface for progress monitor class */29struct BuildProgressMonitor {30virtual void operator() (size_t dn) const = 0;31};3233/*! build the progress monitor interface from a closure */34template<typename Closure>35struct ProgressMonitorClosure : BuildProgressMonitor36{37public:38ProgressMonitorClosure (const Closure& closure) : closure(closure) {}39void operator() (size_t dn) const { closure(dn); }40private:41const Closure closure;42};43template<typename Closure> __forceinline const ProgressMonitorClosure<Closure> BuildProgressMonitorFromClosure(const Closure& closure) {44return ProgressMonitorClosure<Closure>(closure);45}4647struct LineSegments;48struct TriangleMesh;49struct QuadMesh;50struct UserGeometry;5152class Scene;5354typedef void (*createLineSegmentsAccelTy)(Scene* scene, LineSegments* mesh, AccelData*& accel, Builder*& builder);55typedef void (*createTriangleMeshAccelTy)(Scene* scene, unsigned int geomID, AccelData*& accel, Builder*& builder);56typedef void (*createQuadMeshAccelTy)(Scene* scene, unsigned int geomID, AccelData*& accel, Builder*& builder);57typedef void (*createUserGeometryAccelTy)(Scene* scene, unsigned int geomID, AccelData*& accel, Builder*& builder);5859}606162