Add interfaces for getting textures from ar frames
This commit is contained in:
@@ -22,4 +22,20 @@ namespace OpenVulkano::AR
|
||||
else
|
||||
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 "ArTrackingState.hpp"
|
||||
#include "ArFrameMetadata.hpp"
|
||||
#include <memory>
|
||||
#include <functional>
|
||||
#include <filesystem>
|
||||
#include <memory>
|
||||
|
||||
namespace OpenVulkano::Scene
|
||||
{
|
||||
class Texture;
|
||||
}
|
||||
|
||||
namespace OpenVulkano::AR
|
||||
{
|
||||
@@ -89,6 +95,7 @@ namespace OpenVulkano::AR
|
||||
{
|
||||
std::shared_ptr<ArSession> m_session;
|
||||
size_t m_frameId;
|
||||
Scene::Texture* m_texture = nullptr;
|
||||
bool m_saved = false;
|
||||
bool m_highRes = false;
|
||||
|
||||
@@ -99,7 +106,7 @@ namespace OpenVulkano::AR
|
||||
{}
|
||||
|
||||
public:
|
||||
virtual ~ArFrame() = default;
|
||||
virtual ~ArFrame();
|
||||
|
||||
[[nodiscard]] size_t GetFrameId() const { return m_frameId; }
|
||||
|
||||
@@ -139,8 +146,12 @@ namespace OpenVulkano::AR
|
||||
|
||||
[[nodiscard]] bool IsSaved() const { return m_saved; };
|
||||
|
||||
[[nodiscard]] const Scene::Texture* GetImageTexture();
|
||||
|
||||
void Save();
|
||||
|
||||
void SaveToFile(const std::filesystem::path& path, bool downsample = false);
|
||||
|
||||
void SetSaved() { m_saved = true; }
|
||||
|
||||
void MarkHighRes() { m_highRes = true; }
|
||||
|
||||
@@ -19,6 +19,11 @@
|
||||
#include <optional>
|
||||
#include <future>
|
||||
|
||||
namespace OpenVulkano::Scene
|
||||
{
|
||||
class Texture;
|
||||
}
|
||||
|
||||
namespace OpenVulkano::AR
|
||||
{
|
||||
class ArSession;
|
||||
@@ -75,9 +80,15 @@ namespace OpenVulkano::AR
|
||||
|
||||
class ArSession
|
||||
{
|
||||
friend ArFrame;
|
||||
|
||||
protected:
|
||||
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:
|
||||
/**
|
||||
* 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);
|
||||
bool ArShouldAttemptRelocalization();
|
||||
|
||||
protected:
|
||||
Scene::Texture * MakeTexture(OpenVulkano::AR::ArFrame *frame) override;
|
||||
|
||||
void ReturnTexture(Scene::Texture *texture) override;
|
||||
|
||||
private:
|
||||
ArKitDelegate* m_arKitDelegate;
|
||||
ARWorldTrackingConfiguration* m_arConfig;
|
||||
|
||||
@@ -12,6 +12,11 @@ namespace OpenVulkano::AR::Network
|
||||
{
|
||||
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:
|
||||
ArSessionStream(const std::string& serverAddress, std::optional<ArSessionConfig> requestConfig = std::nullopt);
|
||||
|
||||
|
||||
@@ -88,4 +88,14 @@ namespace OpenVulkano::AR::Playback
|
||||
Stop();
|
||||
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;
|
||||
|
||||
protected:
|
||||
Scene::Texture * MakeTexture(OpenVulkano::AR::ArFrame *frame) override;
|
||||
|
||||
void ReturnTexture(Scene::Texture *texture) override;
|
||||
|
||||
private:
|
||||
void ReadWorker();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user