// Copyright (c) 2017-2022, 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 // #pragma once #include #include #include #include #include "loader_platform.hpp" #include "loader_interfaces.h" struct XrGeneratedDispatchTable; class ApiLayerInterface { public: // Factory method static XrResult LoadApiLayers(const std::string& openxr_command, uint32_t enabled_api_layer_count, const char* const* enabled_api_layer_names, std::vector>& api_layer_interfaces); // Static queries static XrResult GetApiLayerProperties(const std::string& openxr_command, uint32_t incoming_count, uint32_t* outgoing_count, XrApiLayerProperties* api_layer_properties); static XrResult GetInstanceExtensionProperties(const std::string& openxr_command, const char* layer_name, std::vector& extension_properties); ApiLayerInterface(const std::string& layer_name, LoaderPlatformLibraryHandle layer_library, std::vector& supported_extensions, PFN_xrGetInstanceProcAddr get_instance_proc_addr, PFN_xrCreateApiLayerInstance create_api_layer_instance); virtual ~ApiLayerInterface(); PFN_xrGetInstanceProcAddr GetInstanceProcAddrFuncPointer() { return _get_instance_proc_addr; } PFN_xrCreateApiLayerInstance GetCreateApiLayerInstanceFuncPointer() { return _create_api_layer_instance; } std::string LayerName() { return _layer_name; } // Generated methods bool SupportsExtension(const std::string& extension_name) const; private: std::string _layer_name; LoaderPlatformLibraryHandle _layer_library; PFN_xrGetInstanceProcAddr _get_instance_proc_addr; PFN_xrCreateApiLayerInstance _create_api_layer_instance; std::vector _supported_extensions; };