// -*-c++-*- // SPDX-License-Identifier: LGPL-2.1-only // Copyright (C) 2021 James Hogan #ifndef OSGXR_InteractionProfile #define OSGXR_InteractionProfile 1 #include #include #include #include namespace osgXR { class Action; class Manager; /** * Represents a group of suggested bindings for a specific interaction profile. * This class allow the application to suggest bindings for actions to specific * input paths for a given interaction profile. If the OpenXR runtime recognises * the profile it may use the suggested bindings to bind actions to whichever * input devices the user may have, even without a specific binding to that * device. */ class OSGXR_EXPORT InteractionProfile : public osg::Referenced { public: /** * Construct an interaction profile. * The OpenXR interaction profile path is constructed as * "/interaction_profiles/@p vendor /@p type ". * @param manager The VR manager object to add the action set to. * @param vendor Vendor segment of OpenXR interaction profile path. * @param type Type segment of OpenXR interaction profile path. */ InteractionProfile(Manager *manager, const std::string &vendor, const std::string &type); /// Destructor ~InteractionProfile(); // Accessors /// Get the vendor segment of the OpenXR interaction profile path. const std::string &getVendor() const; /// Get the type segment of the OpenXR interaction profile path. const std::string &getType() const; /** * Suggest a binding for an action. * @param action The action to bind. * @param binding The OpenXR path to bind the action to. */ void suggestBinding(Action *action, const std::string &binding); class Private; private: std::unique_ptr _private; // Copying not permitted InteractionProfile(const InteractionProfile ©); }; } #endif