commit 0eb9d8c3eb8657ea7e9de6091afef68c297df95e
parent e4f0208c83d61604fa56fcf0474a6b032e7c68db
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Tue, 21 Mar 2023 12:10:55 +0100
Use Embree 4 rather than Embree 3 as a RT backend
Fix a minor API flaw introduced by Embree 4
Diffstat:
3 files changed, 19 insertions(+), 9 deletions(-)
diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
@@ -36,7 +36,7 @@ option(NO_TEST "Disable the test" OFF)
################################################################################
# Check dependencies
################################################################################
-find_package(Embree 3.6 REQUIRED)
+find_package(Embree 4 REQUIRED)
find_package(RCMake 0.2.2 REQUIRED)
find_package(RSys 0.6 REQUIRED)
diff --git a/src/s2d_backend.h b/src/s2d_backend.h
@@ -36,15 +36,22 @@
#include <rsys/rsys.h> /* COMPILER_CL */
#ifdef COMPILER_CL
-/* Structure was padded due to alignment specifier */
-#pragma warning(push)
-#pragma warning(disable: 4324)
+ /* Structure was padded due to alignment specifier */
+ #pragma warning(push)
+ #pragma warning(disable: 4324)
+#elif defined COMPILER_GCC
+ /* Disable the "ISO C restricts enumerator values to range of 'int'" compiler
+ * warning in rtcore_common.h, line 293 (RTC_FEATURE_FLAG_ALL = 0xffffffff) */
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wpedantic"
#endif
-#include <embree3/rtcore.h>
+#include <embree4/rtcore.h>
#ifdef COMPILER_CL
-#pragma warning(pop)
+ #pragma warning(pop)
+#elif defined COMPILER_GCC
+ #pragma GCC diagnostic pop
#endif
#endif /* S2D_BACKEND_H */
diff --git a/src/s2d_scene_view.c b/src/s2d_scene_view.c
@@ -43,7 +43,7 @@
#include <limits.h>
struct intersect_context {
- struct RTCIntersectContext rtc;
+ struct RTCRayQueryContext rtc;
struct s2d_scene_view* scnview;
void* data; /* User defined data */
float ws_org[2]; /* World space ray origin */
@@ -730,6 +730,7 @@ scene_view_trace_ray
struct s2d_hit* hit)
{
struct RTCRayHit ray_hit;
+ struct RTCIntersectArguments intersect_args;
struct intersect_context intersect_ctx;
float dot = 1;
float dir2d[3] = {0.f, 0.f, 0.f};
@@ -803,7 +804,9 @@ scene_view_trace_ray
}
/* Initialise the intersect context */
- rtcInitIntersectContext(&intersect_ctx.rtc);
+ rtcInitIntersectArguments(&intersect_args);
+ intersect_args.context = &intersect_ctx.rtc;
+ rtcInitRayQueryContext(&intersect_ctx.rtc);
intersect_ctx.ws_org[0] = org[0];
intersect_ctx.ws_org[1] = org[1];
intersect_ctx.ws_dir[0] = dir[0];
@@ -817,7 +820,7 @@ scene_view_trace_ray
intersect_ctx.cos_dir_dir2d = dot;
/* Here we go */
- rtcIntersect1(scnview->rtc_scn, &intersect_ctx.rtc, &ray_hit);
+ rtcIntersect1(scnview->rtc_scn, &ray_hit, &intersect_args);
hit_setup(scnview, &ray_hit, hit);