rtcore_ispc.cpp 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629
  1. // ======================================================================== //
  2. // Copyright 2009-2017 Intel Corporation //
  3. // //
  4. // Licensed under the Apache License, Version 2.0 (the "License"); //
  5. // you may not use this file except in compliance with the License. //
  6. // You may obtain a copy of the License at //
  7. // //
  8. // http://www.apache.org/licenses/LICENSE-2.0 //
  9. // //
  10. // Unless required by applicable law or agreed to in writing, software //
  11. // distributed under the License is distributed on an "AS IS" BASIS, //
  12. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. //
  13. // See the License for the specific language governing permissions and //
  14. // limitations under the License. //
  15. // ======================================================================== //
  16. #include "default.h"
  17. #include "scene.h"
  18. #if defined(__INTEL_COMPILER)
  19. #pragma warning (disable: 1478) // warning: function was declared deprecated
  20. #elif defined(_MSC_VER)
  21. #pragma warning (disable: 4996) // warning: function was declared deprecated
  22. #elif defined(__clang__)
  23. #pragma clang diagnostic ignored "-Wdeprecated-declarations" // warning: xxx is deprecated
  24. #elif defined(__GNUC__)
  25. #pragma GCC diagnostic ignored "-Wdeprecated-declarations" // warning: xxx is deprecated
  26. #endif
  27. namespace embree
  28. {
  29. #define size_t int // FIXME: workaround for ISPC bug (ISPC bug still present in ISPC v1.8.2)
  30. #define ssize_t int // FIXME: workaround for ISPC bug (ISPC bug still present in ISPC v1.8.2)
  31. extern "C" RTCDevice ispcNewDevice(const char* cfg) {
  32. return rtcNewDevice(cfg);
  33. }
  34. extern "C" void ispcDeleteDevice(RTCDevice device) {
  35. rtcDeleteDevice(device);
  36. }
  37. extern "C" void ispcInit(const char* cfg) {
  38. rtcInit(cfg);
  39. }
  40. extern "C" void ispcExit() {
  41. rtcExit();
  42. }
  43. extern "C" void ispcSetParameter1i(const RTCParameter parm, ssize_t val) {
  44. rtcSetParameter1i(parm,val);
  45. }
  46. extern "C" ssize_t ispcGetParameter1i(const RTCParameter parm) {
  47. return ssize_t(rtcGetParameter1i(parm));
  48. }
  49. extern "C" void ispcDeviceSetParameter1i(RTCDevice device, const RTCParameter parm, ssize_t val) {
  50. rtcDeviceSetParameter1i(device,parm,val);
  51. }
  52. extern "C" ssize_t ispcDeviceGetParameter1i(RTCDevice device, const RTCParameter parm) {
  53. return ssize_t(rtcDeviceGetParameter1i(device,parm));
  54. }
  55. extern "C" RTCError ispcGetError() {
  56. return rtcGetError();
  57. }
  58. extern "C" RTCError ispcDeviceGetError(RTCDevice device) {
  59. return rtcDeviceGetError(device);
  60. }
  61. extern "C" void ispcSetErrorFunction(void* f) {
  62. return rtcSetErrorFunction((RTCErrorFunc)f);
  63. }
  64. extern "C" void ispcDeviceSetErrorFunction(RTCDevice device, void* f) {
  65. return rtcDeviceSetErrorFunction(device,(RTCErrorFunc)f);
  66. }
  67. extern "C" void ispcDeviceSetErrorFunction2(RTCDevice device, void* fptr, void* uptr) {
  68. return rtcDeviceSetErrorFunction2(device,(RTCErrorFunc2)fptr,uptr);
  69. }
  70. extern "C" void ispcSetMemoryMonitorFunction(void* f) {
  71. return rtcSetMemoryMonitorFunction((RTCMemoryMonitorFunc)f);
  72. }
  73. extern "C" void ispcDeviceSetMemoryMonitorFunction(RTCDevice device, void* f) {
  74. return rtcDeviceSetMemoryMonitorFunction(device,(RTCMemoryMonitorFunc)f);
  75. }
  76. extern "C" void ispcDeviceSetMemoryMonitorFunction2(RTCDevice device, void* fptr, void* uptr) {
  77. return rtcDeviceSetMemoryMonitorFunction2(device,(RTCMemoryMonitorFunc2)fptr,uptr);
  78. }
  79. extern "C" void ispcDebug() {
  80. rtcDebug();
  81. }
  82. extern "C" RTCScene ispcNewScene (RTCSceneFlags flags, RTCAlgorithmFlags aflags)
  83. {
  84. if (!isCoherent(flags) && !isIncoherent(flags)) flags = RTCSceneFlags(flags | RTC_SCENE_COHERENT);
  85. return rtcNewScene(flags,aflags);
  86. }
  87. extern "C" RTCScene ispcNewScene2 (RTCDevice device, RTCSceneFlags flags, RTCAlgorithmFlags aflags)
  88. {
  89. if (!isCoherent(flags) && !isIncoherent(flags)) flags = RTCSceneFlags(flags | RTC_SCENE_COHERENT);
  90. return rtcDeviceNewScene(device,flags,aflags);
  91. }
  92. extern "C" void ispcSetProgressMonitorFunction(RTCScene scene, void* func, void* ptr) {
  93. return rtcSetProgressMonitorFunction(scene,(RTCProgressMonitorFunc)func,ptr);
  94. }
  95. extern "C" void ispcCommit (RTCScene scene) {
  96. return rtcCommit(scene);
  97. }
  98. extern "C" void ispcCommitJoin (RTCScene scene) {
  99. return rtcCommitJoin(scene);
  100. }
  101. extern "C" void ispcCommitThread (RTCScene scene, unsigned int threadID, unsigned int numThreads) {
  102. return rtcCommitThread(scene,threadID,numThreads);
  103. }
  104. extern "C" void ispcGetBounds(RTCScene scene, RTCBounds& bounds_o) {
  105. rtcGetBounds(scene,bounds_o);
  106. }
  107. extern "C" void ispcGetLinearBounds(RTCScene scene, RTCBounds* bounds_o) {
  108. rtcGetLinearBounds(scene,bounds_o);
  109. }
  110. extern "C" void ispcIntersect1 (RTCScene scene, const RTCIntersectContext* context, RTCRay& ray) {
  111. rtcIntersect1Ex(scene,context,ray);
  112. }
  113. extern "C" void ispcIntersect4 (const void* valid, RTCScene scene, const RTCIntersectContext* context, RTCRay4& ray) {
  114. rtcIntersect4Ex(valid,scene,context,ray);
  115. }
  116. extern "C" void ispcIntersect8 (const void* valid, RTCScene scene, const RTCIntersectContext* context, RTCRay8& ray) {
  117. rtcIntersect8Ex(valid,scene,context,ray);
  118. }
  119. extern "C" void ispcIntersect16 (const void* valid, RTCScene scene, const RTCIntersectContext* context, RTCRay16& ray) {
  120. rtcIntersect16Ex(valid,scene,context,ray);
  121. }
  122. extern "C" void ispcIntersect1M (RTCScene scene, const RTCIntersectContext* context, RTCRay* rays, const size_t N, const size_t M, const size_t stride) {
  123. rtcIntersect1M(scene,context,rays,M,stride);
  124. }
  125. extern "C" void ispcIntersect1Mp (RTCScene scene, const RTCIntersectContext* context, RTCRay** rays, const size_t N, const size_t M, const size_t stride) {
  126. rtcIntersect1Mp(scene,context,rays,M);
  127. }
  128. extern "C" void ispcIntersectNM (RTCScene scene, const RTCIntersectContext* context, RTCRayN* rays, const size_t N, const size_t M, const size_t stride) {
  129. rtcIntersectNM(scene,context,rays,N,M,stride);
  130. }
  131. extern "C" void ispcIntersectNp (RTCScene scene, const RTCIntersectContext* context, const RTCRayNp& rays, const size_t N) {
  132. rtcIntersectNp(scene,context,rays,N);
  133. }
  134. extern "C" void ispcOccluded1 (RTCScene scene, RTCRay& ray) {
  135. rtcOccluded(scene,ray);
  136. }
  137. extern "C" void ispcOccluded4 (const void* valid, RTCScene scene, const RTCIntersectContext* context, RTCRay4& ray) {
  138. rtcOccluded4Ex(valid,scene,context,ray);
  139. }
  140. extern "C" void ispcOccluded8 (const void* valid, RTCScene scene, const RTCIntersectContext* context, RTCRay8& ray) {
  141. rtcOccluded8Ex(valid,scene,context,ray);
  142. }
  143. extern "C" void ispcOccluded16 (const void* valid, RTCScene scene, const RTCIntersectContext* context, RTCRay16& ray) {
  144. rtcOccluded16Ex(valid,scene,context,ray);
  145. }
  146. extern "C" void ispcOccluded1M (RTCScene scene, const RTCIntersectContext* context, RTCRay* rays, const size_t N, const size_t M, const size_t stride) {
  147. rtcOccluded1M(scene,context,rays,M,stride);
  148. }
  149. extern "C" void ispcOccluded1Mp (RTCScene scene, const RTCIntersectContext* context, RTCRay** rays, const size_t N, const size_t M, const size_t stride) {
  150. rtcOccluded1Mp(scene,context,rays,M);
  151. }
  152. extern "C" void ispcOccludedNM (RTCScene scene, const RTCIntersectContext* context, RTCRayN* rays, const size_t N, const size_t M, const size_t stride) {
  153. rtcOccludedNM(scene,context,(RTCRayN*)rays,N,M,stride);
  154. }
  155. extern "C" void ispcOccludedNp (RTCScene scene, const RTCIntersectContext* context, const RTCRayNp& rays, const size_t N) {
  156. rtcOccludedNp(scene,context,rays,N);
  157. }
  158. extern "C" void ispcDeleteScene (RTCScene scene) {
  159. rtcDeleteScene(scene);
  160. }
  161. extern "C" unsigned ispcNewInstance (RTCScene target, RTCScene source) {
  162. return rtcNewInstance(target,source);
  163. }
  164. extern "C" unsigned ispcNewInstance2 (RTCScene target, RTCScene source, size_t numTimeSteps) {
  165. return rtcNewInstance2(target,source,numTimeSteps);
  166. }
  167. extern "C" void ispcSetTransform (RTCScene scene, unsigned geomID, RTCMatrixType layout, const float* xfm) {
  168. return rtcSetTransform(scene,geomID,layout,xfm);
  169. }
  170. extern "C" void ispcSetTransform2 (RTCScene scene, unsigned geomID, RTCMatrixType layout, const float* xfm, size_t timeStep) {
  171. return rtcSetTransform2(scene,geomID,layout,xfm,timeStep);
  172. }
  173. extern "C" unsigned ispcNewUserGeometry (RTCScene scene, size_t numItems) {
  174. return rtcNewUserGeometry(scene,numItems);
  175. }
  176. extern "C" unsigned ispcNewUserGeometry2 (RTCScene scene, size_t numItems, size_t numTimeSteps) {
  177. return rtcNewUserGeometry2(scene,numItems,numTimeSteps);
  178. }
  179. extern "C" unsigned ispcNewUserGeometry3 (RTCScene scene, RTCGeometryFlags gflags, size_t numItems, size_t numTimeSteps) {
  180. return rtcNewUserGeometry3(scene,gflags,numItems,numTimeSteps);
  181. }
  182. extern "C" unsigned ispcNewTriangleMesh (RTCScene scene, RTCGeometryFlags flags, size_t numTriangles, size_t numVertices, size_t numTimeSteps) {
  183. return rtcNewTriangleMesh((RTCScene)scene,flags,numTriangles,numVertices,numTimeSteps);
  184. }
  185. extern "C" unsigned ispcNewQuadMesh (RTCScene scene, RTCGeometryFlags flags, size_t numQuads, size_t numVertices, size_t numTimeSteps) {
  186. return rtcNewQuadMesh((RTCScene)scene,flags,numQuads,numVertices,numTimeSteps);
  187. }
  188. extern "C" unsigned ispcNewLineSegments (RTCScene scene, RTCGeometryFlags flags, size_t numSegments, size_t numVertices, size_t numTimeSteps) {
  189. return rtcNewLineSegments(scene,flags,numSegments,numVertices,numTimeSteps);
  190. }
  191. extern "C" unsigned ispcNewHairGeometry (RTCScene scene, RTCGeometryFlags flags, size_t numCurves, size_t numVertices, size_t numTimeSteps) {
  192. return rtcNewHairGeometry(scene,flags,numCurves,numVertices,numTimeSteps);
  193. }
  194. extern "C" unsigned ispcNewCurveGeometry (RTCScene scene, RTCGeometryFlags flags, size_t numCurves, size_t numVertices, size_t numTimeSteps) {
  195. return rtcNewCurveGeometry(scene,flags,numCurves,numVertices,numTimeSteps);
  196. }
  197. extern "C" unsigned ispcNewSubdivisionMesh (RTCScene scene, RTCGeometryFlags flags, size_t numFaces, size_t numEdges,
  198. size_t numVertices, size_t numEdgeCreases, size_t numVertexCreases, size_t numHoles, size_t numTimeSteps)
  199. {
  200. return rtcNewSubdivisionMesh(scene,flags,numFaces,numEdges,numVertices,numEdgeCreases,numVertexCreases,numHoles,numTimeSteps);
  201. }
  202. extern "C" void ispcSetRayMask (RTCScene scene, unsigned geomID, int mask) {
  203. rtcSetMask(scene,geomID,mask);
  204. }
  205. extern "C" void ispcSetBoundaryMode (RTCScene scene, unsigned geomID, RTCBoundaryMode mode) {
  206. rtcSetBoundaryMode(scene,geomID,mode);
  207. }
  208. extern "C" void ispcSetSubdivisionMode (RTCScene scene, unsigned geomID, unsigned topologyID, RTCSubdivisionMode mode) {
  209. rtcSetSubdivisionMode(scene,geomID,topologyID,mode);
  210. }
  211. extern "C" void ispcSetIndexBuffer(RTCScene scene, unsigned geomID, RTCBufferType vertexBuffer, RTCBufferType indexBuffer) {
  212. rtcSetIndexBuffer(scene,geomID,vertexBuffer,indexBuffer);
  213. }
  214. extern "C" void* ispcMapBuffer(RTCScene scene, unsigned geomID, RTCBufferType type) {
  215. return rtcMapBuffer(scene,geomID,type);
  216. }
  217. extern "C" void ispcUnmapBuffer(RTCScene scene, unsigned geomID, RTCBufferType type) {
  218. rtcUnmapBuffer(scene,geomID,type);
  219. }
  220. extern "C" void ispcSetBuffer(RTCScene scene, unsigned geomID, RTCBufferType type, const void* ptr, size_t offset, size_t stride, size_t size) {
  221. rtcSetBuffer2(scene,geomID,type,ptr,offset,stride,size);
  222. }
  223. extern "C" void ispcEnable (RTCScene scene, unsigned geomID) {
  224. rtcEnable(scene,geomID);
  225. }
  226. extern "C" void ispcUpdate (RTCScene scene, unsigned geomID) {
  227. rtcUpdate(scene,geomID);
  228. }
  229. extern "C" void ispcUpdateBuffer (RTCScene scene, unsigned geomID, RTCBufferType type) {
  230. rtcUpdateBuffer(scene,geomID,type);
  231. }
  232. extern "C" void ispcDisable (RTCScene scene, unsigned geomID) {
  233. rtcDisable(scene,geomID);
  234. }
  235. extern "C" void ispcDeleteGeometry (RTCScene scene, unsigned geomID) {
  236. rtcDeleteGeometry(scene,geomID);
  237. }
  238. extern "C" void ispcSetTessellationRate (RTCScene hscene, unsigned geomID, float tessellationRate) {
  239. rtcSetTessellationRate(hscene,geomID,tessellationRate);
  240. }
  241. extern "C" void ispcSetUserData (RTCScene hscene, unsigned geomID, void* ptr)
  242. {
  243. Scene* scene = (Scene*) hscene;
  244. RTCORE_CATCH_BEGIN;
  245. RTCORE_TRACE(rtcSetUserData);
  246. RTCORE_VERIFY_HANDLE(scene);
  247. RTCORE_VERIFY_GEOMID(geomID);
  248. scene->get_locked(geomID)->setUserData(ptr);
  249. RTCORE_CATCH_END(scene->device);
  250. }
  251. extern "C" void* ispcGetUserData (RTCScene hscene, unsigned geomID)
  252. {
  253. Scene* scene = (Scene*) hscene;
  254. RTCORE_CATCH_BEGIN;
  255. RTCORE_TRACE(rtcSetUserData);
  256. RTCORE_VERIFY_HANDLE(scene);
  257. RTCORE_VERIFY_GEOMID(geomID);
  258. return scene->get(geomID)->getUserData(); // this call is on purpose not thread safe
  259. RTCORE_CATCH_END(scene->device);
  260. return nullptr;
  261. }
  262. extern "C" void ispcSetBoundsFunction (RTCScene scene, unsigned geomID, RTCBoundsFunc bounds) {
  263. rtcSetBoundsFunction(scene,geomID,bounds);
  264. }
  265. extern "C" void ispcSetBoundsFunction2 (RTCScene scene, unsigned geomID, RTCBoundsFunc2 bounds, void* userPtr) {
  266. rtcSetBoundsFunction2(scene,geomID,bounds,userPtr);
  267. }
  268. extern "C" void ispcSetBoundsFunction3 (RTCScene scene, unsigned geomID, RTCBoundsFunc3 bounds, void* userPtr) {
  269. rtcSetBoundsFunction3(scene,geomID,bounds,userPtr);
  270. }
  271. extern "C" void ispcSetIntersectFunction1 (RTCScene hscene, unsigned geomID, RTCIntersectFunc intersect)
  272. {
  273. Scene* scene = (Scene*) hscene;
  274. RTCORE_CATCH_BEGIN;
  275. RTCORE_TRACE(rtcSetIntersectFunction1);
  276. RTCORE_VERIFY_HANDLE(scene);
  277. RTCORE_VERIFY_GEOMID(geomID);
  278. scene->get_locked(geomID)->setIntersectFunction(intersect,true);
  279. RTCORE_CATCH_END(scene->device);
  280. }
  281. extern "C" void ispcSetIntersectFunction4 (RTCScene hscene, unsigned geomID, RTCIntersectFunc4 intersect)
  282. {
  283. Scene* scene = (Scene*) hscene;
  284. RTCORE_CATCH_BEGIN;
  285. RTCORE_TRACE(rtcSetIntersectFunction4);
  286. RTCORE_VERIFY_HANDLE(scene);
  287. RTCORE_VERIFY_GEOMID(geomID);
  288. scene->get_locked(geomID)->setIntersectFunction4(intersect,true);
  289. RTCORE_CATCH_END(scene->device);
  290. }
  291. extern "C" void ispcSetIntersectFunction8 (RTCScene hscene, unsigned geomID, RTCIntersectFunc8 intersect)
  292. {
  293. Scene* scene = (Scene*) hscene;
  294. RTCORE_CATCH_BEGIN;
  295. RTCORE_TRACE(rtcSetIntersectFunction8);
  296. RTCORE_VERIFY_HANDLE(scene);
  297. RTCORE_VERIFY_GEOMID(geomID);
  298. scene->get_locked(geomID)->setIntersectFunction8(intersect,true);
  299. RTCORE_CATCH_END(scene->device);
  300. }
  301. extern "C" void ispcSetIntersectFunction16 (RTCScene hscene, unsigned geomID, RTCIntersectFunc16 intersect)
  302. {
  303. Scene* scene = (Scene*) hscene;
  304. RTCORE_CATCH_BEGIN;
  305. RTCORE_TRACE(rtcSetIntersectFunction16);
  306. RTCORE_VERIFY_HANDLE(scene);
  307. RTCORE_VERIFY_GEOMID(geomID);
  308. ((Scene*)scene)->get_locked(geomID)->setIntersectFunction16(intersect,true);
  309. RTCORE_CATCH_END(scene->device);
  310. }
  311. extern "C" void ispcSetIntersectFunction1Mp (RTCScene hscene, unsigned geomID, RTCIntersectFunc1Mp intersect)
  312. {
  313. Scene* scene = (Scene*) hscene;
  314. RTCORE_CATCH_BEGIN;
  315. RTCORE_TRACE(rtcSetIntersectFunction1Mp);
  316. RTCORE_VERIFY_HANDLE(scene);
  317. RTCORE_VERIFY_GEOMID(geomID);
  318. scene->get_locked(geomID)->setIntersectFunction1Mp(intersect);
  319. RTCORE_CATCH_END(scene->device);
  320. }
  321. extern "C" void ispcSetIntersectFunctionN (RTCScene hscene, unsigned geomID, RTCIntersectFuncN intersect)
  322. {
  323. Scene* scene = (Scene*) hscene;
  324. RTCORE_CATCH_BEGIN;
  325. RTCORE_TRACE(rtcSetIntersectFunctionN);
  326. RTCORE_VERIFY_HANDLE(scene);
  327. RTCORE_VERIFY_GEOMID(geomID);
  328. ((Scene*)scene)->get_locked(geomID)->setIntersectFunctionN(intersect);
  329. RTCORE_CATCH_END(scene->device);
  330. }
  331. extern "C" void ispcSetOccludedFunction1 (RTCScene hscene, unsigned geomID, RTCOccludedFunc occluded)
  332. {
  333. Scene* scene = (Scene*) hscene;
  334. RTCORE_CATCH_BEGIN;
  335. RTCORE_TRACE(rtcSetOccludedFunction1);
  336. RTCORE_VERIFY_HANDLE(scene);
  337. RTCORE_VERIFY_GEOMID(geomID);
  338. ((Scene*)scene)->get_locked(geomID)->setOccludedFunction(occluded,true);
  339. RTCORE_CATCH_END(scene->device);
  340. }
  341. extern "C" void ispcSetOccludedFunction4 (RTCScene hscene, unsigned geomID, RTCOccludedFunc4 occluded)
  342. {
  343. Scene* scene = (Scene*) hscene;
  344. RTCORE_CATCH_BEGIN;
  345. RTCORE_TRACE(rtcSetOccludedFunction4);
  346. RTCORE_VERIFY_HANDLE(scene);
  347. RTCORE_VERIFY_GEOMID(geomID);
  348. ((Scene*)scene)->get_locked(geomID)->setOccludedFunction4(occluded,true);
  349. RTCORE_CATCH_END(scene->device);
  350. }
  351. extern "C" void ispcSetOccludedFunction8 (RTCScene hscene, unsigned geomID, RTCOccludedFunc8 occluded)
  352. {
  353. Scene* scene = (Scene*) hscene;
  354. RTCORE_CATCH_BEGIN;
  355. RTCORE_TRACE(rtcSetOccludedFunction8);
  356. RTCORE_VERIFY_HANDLE(scene);
  357. RTCORE_VERIFY_GEOMID(geomID);
  358. ((Scene*)scene)->get_locked(geomID)->setOccludedFunction8(occluded,true);
  359. RTCORE_CATCH_END(scene->device);
  360. }
  361. extern "C" void ispcSetOccludedFunction16 (RTCScene hscene, unsigned geomID, RTCOccludedFunc16 occluded)
  362. {
  363. Scene* scene = (Scene*) hscene;
  364. RTCORE_CATCH_BEGIN;
  365. RTCORE_TRACE(rtcSetOccludedFunction16);
  366. RTCORE_VERIFY_HANDLE(scene);
  367. RTCORE_VERIFY_GEOMID(geomID);
  368. ((Scene*)scene)->get_locked(geomID)->setOccludedFunction16(occluded,true);
  369. RTCORE_CATCH_END(scene->device);
  370. }
  371. extern "C" void ispcSetOccludedFunction1Mp (RTCScene hscene, unsigned geomID, RTCOccludedFunc1Mp occluded)
  372. {
  373. Scene* scene = (Scene*) hscene;
  374. RTCORE_CATCH_BEGIN;
  375. RTCORE_TRACE(rtcSetOccludedFunction1Mp);
  376. RTCORE_VERIFY_HANDLE(scene);
  377. RTCORE_VERIFY_GEOMID(geomID);
  378. ((Scene*)scene)->get_locked(geomID)->setOccludedFunction1Mp(occluded);
  379. RTCORE_CATCH_END(scene->device);
  380. }
  381. extern "C" void ispcSetOccludedFunctionN (RTCScene hscene, unsigned geomID, RTCOccludedFuncN occluded)
  382. {
  383. Scene* scene = (Scene*) hscene;
  384. RTCORE_CATCH_BEGIN;
  385. RTCORE_TRACE(rtcSetOccludedFunctionN);
  386. RTCORE_VERIFY_HANDLE(scene);
  387. RTCORE_VERIFY_GEOMID(geomID);
  388. ((Scene*)scene)->get_locked(geomID)->setOccludedFunctionN(occluded);
  389. RTCORE_CATCH_END(scene->device);
  390. }
  391. extern "C" void ispcSetIntersectionFilterFunction1 (RTCScene hscene, unsigned geomID, RTCFilterFunc filter)
  392. {
  393. Scene* scene = (Scene*) hscene;
  394. RTCORE_CATCH_BEGIN;
  395. RTCORE_TRACE(rtcSetIntersectionFilterFunction1);
  396. RTCORE_VERIFY_HANDLE(scene);
  397. RTCORE_VERIFY_GEOMID(geomID);
  398. ((Scene*)scene)->get_locked(geomID)->setIntersectionFilterFunction(filter,true);
  399. RTCORE_CATCH_END(scene->device);
  400. }
  401. extern "C" void ispcSetIntersectionFilterFunction4 (RTCScene hscene, unsigned geomID, RTCFilterFunc4 filter)
  402. {
  403. Scene* scene = (Scene*) hscene;
  404. RTCORE_CATCH_BEGIN;
  405. RTCORE_TRACE(rtcSetIntersectionFilterFunction4);
  406. RTCORE_VERIFY_HANDLE(scene);
  407. RTCORE_VERIFY_GEOMID(geomID);
  408. ((Scene*)scene)->get_locked(geomID)->setIntersectionFilterFunction4(filter,true);
  409. RTCORE_CATCH_END(scene->device);
  410. }
  411. extern "C" void ispcSetIntersectionFilterFunction8 (RTCScene hscene, unsigned geomID, RTCFilterFunc8 filter)
  412. {
  413. Scene* scene = (Scene*) hscene;
  414. RTCORE_CATCH_BEGIN;
  415. RTCORE_TRACE(rtcSetIntersectionFilterFunction8);
  416. RTCORE_VERIFY_HANDLE(scene);
  417. RTCORE_VERIFY_GEOMID(geomID);
  418. ((Scene*)scene)->get_locked(geomID)->setIntersectionFilterFunction8(filter,true);
  419. RTCORE_CATCH_END(scene->device);
  420. }
  421. extern "C" void ispcSetIntersectionFilterFunction16 (RTCScene hscene, unsigned geomID, RTCFilterFunc16 filter)
  422. {
  423. Scene* scene = (Scene*) hscene;
  424. RTCORE_CATCH_BEGIN;
  425. RTCORE_TRACE(rtcSetIntersectionFilterFunction16);
  426. RTCORE_VERIFY_HANDLE(scene);
  427. RTCORE_VERIFY_GEOMID(geomID);
  428. ((Scene*)scene)->get_locked(geomID)->setIntersectionFilterFunction16(filter,true);
  429. RTCORE_CATCH_END(scene->device);
  430. }
  431. extern "C" void ispcSetIntersectionFilterFunctionN (RTCScene hscene, unsigned geomID, RTCFilterFuncN filter)
  432. {
  433. Scene* scene = (Scene*) hscene;
  434. RTCORE_CATCH_BEGIN;
  435. RTCORE_TRACE(rtcSetIntersectionFilterFunctionN);
  436. RTCORE_VERIFY_HANDLE(scene);
  437. RTCORE_VERIFY_GEOMID(geomID);
  438. ((Scene*)scene)->get_locked(geomID)->setIntersectionFilterFunctionN(filter);
  439. RTCORE_CATCH_END(scene->device);
  440. }
  441. extern "C" void ispcSetOcclusionFilterFunction1 (RTCScene hscene, unsigned geomID, RTCFilterFunc filter)
  442. {
  443. Scene* scene = (Scene*) hscene;
  444. RTCORE_CATCH_BEGIN;
  445. RTCORE_TRACE(rtcSetOcclusionFilterFunction1);
  446. RTCORE_VERIFY_HANDLE(scene);
  447. RTCORE_VERIFY_GEOMID(geomID);
  448. ((Scene*)scene)->get_locked(geomID)->setOcclusionFilterFunction(filter,true);
  449. RTCORE_CATCH_END(scene->device);
  450. }
  451. extern "C" void ispcSetOcclusionFilterFunction4 (RTCScene hscene, unsigned geomID, RTCFilterFunc4 filter)
  452. {
  453. Scene* scene = (Scene*) hscene;
  454. RTCORE_CATCH_BEGIN;
  455. RTCORE_TRACE(rtcSetOcclusionFilterFunction4);
  456. RTCORE_VERIFY_HANDLE(scene);
  457. RTCORE_VERIFY_GEOMID(geomID);
  458. ((Scene*)scene)->get_locked(geomID)->setOcclusionFilterFunction4(filter,true);
  459. RTCORE_CATCH_END(scene->device);
  460. }
  461. extern "C" void ispcSetOcclusionFilterFunction8 (RTCScene hscene, unsigned geomID, RTCFilterFunc8 filter)
  462. {
  463. Scene* scene = (Scene*) hscene;
  464. RTCORE_CATCH_BEGIN;
  465. RTCORE_TRACE(rtcSetOcclusionFilterFunction8);
  466. RTCORE_VERIFY_HANDLE(scene);
  467. RTCORE_VERIFY_GEOMID(geomID);
  468. ((Scene*)scene)->get_locked(geomID)->setOcclusionFilterFunction8(filter,true);
  469. RTCORE_CATCH_END(scene->device);
  470. }
  471. extern "C" void ispcSetOcclusionFilterFunction16 (RTCScene hscene, unsigned geomID, RTCFilterFunc16 filter)
  472. {
  473. Scene* scene = (Scene*) hscene;
  474. RTCORE_CATCH_BEGIN;
  475. RTCORE_TRACE(rtcSetOcclusionFilterFunction16);
  476. RTCORE_VERIFY_HANDLE(scene);
  477. RTCORE_VERIFY_GEOMID(geomID);
  478. ((Scene*)scene)->get_locked(geomID)->setOcclusionFilterFunction16(filter,true);
  479. RTCORE_CATCH_END(scene->device);
  480. }
  481. extern "C" void ispcSetOcclusionFilterFunctionN (RTCScene hscene, unsigned geomID, RTCFilterFuncN filter)
  482. {
  483. Scene* scene = (Scene*) hscene;
  484. RTCORE_CATCH_BEGIN;
  485. RTCORE_TRACE(rtcSetOcclusionFilterFunctionN);
  486. RTCORE_VERIFY_HANDLE(scene);
  487. RTCORE_VERIFY_GEOMID(geomID);
  488. ((Scene*)scene)->get_locked(geomID)->setOcclusionFilterFunctionN(filter);
  489. RTCORE_CATCH_END(scene->device);
  490. }
  491. extern "C" void ispcSetDisplacementFunction (RTCScene hscene, unsigned int geomID, void* func, RTCBounds* bounds)
  492. {
  493. Scene* scene = (Scene*) hscene;
  494. RTCORE_CATCH_BEGIN;
  495. RTCORE_TRACE(rtcSetDisplacementFunction);
  496. RTCORE_VERIFY_HANDLE(scene);
  497. RTCORE_VERIFY_GEOMID(geomID);
  498. ((Scene*)scene)->get_locked(geomID)->setDisplacementFunction((RTCDisplacementFunc)func,bounds);
  499. RTCORE_CATCH_END(scene->device);
  500. }
  501. extern "C" void ispcSetDisplacementFunction2 (RTCScene hscene, unsigned int geomID, void* func, RTCBounds* bounds)
  502. {
  503. Scene* scene = (Scene*) hscene;
  504. RTCORE_CATCH_BEGIN;
  505. RTCORE_TRACE(rtcSetDisplacementFunction2);
  506. RTCORE_VERIFY_HANDLE(scene);
  507. RTCORE_VERIFY_GEOMID(geomID);
  508. ((Scene*)scene)->get_locked(geomID)->setDisplacementFunction2((RTCDisplacementFunc2)func,bounds);
  509. RTCORE_CATCH_END(scene->device);
  510. }
  511. extern "C" void ispcInterpolateN(RTCScene scene, unsigned int geomID,
  512. const void* valid, const unsigned int* primIDs, const float* u, const float* v, size_t numUVs,
  513. RTCBufferType buffer,
  514. float* P, float* dPdu, float* dPdv, size_t numFloats)
  515. {
  516. rtcInterpolateN(scene,geomID,valid,primIDs,u,v,numUVs,buffer,P,dPdu,dPdv,numFloats);
  517. }
  518. extern "C" void ispcInterpolateN2(RTCScene scene, unsigned int geomID,
  519. const void* valid, const unsigned int* primIDs, const float* u, const float* v, size_t numUVs,
  520. RTCBufferType buffer,
  521. float* P, float* dPdu, float* dPdv,
  522. float* ddPdudu, float* ddPdvdv, float* ddPdudv,
  523. size_t numFloats)
  524. {
  525. rtcInterpolateN2(scene,geomID,valid,primIDs,u,v,numUVs,buffer,P,dPdu,dPdv,ddPdudu,ddPdvdv,ddPdudv,numFloats);
  526. }
  527. }