Add interfaces for getting textures from ar frames
This commit is contained in:
@@ -22,4 +22,20 @@ namespace OpenVulkano::AR
|
|||||||
else
|
else
|
||||||
m_session->GetRecorder().Save(shared_from_this());
|
m_session->GetRecorder().Save(shared_from_this());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ArFrame::SaveToFile(const std::filesystem::path& path, bool downsample)
|
||||||
|
{
|
||||||
|
m_session->GetRecorder().SaveToFile(shared_from_this(), path, downsample);
|
||||||
|
}
|
||||||
|
|
||||||
|
const Scene::Texture* ArFrame::GetImageTexture()
|
||||||
|
{
|
||||||
|
if (!m_texture) m_texture = m_session->MakeTexture(this);
|
||||||
|
return m_texture;
|
||||||
|
}
|
||||||
|
|
||||||
|
ArFrame::~ArFrame()
|
||||||
|
{
|
||||||
|
if (m_texture) m_session->ReturnTexture(m_texture);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -13,8 +13,14 @@
|
|||||||
#include "ArDepthFormat.hpp"
|
#include "ArDepthFormat.hpp"
|
||||||
#include "ArTrackingState.hpp"
|
#include "ArTrackingState.hpp"
|
||||||
#include "ArFrameMetadata.hpp"
|
#include "ArFrameMetadata.hpp"
|
||||||
#include <memory>
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
#include <filesystem>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
namespace OpenVulkano::Scene
|
||||||
|
{
|
||||||
|
class Texture;
|
||||||
|
}
|
||||||
|
|
||||||
namespace OpenVulkano::AR
|
namespace OpenVulkano::AR
|
||||||
{
|
{
|
||||||
@@ -89,6 +95,7 @@ namespace OpenVulkano::AR
|
|||||||
{
|
{
|
||||||
std::shared_ptr<ArSession> m_session;
|
std::shared_ptr<ArSession> m_session;
|
||||||
size_t m_frameId;
|
size_t m_frameId;
|
||||||
|
Scene::Texture* m_texture = nullptr;
|
||||||
bool m_saved = false;
|
bool m_saved = false;
|
||||||
bool m_highRes = false;
|
bool m_highRes = false;
|
||||||
|
|
||||||
@@ -99,7 +106,7 @@ namespace OpenVulkano::AR
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual ~ArFrame() = default;
|
virtual ~ArFrame();
|
||||||
|
|
||||||
[[nodiscard]] size_t GetFrameId() const { return m_frameId; }
|
[[nodiscard]] size_t GetFrameId() const { return m_frameId; }
|
||||||
|
|
||||||
@@ -139,8 +146,12 @@ namespace OpenVulkano::AR
|
|||||||
|
|
||||||
[[nodiscard]] bool IsSaved() const { return m_saved; };
|
[[nodiscard]] bool IsSaved() const { return m_saved; };
|
||||||
|
|
||||||
|
[[nodiscard]] const Scene::Texture* GetImageTexture();
|
||||||
|
|
||||||
void Save();
|
void Save();
|
||||||
|
|
||||||
|
void SaveToFile(const std::filesystem::path& path, bool downsample = false);
|
||||||
|
|
||||||
void SetSaved() { m_saved = true; }
|
void SetSaved() { m_saved = true; }
|
||||||
|
|
||||||
void MarkHighRes() { m_highRes = true; }
|
void MarkHighRes() { m_highRes = true; }
|
||||||
|
|||||||
@@ -19,6 +19,11 @@
|
|||||||
#include <optional>
|
#include <optional>
|
||||||
#include <future>
|
#include <future>
|
||||||
|
|
||||||
|
namespace OpenVulkano::Scene
|
||||||
|
{
|
||||||
|
class Texture;
|
||||||
|
}
|
||||||
|
|
||||||
namespace OpenVulkano::AR
|
namespace OpenVulkano::AR
|
||||||
{
|
{
|
||||||
class ArSession;
|
class ArSession;
|
||||||
@@ -75,9 +80,15 @@ namespace OpenVulkano::AR
|
|||||||
|
|
||||||
class ArSession
|
class ArSession
|
||||||
{
|
{
|
||||||
|
friend ArFrame;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
ArSession(const ArSessionMetadata& metadata) : metadata(metadata), recorder(metadata.playback ? nullptr : this) {}
|
ArSession(const ArSessionMetadata& metadata) : metadata(metadata), recorder(metadata.playback ? nullptr : this) {}
|
||||||
|
|
||||||
|
virtual Scene::Texture* MakeTexture(ArFrame* frame) = 0;
|
||||||
|
|
||||||
|
virtual void ReturnTexture(Scene::Texture* texture) = 0;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* Creates a platform native AR session. nullptr if failed to create session.
|
* Creates a platform native AR session. nullptr if failed to create session.
|
||||||
|
|||||||
@@ -47,6 +47,11 @@ namespace OpenVulkano::AR::ArKit
|
|||||||
void OnArAnchorsUpdate(NSArray<__kindof ARAnchor*>* anchors);
|
void OnArAnchorsUpdate(NSArray<__kindof ARAnchor*>* anchors);
|
||||||
bool ArShouldAttemptRelocalization();
|
bool ArShouldAttemptRelocalization();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
Scene::Texture * MakeTexture(OpenVulkano::AR::ArFrame *frame) override;
|
||||||
|
|
||||||
|
void ReturnTexture(Scene::Texture *texture) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ArKitDelegate* m_arKitDelegate;
|
ArKitDelegate* m_arKitDelegate;
|
||||||
ARWorldTrackingConfiguration* m_arConfig;
|
ARWorldTrackingConfiguration* m_arConfig;
|
||||||
|
|||||||
@@ -12,6 +12,11 @@ namespace OpenVulkano::AR::Network
|
|||||||
{
|
{
|
||||||
class ArSessionStream final : public ArSession
|
class ArSessionStream final : public ArSession
|
||||||
{
|
{
|
||||||
|
protected:
|
||||||
|
Scene::Texture * MakeTexture(OpenVulkano::AR::ArFrame *frame) override { return nullptr; } //TODO
|
||||||
|
|
||||||
|
void ReturnTexture(Scene::Texture *texture) override {} // TODO
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ArSessionStream(const std::string& serverAddress, std::optional<ArSessionConfig> requestConfig = std::nullopt);
|
ArSessionStream(const std::string& serverAddress, std::optional<ArSessionConfig> requestConfig = std::nullopt);
|
||||||
|
|
||||||
|
|||||||
@@ -88,4 +88,14 @@ namespace OpenVulkano::AR::Playback
|
|||||||
Stop();
|
Stop();
|
||||||
OnSessionInterruptionChange(true);
|
OnSessionInterruptionChange(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Scene::Texture* ArSessionPlayback::MakeTexture(OpenVulkano::AR::ArFrame* frame)
|
||||||
|
{
|
||||||
|
return nullptr; //TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
void ArSessionPlayback::ReturnTexture(Scene::Texture* texture)
|
||||||
|
{
|
||||||
|
//TODO
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,11 @@ class ArSessionPlayback final : public ArSession, public std::enable_shared_from
|
|||||||
|
|
||||||
[[nodiscard]] ArType GetArType() override;
|
[[nodiscard]] ArType GetArType() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
Scene::Texture * MakeTexture(OpenVulkano::AR::ArFrame *frame) override;
|
||||||
|
|
||||||
|
void ReturnTexture(Scene::Texture *texture) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void ReadWorker();
|
void ReadWorker();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user