mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 13:41:03 +00:00 
			
		
		
		
	 767e374dce
			
		
	
	
		767e374dce
		
	
	
	
	
		
			
			Since Embree v3.13.0 supports AARCH64, switch back to the official repo instead of using Embree-aarch64. `thirdparty/embree/patches/godot-changes.patch` should now contain an accurate diff of the changes done to the library.
		
			
				
	
	
		
			125 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // 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
 | |
| 
 |