Path: blob/master/thirdparty/embree/kernels/geometry/primitive.h
9905 views
// Copyright 2009-2021 Intel Corporation1// SPDX-License-Identifier: Apache-2.023#pragma once45#include "../common/default.h"6#include "../common/scene.h"7#include "../../common/simd/simd.h"8#include "../builders/primref.h"9#include "../builders/primref_mb.h"1011namespace embree12{13struct PrimitiveType14{15/*! returns name of this primitive type */16virtual const char* name() const = 0;1718/*! Returns the number of stored active primitives in a block. */19virtual size_t sizeActive(const char* This) const = 0;2021/*! Returns the number of stored active and inactive primitives in a block. */22virtual size_t sizeTotal(const char* This) const = 0;2324/*! Returns the number of bytes of block. */25virtual size_t getBytes(const char* This) const = 0;26};2728template<typename Primitive>29struct PrimitivePointQuery130{31static __forceinline bool pointQuery(PointQuery* query, PointQueryContext* context, const Primitive& prim)32{33bool changed = false;34for (size_t i = 0; i < Primitive::max_size(); i++)35{36if (!prim.valid(i)) break;37STAT3(point_query.trav_prims,1,1,1);38AccelSet* accel = (AccelSet*)context->scene->get(prim.geomID(i));39context->geomID = prim.geomID(i);40context->primID = prim.primID(i);41changed |= accel->pointQuery(query, context);42}43return changed;44}4546static __forceinline void pointQueryNoop(PointQuery* query, PointQueryContext* context, const Primitive& prim) { }47};48}495051