12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- // Copyright 2009-2021 Intel Corporation
- // SPDX-License-Identifier: Apache-2.0
- #pragma once
- #include "../common/default.h"
- #include "../common/scene.h"
- #include "../../common/simd/simd.h"
- #include "../builders/primref.h"
- #include "../builders/primref_mb.h"
- namespace embree
- {
- struct PrimitiveType
- {
- /*! returns name of this primitive type */
- virtual const char* name() const = 0;
-
- /*! Returns the number of stored active primitives in a block. */
- virtual size_t sizeActive(const char* This) const = 0;
- /*! Returns the number of stored active and inactive primitives in a block. */
- virtual size_t sizeTotal(const char* This) const = 0;
- /*! Returns the number of bytes of block. */
- virtual size_t getBytes(const char* This) const = 0;
- };
-
- template<typename Primitive>
- struct PrimitivePointQuery1
- {
- static __forceinline bool pointQuery(PointQuery* query, PointQueryContext* context, const Primitive& prim)
- {
- bool changed = false;
- for (size_t i = 0; i < Primitive::max_size(); i++)
- {
- if (!prim.valid(i)) break;
- STAT3(point_query.trav_prims,1,1,1);
- AccelSet* accel = (AccelSet*)context->scene->get(prim.geomID(i));
- context->geomID = prim.geomID(i);
- context->primID = prim.primID(i);
- changed |= accel->pointQuery(query, context);
- }
- return changed;
- }
-
- static __forceinline void pointQueryNoop(PointQuery* query, PointQueryContext* context, const Primitive& prim) { }
- };
- }
|