Path: blob/master/thirdparty/embree/kernels/geometry/instance_array.h
9905 views
// Copyright 2009-2021 Intel Corporation1// SPDX-License-Identifier: Apache-2.023#pragma once45#include "primitive.h"6#include "../common/scene_instance_array.h"78namespace embree9{10//template<int M>11struct InstanceArrayPrimitive12{13struct Type : public PrimitiveType14{15const char* name() const;16size_t sizeActive(const char* This) const;17size_t sizeTotal(const char* This) const;18size_t getBytes(const char* This) const;19};20static Type type;2122public:2324/* primitive supports multiple time segments */25static const bool singleTimeSegment = false;2627/* Returns maximum number of stored primitives */28static __forceinline size_t max_size() { return 1; }2930/* Returns required number of primitive blocks for N primitives */31static __forceinline size_t blocks(size_t N) { return N; }3233public:3435InstanceArrayPrimitive (const uint32_t geomID, const uint32_t primID)36: primID_(primID)37, instID_(geomID)38{}3940__forceinline bool valid() const {41return primID_ != -1;42}4344void fill(const PrimRef* prims, size_t& i, size_t end, Scene* scene)45{46assert(end-i == 1);47const PrimRef& prim = prims[i]; i++;48const unsigned int geomID = prim.geomID();49const unsigned int primID = prim.primID();50new (this) InstanceArrayPrimitive(geomID, primID);51}5253__forceinline LBBox3fa fillMB(const PrimRef* prims, size_t& i, size_t end, Scene* scene, size_t itime)54{55assert(end-i == 1);56const PrimRef& prim = prims[i]; i++;57const unsigned int geomID = prim.geomID();58const size_t primID = prim.primID();59new (this) InstanceArrayPrimitive(geomID, primID);60const InstanceArray* instanceArray = scene->get<InstanceArray>(geomID);61return instanceArray->linearBounds(primID,itime);62}6364__forceinline LBBox3fa fillMB(const PrimRefMB* prims, size_t& i, size_t end, Scene* scene, const BBox1f time_range)65{66assert(end-i == 1);67const PrimRefMB& prim = prims[i]; i++;68const unsigned int geomID = prim.geomID();69const size_t primID = prim.primID();70new (this) InstanceArrayPrimitive(geomID, primID);71const InstanceArray* instanceArray = scene->get<InstanceArray>(geomID);72return instanceArray->linearBounds(primID,time_range);73}7475/* Updates the primitive */76__forceinline BBox3fa update(InstanceArray* instanceArray) {77return instanceArray->bounds(0);78}7980public:81unsigned int primID_;82unsigned int instID_;83};84}858687