diff options
Diffstat (limited to 'thirdparty/embree-aarch64/kernels/common/geometry.h')
-rw-r--r-- | thirdparty/embree-aarch64/kernels/common/geometry.h | 582 |
1 files changed, 0 insertions, 582 deletions
diff --git a/thirdparty/embree-aarch64/kernels/common/geometry.h b/thirdparty/embree-aarch64/kernels/common/geometry.h deleted file mode 100644 index 953974bfd2..0000000000 --- a/thirdparty/embree-aarch64/kernels/common/geometry.h +++ /dev/null @@ -1,582 +0,0 @@ -// Copyright 2009-2020 Intel Corporation -// SPDX-License-Identifier: Apache-2.0 - -#pragma once - -#include "default.h" -#include "device.h" -#include "buffer.h" -#include "../common/point_query.h" -#include "../builders/priminfo.h" - -namespace embree -{ - class Scene; - class Geometry; - - struct GeometryCounts - { - __forceinline GeometryCounts() - : numFilterFunctions(0), - numTriangles(0), numMBTriangles(0), - numQuads(0), numMBQuads(0), - numBezierCurves(0), numMBBezierCurves(0), - numLineSegments(0), numMBLineSegments(0), - numSubdivPatches(0), numMBSubdivPatches(0), - numUserGeometries(0), numMBUserGeometries(0), - numInstancesCheap(0), numMBInstancesCheap(0), - numInstancesExpensive(0), numMBInstancesExpensive(0), - numGrids(0), numMBGrids(0), - numPoints(0), numMBPoints(0) {} - - __forceinline size_t size() const { - return numTriangles + numQuads + numBezierCurves + numLineSegments + numSubdivPatches + numUserGeometries + numInstancesCheap + numInstancesExpensive + numGrids + numPoints - + numMBTriangles + numMBQuads + numMBBezierCurves + numMBLineSegments + numMBSubdivPatches + numMBUserGeometries + numMBInstancesCheap + numMBInstancesExpensive + numMBGrids + numMBPoints; - } - - __forceinline unsigned int enabledGeometryTypesMask() const - { - unsigned int mask = 0; - if (numTriangles) mask |= 1 << 0; - if (numQuads) mask |= 1 << 1; - if (numBezierCurves+numLineSegments) mask |= 1 << 2; - if (numSubdivPatches) mask |= 1 << 3; - if (numUserGeometries) mask |= 1 << 4; - if (numInstancesCheap) mask |= 1 << 5; - if (numInstancesExpensive) mask |= 1 << 6; - if (numGrids) mask |= 1 << 7; - if (numPoints) mask |= 1 << 8; - - unsigned int maskMB = 0; - if (numMBTriangles) maskMB |= 1 << 0; - if (numMBQuads) maskMB |= 1 << 1; - if (numMBBezierCurves+numMBLineSegments) maskMB |= 1 << 2; - if (numMBSubdivPatches) maskMB |= 1 << 3; - if (numMBUserGeometries) maskMB |= 1 << 4; - if (numMBInstancesCheap) maskMB |= 1 << 5; - if (numMBInstancesExpensive) maskMB |= 1 << 6; - if (numMBGrids) maskMB |= 1 << 7; - if (numMBPoints) maskMB |= 1 << 8; - - return (mask<<8) + maskMB; - } - - __forceinline GeometryCounts operator+ (GeometryCounts const & rhs) const - { - GeometryCounts ret; - ret.numFilterFunctions = numFilterFunctions + rhs.numFilterFunctions; - ret.numTriangles = numTriangles + rhs.numTriangles; - ret.numMBTriangles = numMBTriangles + rhs.numMBTriangles; - ret.numQuads = numQuads + rhs.numQuads; - ret.numMBQuads = numMBQuads + rhs.numMBQuads; - ret.numBezierCurves = numBezierCurves + rhs.numBezierCurves; - ret.numMBBezierCurves = numMBBezierCurves + rhs.numMBBezierCurves; - ret.numLineSegments = numLineSegments + rhs.numLineSegments; - ret.numMBLineSegments = numMBLineSegments + rhs.numMBLineSegments; - ret.numSubdivPatches = numSubdivPatches + rhs.numSubdivPatches; - ret.numMBSubdivPatches = numMBSubdivPatches + rhs.numMBSubdivPatches; - ret.numUserGeometries = numUserGeometries + rhs.numUserGeometries; - ret.numMBUserGeometries = numMBUserGeometries + rhs.numMBUserGeometries; - ret.numInstancesCheap = numInstancesCheap + rhs.numInstancesCheap; - ret.numMBInstancesCheap = numMBInstancesCheap + rhs.numMBInstancesCheap; - ret.numInstancesExpensive = numInstancesExpensive + rhs.numInstancesExpensive; - ret.numMBInstancesExpensive = numMBInstancesExpensive + rhs.numMBInstancesExpensive; - ret.numGrids = numGrids + rhs.numGrids; - ret.numMBGrids = numMBGrids + rhs.numMBGrids; - ret.numPoints = numPoints + rhs.numPoints; - ret.numMBPoints = numMBPoints + rhs.numMBPoints; - - return ret; - } - - size_t numFilterFunctions; //!< number of geometries with filter functions enabled - size_t numTriangles; //!< number of enabled triangles - size_t numMBTriangles; //!< number of enabled motion blured triangles - size_t numQuads; //!< number of enabled quads - size_t numMBQuads; //!< number of enabled motion blurred quads - size_t numBezierCurves; //!< number of enabled curves - size_t numMBBezierCurves; //!< number of enabled motion blurred curves - size_t numLineSegments; //!< number of enabled line segments - size_t numMBLineSegments; //!< number of enabled line motion blurred segments - size_t numSubdivPatches; //!< number of enabled subdivision patches - size_t numMBSubdivPatches; //!< number of enabled motion blured subdivision patches - size_t numUserGeometries; //!< number of enabled user geometries - size_t numMBUserGeometries; //!< number of enabled motion blurred user geometries - size_t numInstancesCheap; //!< number of enabled cheap instances - size_t numMBInstancesCheap; //!< number of enabled motion blurred cheap instances - size_t numInstancesExpensive; //!< number of enabled expensive instances - size_t numMBInstancesExpensive; //!< number of enabled motion blurred expensive instances - size_t numGrids; //!< number of enabled grid geometries - size_t numMBGrids; //!< number of enabled motion blurred grid geometries - size_t numPoints; //!< number of enabled points - size_t numMBPoints; //!< number of enabled motion blurred points - }; - - /*! Base class all geometries are derived from */ - class Geometry : public RefCount - { - friend class Scene; - public: - - /*! type of geometry */ - enum GType - { - GTY_FLAT_LINEAR_CURVE = 0, - GTY_ROUND_LINEAR_CURVE = 1, - GTY_ORIENTED_LINEAR_CURVE = 2, - GTY_CONE_LINEAR_CURVE = 3, - - GTY_FLAT_BEZIER_CURVE = 4, - GTY_ROUND_BEZIER_CURVE = 5, - GTY_ORIENTED_BEZIER_CURVE = 6, - - GTY_FLAT_BSPLINE_CURVE = 8, - GTY_ROUND_BSPLINE_CURVE = 9, - GTY_ORIENTED_BSPLINE_CURVE = 10, - - GTY_FLAT_HERMITE_CURVE = 12, - GTY_ROUND_HERMITE_CURVE = 13, - GTY_ORIENTED_HERMITE_CURVE = 14, - - GTY_FLAT_CATMULL_ROM_CURVE = 16, - GTY_ROUND_CATMULL_ROM_CURVE = 17, - GTY_ORIENTED_CATMULL_ROM_CURVE = 18, - - GTY_TRIANGLE_MESH = 20, - GTY_QUAD_MESH = 21, - GTY_GRID_MESH = 22, - GTY_SUBDIV_MESH = 23, - - GTY_SPHERE_POINT = 25, - GTY_DISC_POINT = 26, - GTY_ORIENTED_DISC_POINT = 27, - - GTY_USER_GEOMETRY = 29, - GTY_INSTANCE_CHEAP = 30, - GTY_INSTANCE_EXPENSIVE = 31, - GTY_END = 32, - - GTY_BASIS_LINEAR = 0, - GTY_BASIS_BEZIER = 4, - GTY_BASIS_BSPLINE = 8, - GTY_BASIS_HERMITE = 12, - GTY_BASIS_CATMULL_ROM = 16, - GTY_BASIS_MASK = 28, - - GTY_SUBTYPE_FLAT_CURVE = 0, - GTY_SUBTYPE_ROUND_CURVE = 1, - GTY_SUBTYPE_ORIENTED_CURVE = 2, - GTY_SUBTYPE_MASK = 3, - }; - - enum GSubType - { - GTY_SUBTYPE_DEFAULT= 0, - GTY_SUBTYPE_INSTANCE_LINEAR = 0, - GTY_SUBTYPE_INSTANCE_QUATERNION = 1 - }; - - enum GTypeMask - { - MTY_FLAT_LINEAR_CURVE = 1ul << GTY_FLAT_LINEAR_CURVE, - MTY_ROUND_LINEAR_CURVE = 1ul << GTY_ROUND_LINEAR_CURVE, - MTY_CONE_LINEAR_CURVE = 1ul << GTY_CONE_LINEAR_CURVE, - MTY_ORIENTED_LINEAR_CURVE = 1ul << GTY_ORIENTED_LINEAR_CURVE, - - MTY_FLAT_BEZIER_CURVE = 1ul << GTY_FLAT_BEZIER_CURVE, - MTY_ROUND_BEZIER_CURVE = 1ul << GTY_ROUND_BEZIER_CURVE, - MTY_ORIENTED_BEZIER_CURVE = 1ul << GTY_ORIENTED_BEZIER_CURVE, - - MTY_FLAT_BSPLINE_CURVE = 1ul << GTY_FLAT_BSPLINE_CURVE, - MTY_ROUND_BSPLINE_CURVE = 1ul << GTY_ROUND_BSPLINE_CURVE, - MTY_ORIENTED_BSPLINE_CURVE = 1ul << GTY_ORIENTED_BSPLINE_CURVE, - - MTY_FLAT_HERMITE_CURVE = 1ul << GTY_FLAT_HERMITE_CURVE, - MTY_ROUND_HERMITE_CURVE = 1ul << GTY_ROUND_HERMITE_CURVE, - MTY_ORIENTED_HERMITE_CURVE = 1ul << GTY_ORIENTED_HERMITE_CURVE, - - MTY_FLAT_CATMULL_ROM_CURVE = 1ul << GTY_FLAT_CATMULL_ROM_CURVE, - MTY_ROUND_CATMULL_ROM_CURVE = 1ul << GTY_ROUND_CATMULL_ROM_CURVE, - MTY_ORIENTED_CATMULL_ROM_CURVE = 1ul << GTY_ORIENTED_CATMULL_ROM_CURVE, - - MTY_CURVE2 = MTY_FLAT_LINEAR_CURVE | MTY_ROUND_LINEAR_CURVE | MTY_CONE_LINEAR_CURVE | MTY_ORIENTED_LINEAR_CURVE, - - MTY_CURVE4 = MTY_FLAT_BEZIER_CURVE | MTY_ROUND_BEZIER_CURVE | MTY_ORIENTED_BEZIER_CURVE | - MTY_FLAT_BSPLINE_CURVE | MTY_ROUND_BSPLINE_CURVE | MTY_ORIENTED_BSPLINE_CURVE | - MTY_FLAT_HERMITE_CURVE | MTY_ROUND_HERMITE_CURVE | MTY_ORIENTED_HERMITE_CURVE | - MTY_FLAT_CATMULL_ROM_CURVE | MTY_ROUND_CATMULL_ROM_CURVE | MTY_ORIENTED_CATMULL_ROM_CURVE, - - MTY_SPHERE_POINT = 1ul << GTY_SPHERE_POINT, - MTY_DISC_POINT = 1ul << GTY_DISC_POINT, - MTY_ORIENTED_DISC_POINT = 1ul << GTY_ORIENTED_DISC_POINT, - - MTY_POINTS = MTY_SPHERE_POINT | MTY_DISC_POINT | MTY_ORIENTED_DISC_POINT, - - MTY_CURVES = MTY_CURVE2 | MTY_CURVE4 | MTY_POINTS, - - MTY_TRIANGLE_MESH = 1ul << GTY_TRIANGLE_MESH, - MTY_QUAD_MESH = 1ul << GTY_QUAD_MESH, - MTY_GRID_MESH = 1ul << GTY_GRID_MESH, - MTY_SUBDIV_MESH = 1ul << GTY_SUBDIV_MESH, - MTY_USER_GEOMETRY = 1ul << GTY_USER_GEOMETRY, - - MTY_INSTANCE_CHEAP = 1ul << GTY_INSTANCE_CHEAP, - MTY_INSTANCE_EXPENSIVE = 1ul << GTY_INSTANCE_EXPENSIVE, - MTY_INSTANCE = MTY_INSTANCE_CHEAP | MTY_INSTANCE_EXPENSIVE - }; - - static const char* gtype_names[GTY_END]; - - enum class State : unsigned { - MODIFIED = 0, - COMMITTED = 1, - }; - - public: - - /*! Geometry constructor */ - Geometry (Device* device, GType gtype, unsigned int numPrimitives, unsigned int numTimeSteps); - - /*! Geometry destructor */ - virtual ~Geometry(); - - public: - - /*! tests if geometry is enabled */ - __forceinline bool isEnabled() const { return enabled; } - - /*! tests if geometry is disabled */ - __forceinline bool isDisabled() const { return !isEnabled(); } - - /*! tests if that geometry has some filter function set */ - __forceinline bool hasFilterFunctions () const { - return (intersectionFilterN != nullptr) || (occlusionFilterN != nullptr); - } - - /*! returns geometry type */ - __forceinline GType getType() const { return gtype; } - - /*! returns curve type */ - __forceinline GType getCurveType() const { return (GType)(gtype & GTY_SUBTYPE_MASK); } - - /*! returns curve basis */ - __forceinline GType getCurveBasis() const { return (GType)(gtype & GTY_BASIS_MASK); } - - /*! returns geometry type mask */ - __forceinline GTypeMask getTypeMask() const { return (GTypeMask)(1 << gtype); } - - /*! returns number of primitives */ - __forceinline size_t size() const { return numPrimitives; } - - /*! sets the number of primitives */ - virtual void setNumPrimitives(unsigned int numPrimitives_in); - - /*! sets number of time steps */ - virtual void setNumTimeSteps (unsigned int numTimeSteps_in); - - /*! sets motion blur time range */ - void setTimeRange (const BBox1f range); - - /*! sets number of vertex attributes */ - virtual void setVertexAttributeCount (unsigned int N) { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"operation not supported for this geometry"); - } - - /*! sets number of topologies */ - virtual void setTopologyCount (unsigned int N) { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"operation not supported for this geometry"); - } - - /*! sets the build quality */ - void setBuildQuality(RTCBuildQuality quality_in) - { - this->quality = quality_in; - Geometry::update(); - } - - /* calculate time segment itime and fractional time ftime */ - __forceinline int timeSegment(float time, float& ftime) const { - return getTimeSegment(time,time_range.lower,time_range.upper,fnumTimeSegments,ftime); - } - - template<int N> - __forceinline vint<N> timeSegment(const vfloat<N>& time, vfloat<N>& ftime) const { - return getTimeSegment(time,vfloat<N>(time_range.lower),vfloat<N>(time_range.upper),vfloat<N>(fnumTimeSegments),ftime); - } - - /* calculate overlapping time segment range */ - __forceinline range<int> timeSegmentRange(const BBox1f& range) const { - return getTimeSegmentRange(range,time_range,fnumTimeSegments); - } - - /* returns time that corresponds to time step */ - __forceinline float timeStep(const int i) const { - assert(i>=0 && i<(int)numTimeSteps); - return time_range.lower + time_range.size()*float(i)/fnumTimeSegments; - } - - /*! for all geometries */ - public: - - /*! Enable geometry. */ - virtual void enable(); - - /*! Update geometry. */ - void update(); - - /*! commit of geometry */ - virtual void commit(); - - /*! Update geometry buffer. */ - virtual void updateBuffer(RTCBufferType type, unsigned int slot) { - update(); // update everything for geometries not supporting this call - } - - /*! Disable geometry. */ - virtual void disable(); - - /*! Verify the geometry */ - virtual bool verify() { return true; } - - /*! called before every build */ - virtual void preCommit(); - - /*! called after every build */ - virtual void postCommit(); - - virtual void addElementsToCount (GeometryCounts & counts) const { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"operation not supported for this geometry"); - }; - - /*! sets constant tessellation rate for the geometry */ - virtual void setTessellationRate(float N) { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"operation not supported for this geometry"); - } - - /*! Sets the maximal curve radius scale allowed by min-width feature. */ - virtual void setMaxRadiusScale(float s) { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"operation not supported for this geometry"); - } - - /*! Set user data pointer. */ - virtual void setUserData(void* ptr); - - /*! Get user data pointer. */ - __forceinline void* getUserData() const { - return userPtr; - } - - /*! interpolates user data to the specified u/v location */ - virtual void interpolate(const RTCInterpolateArguments* const args) { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"operation not supported for this geometry"); - } - - /*! interpolates user data to the specified u/v locations */ - virtual void interpolateN(const RTCInterpolateNArguments* const args); - - /* point query api */ - bool pointQuery(PointQuery* query, PointQueryContext* context); - - /*! for subdivision surfaces only */ - public: - virtual void setSubdivisionMode (unsigned topologyID, RTCSubdivisionMode mode) { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"operation not supported for this geometry"); - } - - virtual void setVertexAttributeTopology(unsigned int vertexBufferSlot, unsigned int indexBufferSlot) { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"operation not supported for this geometry"); - } - - /*! Set displacement function. */ - virtual void setDisplacementFunction (RTCDisplacementFunctionN filter) { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"operation not supported for this geometry"); - } - - virtual unsigned int getFirstHalfEdge(unsigned int faceID) { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"operation not supported for this geometry"); - } - - virtual unsigned int getFace(unsigned int edgeID) { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"operation not supported for this geometry"); - } - - virtual unsigned int getNextHalfEdge(unsigned int edgeID) { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"operation not supported for this geometry"); - } - - virtual unsigned int getPreviousHalfEdge(unsigned int edgeID) { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"operation not supported for this geometry"); - } - - virtual unsigned int getOppositeHalfEdge(unsigned int topologyID, unsigned int edgeID) { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"operation not supported for this geometry"); - } - - /*! get fast access to first vertex buffer if applicable */ - virtual float * getCompactVertexArray () const { - return nullptr; - } - - /*! Returns the modified counter - how many times the geo has been modified */ - __forceinline unsigned int getModCounter () const { - return modCounter_; - } - - /*! for triangle meshes and bezier curves only */ - public: - - - /*! Sets ray mask. */ - virtual void setMask(unsigned mask) { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"operation not supported for this geometry"); - } - - /*! Sets specified buffer. */ - virtual void setBuffer(RTCBufferType type, unsigned int slot, RTCFormat format, const Ref<Buffer>& buffer, size_t offset, size_t stride, unsigned int num) { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"operation not supported for this geometry"); - } - - /*! Gets specified buffer. */ - virtual void* getBuffer(RTCBufferType type, unsigned int slot) { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"operation not supported for this geometry"); - } - - /*! Set intersection filter function for ray packets of size N. */ - virtual void setIntersectionFilterFunctionN (RTCFilterFunctionN filterN); - - /*! Set occlusion filter function for ray packets of size N. */ - virtual void setOcclusionFilterFunctionN (RTCFilterFunctionN filterN); - - /*! for instances only */ - public: - - /*! Sets the instanced scene */ - virtual void setInstancedScene(const Ref<Scene>& scene) { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"operation not supported for this geometry"); - } - - /*! Sets transformation of the instance */ - virtual void setTransform(const AffineSpace3fa& transform, unsigned int timeStep) { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"operation not supported for this geometry"); - } - - /*! Sets transformation of the instance */ - virtual void setQuaternionDecomposition(const AffineSpace3ff& qd, unsigned int timeStep) { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"operation not supported for this geometry"); - } - - /*! Returns the transformation of the instance */ - virtual AffineSpace3fa getTransform(float time) { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"operation not supported for this geometry"); - } - - /*! for user geometries only */ - public: - - /*! Set bounds function. */ - virtual void setBoundsFunction (RTCBoundsFunction bounds, void* userPtr) { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"operation not supported for this geometry"); - } - - /*! Set intersect function for ray packets of size N. */ - virtual void setIntersectFunctionN (RTCIntersectFunctionN intersect) { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"operation not supported for this geometry"); - } - - /*! Set occlusion function for ray packets of size N. */ - virtual void setOccludedFunctionN (RTCOccludedFunctionN occluded) { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"operation not supported for this geometry"); - } - - /*! Set point query function. */ - void setPointQueryFunction(RTCPointQueryFunction func); - - /*! returns number of time segments */ - __forceinline unsigned numTimeSegments () const { - return numTimeSteps-1; - } - - public: - - virtual PrimInfo createPrimRefArray(mvector<PrimRef>& prims, const range<size_t>& r, size_t k, unsigned int geomID) const { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"createPrimRefArray not implemented for this geometry"); - } - - virtual PrimInfo createPrimRefArrayMB(mvector<PrimRef>& prims, size_t itime, const range<size_t>& r, size_t k, unsigned int geomID) const { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"createPrimRefMBArray not implemented for this geometry"); - } - - virtual PrimInfoMB createPrimRefMBArray(mvector<PrimRefMB>& prims, const BBox1f& t0t1, const range<size_t>& r, size_t k, unsigned int geomID) const { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"createPrimRefMBArray not implemented for this geometry"); - } - - virtual LinearSpace3fa computeAlignedSpace(const size_t primID) const { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"computeAlignedSpace not implemented for this geometry"); - } - - virtual LinearSpace3fa computeAlignedSpaceMB(const size_t primID, const BBox1f time_range) const { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"computeAlignedSpace not implemented for this geometry"); - } - - virtual Vec3fa computeDirection(unsigned int primID) const { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"computeDirection not implemented for this geometry"); - } - - virtual Vec3fa computeDirection(unsigned int primID, size_t time) const { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"computeDirection not implemented for this geometry"); - } - - virtual BBox3fa vbounds(size_t primID) const { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"vbounds not implemented for this geometry"); - } - - virtual BBox3fa vbounds(const LinearSpace3fa& space, size_t primID) const { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"vbounds not implemented for this geometry"); - } - - virtual BBox3fa vbounds(const Vec3fa& ofs, const float scale, const float r_scale0, const LinearSpace3fa& space, size_t i, size_t itime = 0) const { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"vbounds not implemented for this geometry"); - } - - virtual LBBox3fa vlinearBounds(size_t primID, const BBox1f& time_range) const { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"vlinearBounds not implemented for this geometry"); - } - - virtual LBBox3fa vlinearBounds(const LinearSpace3fa& space, size_t primID, const BBox1f& time_range) const { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"vlinearBounds not implemented for this geometry"); - } - - virtual LBBox3fa vlinearBounds(const Vec3fa& ofs, const float scale, const float r_scale0, const LinearSpace3fa& space, size_t primID, const BBox1f& time_range) const { - throw_RTCError(RTC_ERROR_INVALID_OPERATION,"vlinearBounds not implemented for this geometry"); - } - - public: - __forceinline bool hasIntersectionFilter() const { return intersectionFilterN != nullptr; } - __forceinline bool hasOcclusionFilter() const { return occlusionFilterN != nullptr; } - - public: - Device* device; //!< device this geometry belongs to - - void* userPtr; //!< user pointer - unsigned int numPrimitives; //!< number of primitives of this geometry - - unsigned int numTimeSteps; //!< number of time steps - float fnumTimeSegments; //!< number of time segments (precalculation) - BBox1f time_range; //!< motion blur time range - - unsigned int mask; //!< for masking out geometry - unsigned int modCounter_ = 1; //!< counter for every modification - used to rebuild scenes when geo is modified - - struct { - GType gtype : 8; //!< geometry type - GSubType gsubtype : 8; //!< geometry subtype - RTCBuildQuality quality : 3; //!< build quality for geometry - unsigned state : 2; - bool enabled : 1; //!< true if geometry is enabled - }; - - RTCFilterFunctionN intersectionFilterN; - RTCFilterFunctionN occlusionFilterN; - RTCPointQueryFunction pointQueryFunc; - }; -} |