| 42 | // -------------------------------------------------------------------------------------------------------------------- |
| 43 | |
| 44 | CScene::CScene(CContext* context, |
| 45 | IPLSceneSettings* settings) |
| 46 | { |
| 47 | auto _context = context->mHandle.get(); |
| 48 | if (!_context) |
| 49 | throw Exception(Status::Failure); |
| 50 | |
| 51 | SceneType _sceneType = static_cast<SceneType>(settings->type); |
| 52 | auto _closestHitCallback = reinterpret_cast<ClosestHitCallback>(settings->closestHitCallback); |
| 53 | auto _anyHitCallback = reinterpret_cast<AnyHitCallback>(settings->anyHitCallback); |
| 54 | auto _batchedClosestHitCallback = reinterpret_cast<BatchedClosestHitCallback>(settings->batchedClosestHitCallback); |
| 55 | auto _batchedAnyHitCallback = reinterpret_cast<BatchedAnyHitCallback>(settings->batchedAnyHitCallback); |
| 56 | auto _embree = (settings->type == IPL_SCENETYPE_EMBREE && settings->embreeDevice) ? reinterpret_cast<CEmbreeDevice*>(settings->embreeDevice)->mHandle.get() : nullptr; |
| 57 | auto _radeonRays = (settings->type == IPL_SCENETYPE_RADEONRAYS && settings->radeonRaysDevice) ? reinterpret_cast<CRadeonRaysDevice*>(settings->radeonRaysDevice)->mHandle.get() : nullptr; |
| 58 | |
| 59 | new (&mHandle) Handle<ipl::IScene>(shared_ptr<ipl::IScene>(SceneFactory::create(_sceneType, _closestHitCallback, _anyHitCallback, _batchedClosestHitCallback, _batchedAnyHitCallback, settings->userData, _embree, _radeonRays)), _context); |
| 60 | } |
| 61 | |
| 62 | CScene::CScene(CContext* context, |
| 63 | IPLSceneSettings* settings, |