primitive.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. // Copyright 2009-2021 Intel Corporation
  2. // SPDX-License-Identifier: Apache-2.0
  3. #pragma once
  4. #include "../common/default.h"
  5. #include "../common/scene.h"
  6. #include "../../common/simd/simd.h"
  7. #include "../builders/primref.h"
  8. #include "../builders/primref_mb.h"
  9. namespace embree
  10. {
  11. struct PrimitiveType
  12. {
  13. /*! returns name of this primitive type */
  14. virtual const char* name() const = 0;
  15. /*! Returns the number of stored active primitives in a block. */
  16. virtual size_t sizeActive(const char* This) const = 0;
  17. /*! Returns the number of stored active and inactive primitives in a block. */
  18. virtual size_t sizeTotal(const char* This) const = 0;
  19. /*! Returns the number of bytes of block. */
  20. virtual size_t getBytes(const char* This) const = 0;
  21. };
  22. template<typename Primitive>
  23. struct PrimitivePointQuery1
  24. {
  25. static __forceinline bool pointQuery(PointQuery* query, PointQueryContext* context, const Primitive& prim)
  26. {
  27. bool changed = false;
  28. for (size_t i = 0; i < Primitive::max_size(); i++)
  29. {
  30. if (!prim.valid(i)) break;
  31. STAT3(point_query.trav_prims,1,1,1);
  32. AccelSet* accel = (AccelSet*)context->scene->get(prim.geomID(i));
  33. context->geomID = prim.geomID(i);
  34. context->primID = prim.primID(i);
  35. changed |= accel->pointQuery(query, context);
  36. }
  37. return changed;
  38. }
  39. static __forceinline void pointQueryNoop(PointQuery* query, PointQueryContext* context, const Primitive& prim) { }
  40. };
  41. }