#pragma once
#include "rtcore_device.h"
RTC_NAMESPACE_BEGIN
struct RTCRayHit;
struct RTCRayHit4;
struct RTCRayHit8;
struct RTCRayHit16;
enum RTCSceneFlags {
RTC_SCENE_FLAG_NONE = 0,
RTC_SCENE_FLAG_DYNAMIC = (1 << 0),
RTC_SCENE_FLAG_COMPACT = (1 << 1),
RTC_SCENE_FLAG_ROBUST = (1 << 2),
RTC_SCENE_FLAG_FILTER_FUNCTION_IN_ARGUMENTS = (1 << 3)
};
struct RTCIntersectArguments {
enum RTCRayQueryFlags flags; enum RTCFeatureFlags
feature_mask; struct RTCRayQueryContext *context; RTCFilterFunctionN filter; RTCIntersectFunctionN
intersect; #if RTC_MIN_WIDTH
float minWidthDistanceFactor; #endif
};
RTC_FORCEINLINE void
rtcInitIntersectArguments(struct RTCIntersectArguments *args) {
args->flags = RTC_RAY_QUERY_FLAG_INCOHERENT;
args->feature_mask = RTC_FEATURE_FLAG_ALL;
args->context = NULL;
args->filter = NULL;
args->intersect = NULL;
#if RTC_MIN_WIDTH
args->minWidthDistanceFactor = 0.0f;
#endif
}
struct RTCOccludedArguments {
enum RTCRayQueryFlags flags; enum RTCFeatureFlags
feature_mask; struct RTCRayQueryContext *context; RTCFilterFunctionN filter; RTCOccludedFunctionN occluded;
#if RTC_MIN_WIDTH
float minWidthDistanceFactor; #endif
};
RTC_FORCEINLINE void
rtcInitOccludedArguments(struct RTCOccludedArguments *args) {
args->flags = RTC_RAY_QUERY_FLAG_INCOHERENT;
args->feature_mask = RTC_FEATURE_FLAG_ALL;
args->context = NULL;
args->filter = NULL;
args->occluded = NULL;
#if RTC_MIN_WIDTH
args->minWidthDistanceFactor = 0.0f;
#endif
}
RTC_API RTCScene rtcNewScene(RTCDevice device);
RTC_API RTCDevice rtcGetSceneDevice(RTCScene hscene);
RTC_API void rtcRetainScene(RTCScene scene);
RTC_API void rtcReleaseScene(RTCScene scene);
RTC_API unsigned int rtcAttachGeometry(RTCScene scene, RTCGeometry geometry);
RTC_API void rtcAttachGeometryByID(RTCScene scene, RTCGeometry geometry,
unsigned int geomID);
RTC_API void rtcDetachGeometry(RTCScene scene, unsigned int geomID);
RTC_API RTCGeometry rtcGetGeometry(RTCScene scene, unsigned int geomID);
RTC_API RTCGeometry rtcGetGeometryThreadSafe(RTCScene scene,
unsigned int geomID);
RTC_SYCL_API void *rtcGetGeometryUserDataFromScene(RTCScene scene,
unsigned int geomID);
RTC_SYCL_API void
rtcGetGeometryTransformFromScene(RTCScene scene, unsigned int geomID,
float time, enum RTCFormat format, void *xfm);
RTC_API void rtcCommitScene(RTCScene scene);
RTC_API void rtcJoinCommitScene(RTCScene scene);
typedef bool (*RTCProgressMonitorFunction)(void *ptr, double n);
RTC_API void rtcSetSceneProgressMonitorFunction(
RTCScene scene, RTCProgressMonitorFunction progress, void *ptr);
RTC_API void rtcSetSceneBuildQuality(RTCScene scene,
enum RTCBuildQuality quality);
RTC_API void rtcSetSceneFlags(RTCScene scene, enum RTCSceneFlags flags);
RTC_API enum RTCSceneFlags rtcGetSceneFlags(RTCScene scene);
RTC_API void rtcGetSceneBounds(RTCScene scene, struct RTCBounds *bounds_o);
RTC_API void rtcGetSceneLinearBounds(RTCScene scene,
struct RTCLinearBounds *bounds_o);
RTC_API bool rtcPointQuery(RTCScene scene, struct RTCPointQuery *query,
struct RTCPointQueryContext *context,
RTCPointQueryFunction queryFunc, void *userPtr);
RTC_API bool rtcPointQuery4(const int *valid, RTCScene scene,
struct RTCPointQuery4 *query,
struct RTCPointQueryContext *context,
RTCPointQueryFunction queryFunc, void **userPtr);
RTC_API bool rtcPointQuery8(const int *valid, RTCScene scene,
struct RTCPointQuery8 *query,
struct RTCPointQueryContext *context,
RTCPointQueryFunction queryFunc, void **userPtr);
RTC_API bool rtcPointQuery16(const int *valid, RTCScene scene,
struct RTCPointQuery16 *query,
struct RTCPointQueryContext *context,
RTCPointQueryFunction queryFunc, void **userPtr);
RTC_SYCL_API void
rtcIntersect1(RTCScene scene, struct RTCRayHit *rayhit,
struct RTCIntersectArguments *args RTC_OPTIONAL_ARGUMENT);
RTC_API void
rtcIntersect4(const int *valid, RTCScene scene, struct RTCRayHit4 *rayhit,
struct RTCIntersectArguments *args RTC_OPTIONAL_ARGUMENT);
RTC_API void
rtcIntersect8(const int *valid, RTCScene scene, struct RTCRayHit8 *rayhit,
struct RTCIntersectArguments *args RTC_OPTIONAL_ARGUMENT);
RTC_API void
rtcIntersect16(const int *valid, RTCScene scene, struct RTCRayHit16 *rayhit,
struct RTCIntersectArguments *args RTC_OPTIONAL_ARGUMENT);
RTC_SYCL_API void
rtcForwardIntersect1(const struct RTCIntersectFunctionNArguments *args,
RTCScene scene, struct RTCRay *ray, unsigned int instID);
RTC_API void
rtcForwardIntersect4(const int *valid,
const struct RTCIntersectFunctionNArguments *args,
RTCScene scene, struct RTCRay4 *ray, unsigned int instID);
RTC_API void
rtcForwardIntersect8(const int *valid,
const struct RTCIntersectFunctionNArguments *args,
RTCScene scene, struct RTCRay8 *ray, unsigned int instID);
RTC_API void rtcForwardIntersect16(
const int *valid, const struct RTCIntersectFunctionNArguments *args,
RTCScene scene, struct RTCRay16 *ray, unsigned int instID);
RTC_SYCL_API void
rtcOccluded1(RTCScene scene, struct RTCRay *ray,
struct RTCOccludedArguments *args RTC_OPTIONAL_ARGUMENT);
RTC_API void
rtcOccluded4(const int *valid, RTCScene scene, struct RTCRay4 *ray,
struct RTCOccludedArguments *args RTC_OPTIONAL_ARGUMENT);
RTC_API void
rtcOccluded8(const int *valid, RTCScene scene, struct RTCRay8 *ray,
struct RTCOccludedArguments *args RTC_OPTIONAL_ARGUMENT);
RTC_API void
rtcOccluded16(const int *valid, RTCScene scene, struct RTCRay16 *ray,
struct RTCOccludedArguments *args RTC_OPTIONAL_ARGUMENT);
RTC_SYCL_API void
rtcForwardOccluded1(const struct RTCOccludedFunctionNArguments *args,
RTCScene scene, struct RTCRay *ray, unsigned int instID);
RTC_API void
rtcForwardOccluded4(const int *valid,
const struct RTCOccludedFunctionNArguments *args,
RTCScene scene, struct RTCRay4 *ray, unsigned int instID);
RTC_API void
rtcForwardOccluded8(const int *valid,
const struct RTCOccludedFunctionNArguments *args,
RTCScene scene, struct RTCRay8 *ray, unsigned int instID);
RTC_API void
rtcForwardOccluded16(const int *valid,
const struct RTCOccludedFunctionNArguments *args,
RTCScene scene, struct RTCRay16 *ray, unsigned int instID);
struct RTCCollision {
unsigned int geomID0;
unsigned int primID0;
unsigned int geomID1;
unsigned int primID1;
};
typedef void (*RTCCollideFunc)(void *userPtr, struct RTCCollision *collisions,
unsigned int num_collisions);
RTC_API void rtcCollide(RTCScene scene0, RTCScene scene1,
RTCCollideFunc callback, void *userPtr);
#if defined(__cplusplus)
inline RTCSceneFlags operator|(RTCSceneFlags a, RTCSceneFlags b) {
return (RTCSceneFlags)((size_t)a | (size_t)b);
}
#endif
RTC_NAMESPACE_END