initial commit, 4.5 stable
Some checks failed
🔗 GHA / 📊 Static checks (push) Has been cancelled
🔗 GHA / 🤖 Android (push) Has been cancelled
🔗 GHA / 🍏 iOS (push) Has been cancelled
🔗 GHA / 🐧 Linux (push) Has been cancelled
🔗 GHA / 🍎 macOS (push) Has been cancelled
🔗 GHA / 🏁 Windows (push) Has been cancelled
🔗 GHA / 🌐 Web (push) Has been cancelled
Some checks failed
🔗 GHA / 📊 Static checks (push) Has been cancelled
🔗 GHA / 🤖 Android (push) Has been cancelled
🔗 GHA / 🍏 iOS (push) Has been cancelled
🔗 GHA / 🐧 Linux (push) Has been cancelled
🔗 GHA / 🍎 macOS (push) Has been cancelled
🔗 GHA / 🏁 Windows (push) Has been cancelled
🔗 GHA / 🌐 Web (push) Has been cancelled
This commit is contained in:
125
thirdparty/embree/include/embree4/rtcore_builder.h
vendored
Normal file
125
thirdparty/embree/include/embree4/rtcore_builder.h
vendored
Normal file
@@ -0,0 +1,125 @@
|
||||
// Copyright 2009-2021 Intel Corporation
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "rtcore_scene.h"
|
||||
|
||||
RTC_NAMESPACE_BEGIN
|
||||
|
||||
/* Opaque BVH type */
|
||||
typedef struct RTCBVHTy* RTCBVH;
|
||||
|
||||
/* Input build primitives for the builder */
|
||||
struct RTC_ALIGN(32) RTCBuildPrimitive
|
||||
{
|
||||
float lower_x, lower_y, lower_z;
|
||||
unsigned int geomID;
|
||||
float upper_x, upper_y, upper_z;
|
||||
unsigned int primID;
|
||||
};
|
||||
|
||||
/* Opaque thread local allocator type */
|
||||
typedef struct RTCThreadLocalAllocatorTy* RTCThreadLocalAllocator;
|
||||
|
||||
/* Callback to create a node */
|
||||
typedef void* (*RTCCreateNodeFunction) (RTCThreadLocalAllocator allocator, unsigned int childCount, void* userPtr);
|
||||
|
||||
/* Callback to set the pointer to all children */
|
||||
typedef void (*RTCSetNodeChildrenFunction) (void* nodePtr, void** children, unsigned int childCount, void* userPtr);
|
||||
|
||||
/* Callback to set the bounds of all children */
|
||||
typedef void (*RTCSetNodeBoundsFunction) (void* nodePtr, const struct RTCBounds** bounds, unsigned int childCount, void* userPtr);
|
||||
|
||||
/* Callback to create a leaf node */
|
||||
typedef void* (*RTCCreateLeafFunction) (RTCThreadLocalAllocator allocator, const struct RTCBuildPrimitive* primitives, size_t primitiveCount, void* userPtr);
|
||||
|
||||
/* Callback to split a build primitive */
|
||||
typedef void (*RTCSplitPrimitiveFunction) (const struct RTCBuildPrimitive* primitive, unsigned int dimension, float position, struct RTCBounds* leftBounds, struct RTCBounds* rightBounds, void* userPtr);
|
||||
|
||||
/* Build flags */
|
||||
enum RTCBuildFlags
|
||||
{
|
||||
RTC_BUILD_FLAG_NONE = 0,
|
||||
RTC_BUILD_FLAG_DYNAMIC = (1 << 0),
|
||||
};
|
||||
|
||||
enum RTCBuildConstants
|
||||
{
|
||||
RTC_BUILD_MAX_PRIMITIVES_PER_LEAF = 32
|
||||
};
|
||||
|
||||
/* Input for builders */
|
||||
struct RTCBuildArguments
|
||||
{
|
||||
size_t byteSize;
|
||||
|
||||
enum RTCBuildQuality buildQuality;
|
||||
enum RTCBuildFlags buildFlags;
|
||||
unsigned int maxBranchingFactor;
|
||||
unsigned int maxDepth;
|
||||
unsigned int sahBlockSize;
|
||||
unsigned int minLeafSize;
|
||||
unsigned int maxLeafSize;
|
||||
float traversalCost;
|
||||
float intersectionCost;
|
||||
|
||||
RTCBVH bvh;
|
||||
struct RTCBuildPrimitive* primitives;
|
||||
size_t primitiveCount;
|
||||
size_t primitiveArrayCapacity;
|
||||
|
||||
RTCCreateNodeFunction createNode;
|
||||
RTCSetNodeChildrenFunction setNodeChildren;
|
||||
RTCSetNodeBoundsFunction setNodeBounds;
|
||||
RTCCreateLeafFunction createLeaf;
|
||||
RTCSplitPrimitiveFunction splitPrimitive;
|
||||
RTCProgressMonitorFunction buildProgress;
|
||||
void* userPtr;
|
||||
};
|
||||
|
||||
/* Returns the default build settings. */
|
||||
RTC_FORCEINLINE struct RTCBuildArguments rtcDefaultBuildArguments()
|
||||
{
|
||||
struct RTCBuildArguments args;
|
||||
args.byteSize = sizeof(args);
|
||||
args.buildQuality = RTC_BUILD_QUALITY_MEDIUM;
|
||||
args.buildFlags = RTC_BUILD_FLAG_NONE;
|
||||
args.maxBranchingFactor = 2;
|
||||
args.maxDepth = 32;
|
||||
args.sahBlockSize = 1;
|
||||
args.minLeafSize = 1;
|
||||
args.maxLeafSize = RTC_BUILD_MAX_PRIMITIVES_PER_LEAF;
|
||||
args.traversalCost = 1.0f;
|
||||
args.intersectionCost = 1.0f;
|
||||
args.bvh = NULL;
|
||||
args.primitives = NULL;
|
||||
args.primitiveCount = 0;
|
||||
args.primitiveArrayCapacity = 0;
|
||||
args.createNode = NULL;
|
||||
args.setNodeChildren = NULL;
|
||||
args.setNodeBounds = NULL;
|
||||
args.createLeaf = NULL;
|
||||
args.splitPrimitive = NULL;
|
||||
args.buildProgress = NULL;
|
||||
args.userPtr = NULL;
|
||||
return args;
|
||||
}
|
||||
|
||||
/* Creates a new BVH. */
|
||||
RTC_API RTCBVH rtcNewBVH(RTCDevice device);
|
||||
|
||||
/* Builds a BVH. */
|
||||
RTC_API void* rtcBuildBVH(const struct RTCBuildArguments* args);
|
||||
|
||||
/* Allocates memory using the thread local allocator. */
|
||||
RTC_API void* rtcThreadLocalAlloc(RTCThreadLocalAllocator allocator, size_t bytes, size_t align);
|
||||
|
||||
/* Retains the BVH (increments reference count). */
|
||||
RTC_API void rtcRetainBVH(RTCBVH bvh);
|
||||
|
||||
/* Releases the BVH (decrements reference count). */
|
||||
RTC_API void rtcReleaseBVH(RTCBVH bvh);
|
||||
|
||||
RTC_NAMESPACE_END
|
||||
|
Reference in New Issue
Block a user