builder.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. // Copyright 2009-2021 Intel Corporation
  2. // SPDX-License-Identifier: Apache-2.0
  3. #pragma once
  4. #include "default.h"
  5. #include "accel.h"
  6. namespace embree
  7. {
  8. #define MODE_HIGH_QUALITY (1<<8)
  9. /*! virtual interface for all hierarchy builders */
  10. class Builder : public RefCount {
  11. public:
  12. static const size_t DEFAULT_SINGLE_THREAD_THRESHOLD = 1024;
  13. /*! initiates the hierarchy builder */
  14. virtual void build() = 0;
  15. /*! notifies the builder about the deletion of some geometry */
  16. virtual void deleteGeometry(size_t geomID) {};
  17. /*! clears internal builder state */
  18. virtual void clear() = 0;
  19. };
  20. /*! virtual interface for progress monitor class */
  21. struct BuildProgressMonitor {
  22. virtual void operator() (size_t dn) const = 0;
  23. };
  24. /*! build the progress monitor interface from a closure */
  25. template<typename Closure>
  26. struct ProgressMonitorClosure : BuildProgressMonitor
  27. {
  28. public:
  29. ProgressMonitorClosure (const Closure& closure) : closure(closure) {}
  30. void operator() (size_t dn) const { closure(dn); }
  31. private:
  32. const Closure closure;
  33. };
  34. template<typename Closure> __forceinline const ProgressMonitorClosure<Closure> BuildProgressMonitorFromClosure(const Closure& closure) {
  35. return ProgressMonitorClosure<Closure>(closure);
  36. }
  37. struct LineSegments;
  38. struct TriangleMesh;
  39. struct QuadMesh;
  40. struct UserGeometry;
  41. class Scene;
  42. typedef void (*createLineSegmentsAccelTy)(Scene* scene, LineSegments* mesh, AccelData*& accel, Builder*& builder);
  43. typedef void (*createTriangleMeshAccelTy)(Scene* scene, unsigned int geomID, AccelData*& accel, Builder*& builder);
  44. typedef void (*createQuadMeshAccelTy)(Scene* scene, unsigned int geomID, AccelData*& accel, Builder*& builder);
  45. typedef void (*createUserGeometryAccelTy)(Scene* scene, unsigned int geomID, AccelData*& accel, Builder*& builder);
  46. }