// Copyright (c) 2017-2024, The Khronos Group Inc. // Copyright (c) 2017-2019 Valve Corporation // Copyright (c) 2017-2019 LunarG, Inc. // // SPDX-License-Identifier: Apache-2.0 OR MIT // // Initial Author: Mark Young // #include "loader_init_data.hpp" #ifdef XR_KHR_LOADER_INIT_SUPPORT #ifdef XR_USE_PLATFORM_ANDROID // Check and copy the Android-specific init data. XrResult LoaderInitData::initialize(const XrLoaderInitInfoBaseHeaderKHR* info) { if (info->type != XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR) { return XR_ERROR_VALIDATION_FAILURE; } auto cast_info = reinterpret_cast(info); if (cast_info->applicationVM == nullptr) { return XR_ERROR_VALIDATION_FAILURE; } if (cast_info->applicationContext == nullptr) { return XR_ERROR_VALIDATION_FAILURE; } // Copy and store the JVM pointer and Android Context, ensuring the JVM is initialised. _data = *cast_info; _data.next = nullptr; jni::init(static_cast(_data.applicationVM)); const jni::Object context = jni::Object{static_cast(_data.applicationContext)}; // Retrieve a reference to the Android AssetManager. const auto assetManager = context.call("getAssets()Landroid/content/res/AssetManager;"); _android_asset_manager = AAssetManager_fromJava(jni::env(), assetManager.getHandle()); // Retrieve the path to the native libraries. const auto applicationContext = context.call("getApplicationContext()Landroid/content/Context;"); const auto applicationInfo = context.call("getApplicationInfo()Landroid/content/pm/ApplicationInfo;"); _native_library_path = applicationInfo.get("nativeLibraryDir"); _initialized = true; return XR_SUCCESS; } #endif // XR_USE_PLATFORM_ANDROID XrResult InitializeLoaderInitData(const XrLoaderInitInfoBaseHeaderKHR* loaderInitInfo) { return LoaderInitData::instance().initialize(loaderInitInfo); } #ifdef XR_USE_PLATFORM_ANDROID std::string GetAndroidNativeLibraryDir() { return LoaderInitData::instance()._native_library_path; } void* Android_Get_Asset_Manager() { return LoaderInitData::instance()._android_asset_manager; } #endif // XR_USE_PLATFORM_ANDROID #endif // XR_KHR_LOADER_INIT_SUPPORT