76 lines
1.7 KiB
C
76 lines
1.7 KiB
C
|
// SPDX-License-Identifier: LGPL-2.1-only
|
||
|
// Copyright (C) 2021 James Hogan <james@albanarts.com>
|
||
|
|
||
|
#ifndef OSGXR_SUBACTION
|
||
|
#define OSGXR_SUBACTION 1
|
||
|
|
||
|
#include <osgXR/Subaction>
|
||
|
|
||
|
#include "OpenXR/Path.h"
|
||
|
|
||
|
#include <set>
|
||
|
#include <string>
|
||
|
|
||
|
namespace osgXR {
|
||
|
|
||
|
class XRState;
|
||
|
|
||
|
namespace OpenXR {
|
||
|
class Instance;
|
||
|
};
|
||
|
|
||
|
class Subaction::Private
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
static std::shared_ptr<Private> get(Subaction *pub)
|
||
|
{
|
||
|
if (pub)
|
||
|
return pub->_private;
|
||
|
else
|
||
|
return nullptr;
|
||
|
}
|
||
|
|
||
|
Private(XRState *state, const std::string &path);
|
||
|
|
||
|
// Public object registration
|
||
|
void registerPublic(Subaction *subaction);
|
||
|
void unregisterPublic(Subaction *subaction);
|
||
|
|
||
|
// Accessors
|
||
|
|
||
|
/// Get the subaction's path as a string.
|
||
|
const std::string &getPathString() const
|
||
|
{
|
||
|
return _pathString;
|
||
|
}
|
||
|
|
||
|
/// Find the current interaction profile.
|
||
|
InteractionProfile *getCurrentProfile();
|
||
|
|
||
|
// Events
|
||
|
|
||
|
/// Notify that an interaction profile has changed.
|
||
|
void onInteractionProfileChanged(OpenXR::Session *session);
|
||
|
|
||
|
/// Setup path with an OpenXR instance.
|
||
|
const OpenXR::Path &setup(OpenXR::Instance *instance);
|
||
|
/// Clean up current profile before an OpenXR session is destroyed.
|
||
|
void cleanupSession();
|
||
|
/// Clean up path before an OpenXR instance is destroyed.
|
||
|
void cleanupInstance();
|
||
|
|
||
|
private:
|
||
|
|
||
|
XRState *_state;
|
||
|
std::string _pathString;
|
||
|
std::set<Subaction *> _publics;
|
||
|
|
||
|
OpenXR::Path _path;
|
||
|
osg::ref_ptr<InteractionProfile> _currentProfile;
|
||
|
};
|
||
|
|
||
|
} // osgXR
|
||
|
|
||
|
#endif
|