#include "runtime_interface.hpp"
#include <openxr/openxr.h>
#include <openxr/openxr_loader_negotiation.h>
#include "manifest_file.hpp"
#include "loader_init_data.hpp"
#include "loader_logger.hpp"
#include "loader_platform.hpp"
#include "xr_generated_dispatch_table_core.h"
#include <cstring>
#include <memory>
#include <mutex>
#include <string>
#include <unordered_map>
#include <utility>
#include <vector>
#ifdef XR_USE_PLATFORM_ANDROID
#include <json/value.h>
#include <xr_dependencies.h>
#include <openxr/openxr_platform.h>
#endif
#if defined(XR_KHR_LOADER_INIT_SUPPORT) && defined(XR_USE_PLATFORM_ANDROID)
XrResult GetPlatformRuntimeVirtualManifest(Json::Value& out_manifest) {
using wrap::android::content::Context;
auto& initData = LoaderInitData::instance();
if (!initData.initialized()) {
return XR_ERROR_INITIALIZATION_FAILED;
}
auto context = Context(reinterpret_cast<jobject>(initData.getData().applicationContext));
if (context.isNull()) {
return XR_ERROR_INITIALIZATION_FAILED;
}
Json::Value virtualManifest;
if (0 != openxr_android::getActiveRuntimeVirtualManifest(context, virtualManifest)) {
return XR_ERROR_INITIALIZATION_FAILED;
}
out_manifest = virtualManifest;
return XR_SUCCESS;
}
#endif
XrResult RuntimeInterface::TryLoadingSingleRuntime(const std::string& openxr_command,
std::unique_ptr<RuntimeManifestFile>& manifest_file) { … }
XrResult RuntimeInterface::LoadRuntime(const std::string& openxr_command) { … }
void RuntimeInterface::UnloadRuntime(const std::string& openxr_command) { … }
XrResult RuntimeInterface::GetInstanceProcAddr(XrInstance instance, const char* name, PFN_xrVoidFunction* function) { … }
const XrGeneratedDispatchTableCore* RuntimeInterface::GetDispatchTable(XrInstance instance) { … }
const XrGeneratedDispatchTableCore* RuntimeInterface::GetDebugUtilsMessengerDispatchTable(XrDebugUtilsMessengerEXT messenger) { … }
RuntimeInterface::RuntimeInterface(LoaderPlatformLibraryHandle runtime_library, PFN_xrGetInstanceProcAddr get_instance_proc_addr)
: … { … }
RuntimeInterface::~RuntimeInterface() { … }
void RuntimeInterface::GetInstanceExtensionProperties(std::vector<XrExtensionProperties>& extension_properties) { … }
XrResult RuntimeInterface::CreateInstance(const XrInstanceCreateInfo* info, XrInstance* instance) { … }
XrResult RuntimeInterface::DestroyInstance(XrInstance instance) { … }
bool RuntimeInterface::TrackDebugMessenger(XrInstance instance, XrDebugUtilsMessengerEXT messenger) { … }
void RuntimeInterface::ForgetDebugMessenger(XrDebugUtilsMessengerEXT messenger) { … }
void RuntimeInterface::SetSupportedExtensions(std::vector<std::string>& supported_extensions) { … }
bool RuntimeInterface::SupportsExtension(const std::string& extension_name) { … }