diff --git a/openVulkanoCpp/AR/ArSession.hpp b/openVulkanoCpp/AR/ArSession.hpp index 2973f16..fbef492 100644 --- a/openVulkanoCpp/AR/ArSession.hpp +++ b/openVulkanoCpp/AR/ArSession.hpp @@ -157,6 +157,10 @@ namespace OpenVulkano::AR static bool IsNativeArAvailable(); virtual ~ArSession() = default; + + virtual void Configure(const ArSessionConfig& config) {} + + virtual void Restart() { Stop(); Start(); } /** * Starts the AR session. diff --git a/openVulkanoCpp/AR/Provider/ArKit/ArSessionArKitInternal.h b/openVulkanoCpp/AR/Provider/ArKit/ArSessionArKitInternal.h index 0cacfbe..5be3bdb 100644 --- a/openVulkanoCpp/AR/Provider/ArKit/ArSessionArKitInternal.h +++ b/openVulkanoCpp/AR/Provider/ArKit/ArSessionArKitInternal.h @@ -25,6 +25,10 @@ namespace OpenVulkano::AR::ArKit ArSessionArKitInternal(const ArSessionConfig& config); ~ArSessionArKitInternal() override; + + void Configure(const ArSessionConfig& config) override; + + void Restart() override; void Start() override; diff --git a/openVulkanoCpp/AR/Provider/ArKit/ArSessionArKitInternal.mm b/openVulkanoCpp/AR/Provider/ArKit/ArSessionArKitInternal.mm index 972e958..bc19a56 100644 --- a/openVulkanoCpp/AR/Provider/ArKit/ArSessionArKitInternal.mm +++ b/openVulkanoCpp/AR/Provider/ArKit/ArSessionArKitInternal.mm @@ -79,6 +79,26 @@ namespace OpenVulkano::AR::ArKit : m_frameId(0) { m_arKitDelegate = [[ArKitDelegate alloc] initWithFrameHandler:this]; + + Configure(config); + + m_arSession = [ARSession new]; + m_arSession.delegate = m_arKitDelegate; + + running = false; + } + + ArSessionArKitInternal::~ArSessionArKitInternal() + { + Stop(); + [m_arSession release]; + [m_arConfig release]; + [m_arKitDelegate release]; + Logger::AR->info("Released AR session"); + } + + void ArSessionArKitInternal::Configure(const ArSessionConfig& config) + { if (config.useFrontCamera) { #ifdef OPENVULKANO_ENABLE_ARKIT_TRUEDEPTH @@ -104,7 +124,7 @@ namespace OpenVulkano::AR::ArKit arConfig.autoFocusEnabled = config.autoFocus; m_arConfig = arConfig; } - + // Set video format { Logger::AR->debug("Supported Video Formats: {}", SupportedVideoFormatsToString(config.useFrontCamera)); @@ -119,20 +139,6 @@ namespace OpenVulkano::AR::ArKit metadata.imageResolution = { m_arConfig.videoFormat.imageResolution.width, m_arConfig.videoFormat.imageResolution.height }; metadata.frameRate = m_arConfig.videoFormat.framesPerSecond; } - - m_arSession = [ARSession new]; - m_arSession.delegate = m_arKitDelegate; - - running = false; - } - - ArSessionArKitInternal::~ArSessionArKitInternal() - { - Stop(); - [m_arSession release]; - [m_arConfig release]; - [m_arKitDelegate release]; - Logger::AR->info("Released AR session"); } void ArSessionArKitInternal::SetRenderer(IRenderer* renderer) @@ -179,6 +185,12 @@ namespace OpenVulkano::AR::ArKit //#endif running = false; } + + void ArSessionArKitInternal::Restart() + { + [m_arSession pause]; + [m_arSession runWithConfiguration:m_arConfig]; + } void ArSessionArKitInternal::Pause() {