// // Overte OpenXR Plugin // // Copyright 2024 Lubosz Sarnecki // Copyright 2024 Overte e.V. // // SPDX-License-Identifier: Apache-2.0 // #include "plugins/RuntimePlugin.h" #include "OpenXrDisplayPlugin.h" #include "OpenXrInputPlugin.h" class OpenXrProvider : public QObject, public DisplayProvider, InputProvider { Q_OBJECT Q_PLUGIN_METADATA(IID DisplayProvider_iid FILE "plugin.json") Q_INTERFACES(DisplayProvider) Q_PLUGIN_METADATA(IID InputProvider_iid FILE "plugin.json") Q_INTERFACES(InputProvider) public: OpenXrProvider(QObject* parent = nullptr) : QObject(parent) {} virtual ~OpenXrProvider() {} std::shared_ptr context = std::make_shared(); virtual DisplayPluginList getDisplayPlugins() override { static std::once_flag once; std::call_once(once, [&] { DisplayPluginPointer plugin(std::make_shared(context)); if (plugin->isSupported()) { _displayPlugins.push_back(plugin); } }); return _displayPlugins; } virtual InputPluginList getInputPlugins() override { static std::once_flag once; std::call_once(once, [&] { InputPluginPointer plugin(std::make_shared(context)); if (plugin->isSupported()) { _inputPlugins.push_back(plugin); } }); return _inputPlugins; } virtual void destroyInputPlugins() override { _inputPlugins.clear(); } virtual void destroyDisplayPlugins() override { _displayPlugins.clear(); } private: DisplayPluginList _displayPlugins; InputPluginList _inputPlugins; }; #include "OpenXrProvider.moc"