Para obtener la guía de compilación de OpenXR, consulte: https://blog.csdn.net/geyichongchujianghu/article/details/124672713
OpenXR SDK地址为: GitHub - KhronosGroup/OpenXR-SDK-Source: fuentes para el cargador OpenXR, capas API básicas y código de ejemplo.
La dirección de ejecución de Monado es: Monado / Monado · GitLab
La dirección del agente del sistema es: Ryan Pavlik / openxr-android-broker · GitLab
1. hola_xr/CMakeLists.txt
file(GLOB LOCAL_HEADERS "*.h"): el comando GLOB se utiliza principalmente para hacer coincidir las reglas coincidentes con los archivos requeridos en el directorio especificado, y las variables se almacenan en el archivo de variables LOCAL_HEADERS (GLOB LOCAL_SOURCE "*.cpp" ) file(GLOB VULKAN_SHADERS "vulkan_shaders/*.glsl") # Para incluir sombreadores compilados include_directories(${CMAKE_CURRENT_BINARY_DIR}): agrega el directorio especificado a la ruta de búsqueda del archivo de encabezado del compilador, y el directorio especificado se interpreta como la ruta relativa de la ruta del código fuente actual. CMAKE_CURRENT_BINARY_DIR es el directorio de compilación actual. hello_xr/build if(ANDROID) add_library(hello_xr MODULE ${LOCAL_SOURCE} ${LOCAL_HEADERS} ${VULKAN_SHADERS} $<TARGET_OBJECTS:android_native_app_glue>) --Agregue una biblioteca llamada hello_xr, se puede especificar el archivo fuente de la biblioteca o target_sources ( ) designación posterior. El tipo de biblioteca es ESTÁTICA (biblioteca estática)/COMPARTIDA (biblioteca dinámica)/MÓDULO (biblioteca de módulos). target_link_libraries(hello_xr ${ANDROID_LIBRARY} ${ANDROID_LOG_LIBRARY}) -- Bibliotecas o indicadores para usar al vincular el objetivo dado y/o sus dependencias else() add_executable(hello_xr ${LOCAL_SOURCE} ${LOCAL_HEADERS} ${VULKAN_SHADERS}) -- Utilice el archivo fuente especificado para generar el archivo ejecutable de destino endif() set_target_properties(hello_xr PROPERTIES FOLDER ${SAMPLES_FOLDER}) --Este comando es para establecer las propiedades del destino, establezca la propiedad FOLDER en ${SAMPLES_FOLDER} source_group("Encabezados " FILES ${LOCAL_HEADERS}) -- Cualquier archivo fuente especificado explícitamente se colocará en el grupo <Encabezados>. Las rutas relativas se interpretan en relación con el directorio de origen actual. source_group("Shaders" ARCHIVOS ${VULKAN_SHADERS}) compile_glsl(run_hello_xr_glsl_compiles ${VULKAN_SHADERS}) add_dependencies(hello_xr generate_openxr_header run_hello_xr_glsl_compiles target_link_libraries(hello_x r OpenXR::openxr_loader) )--Agregar dependencias target_include_directories(hello_xr PRIVATE ${PROJECT_SOURCE_DIR}/src ${PROJECT_SOURCE_DIR}/src/common # para encabezados auxiliares $ {PROJECT_SOURCE_DIR}/external/include ) --Especificar los archivos de encabezado que el destino (archivo exe o similar) necesita incluir la ruta. if(GLSLANG_VALIDATOR AND NOT GLSLC_COMMAND) target_compile_definitions(hello_xr PRIVATE USE_GLSLANGVALIDATOR) --Agregue la definición de compilación USE_GLSLANGVALIDATOR al destino endif() if(Vulkan_FOUND) target_include_directories(hello_xr PRIVATE ${ Vulkan_INCLUDE_DIRS} ) endif() target_link_libraries(hola_xr openxr-gfxwrapper) if(OBJETIVO openxr-gfxwrapper) endif() ...
2. hola_xr/build.gradle
externalNativeBuild { --用于控制Native的编译 cmake { argumentos '-DANDROID_STL=c++_shared', '-DBUILD_API_LAYERS=OFF', '-DBUILD_TESTS=ON', '-DBUILD_LOADER=ON', '-DBUILD_CONFORMANCE_TESTS=OFF' , '-DBUILD_ALL_EXTENSIONS=ON' apunta a "openxr_loader", "hello_xr" } }Si desea compilar API_LAYER, debe modificarlo de la siguiente manera:
argumentos...
'-DBUILD_API_LAYERS= ENCENDIDO ',
apunta a "openxr_loader", "hello_xr", " XrApiLayer_api_dump "
externalNativeBuild { -- usado para controlar la compilación nativa cmake { ruta "${project.repoRoot}/CMakeLists.txt" -- especifica la versión del archivo CMakeLists "3.22.1" --cmake version } }
3. cargador/CMakeLists.txt
Debido a que hay demasiados, elige solo los claves.
# crear variables de caché para destinos de instalación include(GNUInstallDirs) --include文件夹 # Lista de todos los archivos generados externamente fuera del cargador con los que el cargador # necesita compilar. set(LOADER_EXTERNAL_GEN_FILES ${COMMON_GENERated_OUTPUT}) --定义变量LOADER_EXTERNAL_GEN_FILES,并赋值为${COMMON_GENERated_OUTPUT} set(LOADER_EXTERNAL_GEN_DEPENDS ${COMMON_GENERated_DEPENDS}) run_xr_xml_generate( loader_source_generator.py xr_generated_loader.hpp)-- run_xr_xml_generate(loader_source_generator.py xr_generated_loader.cpp) add_library (openxr_loader ${LIBRARY_TYPE} android_utilities.cpp android_utilities.h api_layer_interface.cpp api_layer_interface.hpp loader_core.cpp loader_instance.cpp loader_instance.hpp loader_logger.cpp loader_logger.hpp loader_logger_recorders.cpp loader_logger_recorders.hpp manifest_file.cpp manifest_file.hpp runtime_interface.cpp runtime_interface.hpp ${GENERATED_OUTPUT} ${PROJECT_SOURCE_DIR}/src/common/he x_and_handles.h $ {PROJECT_SOURCE_DIR}/src/common/object_info.cpp ${PROJECT_SOURCE_DIR}/src/common/object_info.h ${PROJECT_SOURCE_DIR}/src/common/platform_utils.hpp ${LOADER_EXTERNAL_GEN_FILES} ${openxr_loader_RESOURCE_FILE} )--生成libopenxr_loader.so,并添加相关编译文件 ${CMAKE_CURRENT_SOURCE_DIR} set_target_properties(openxr_loader CARPETA DE PROPIEDADES ${LOADER_FOLDER}) add_dependencies(openxr_loader generate_openxr_header xr_global_generated_files) --添加依赖 target_include_directories( openxr_loader # para encabezados OpenXR PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE _DIR}/include> $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include> PRIVATE ${PROJECT_SOURCE_DIR}/src/common # para la tabla de despacho generada, common_config.h ${CMAKE_CURRENT_SOURCE_DIR}/.. ${CMAKE_CURRENT_BINARY_DIR}/.. # para archivos generados específicos del objetivo ${CMAKE_CURRENT_BINARY_DIR} INTERFACE $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}> ): especifique la ruta del archivo de encabezado que el destino (archivo exe o similar) debe incluir. Se requieren palabras clave INTERFACE, PUBLIC y PRIVATE para especificar el alcance de los siguientes parámetros target_link_libraries ( openxr_loader PRIVATE ${CMAKE_DL_LIBS} Threads PUBLIC::Threads ) --- biblioteca target_compile_definitions(openxr_loader PRIVATE ${OPENXR_ALL_SUPPORTED_DEFINES}) --agregar definición if(ANDROID) target_link_libraries( openxr_loader PRIVATE ${ANDROID_LOG_LIBRARY} ${ANDROID_LIBRARY}) end if()target_compile_definitions(openxr_loader PRIVATE API_NAME="OpenXR") --修改定义 openxr_add_filesystem_utils(openxr_loader) set_target_properties(openxr_loader PROPERTIES DEBUG_POSTFIX "${OPENXR_DEBUG_POSTFIX}") --设置属性 ... elseif(ANDROID) set(JNIPP_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/. ./external/jnipp) set(JNIWRAPPER_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../external/android-jni-wrappers) file(GLOB ANDROID_WRAP_SOURCES ${JNIWRAPPER_ROOT}/wrap/*.cpp) set_target_properties(openxr_loader PROPERTIES CXX_STANDARD 17 CXX_STANDARD _REQUIRED VERDADERO) fuentes_destino (openxr_loader PRIVADO ${CMAKE_CURRENT_SOURCE_DIR}/android_utilities.cpp ${CMAKE_CURRENT_SOURCE_DIR}/android_utilities.h ${ANDROID_WRAP_SOURCES} ${JNIPP_ROOT}/jnipp.cpp ) --将源添加到target target_include_directories(openxr_loader PRIVATE ${JNIPP_R OOT} ${JNIWRAPPER_ROOT} ) endif ()add_library(headers INTERFACE) --Importe directamente la biblioteca generada, cmake no agregará reglas de compilación a este tipo de biblioteca $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)install( OBJETIVOS encabezados openxr_loader EXPORTAR openxr_loader_export DESTINO DE EJECUCIÓN "${CMAKE_INSTALL_BINDIR}" DESTINO DE LA BIBLIOTECA del cargador de COMPONENTES "${CMAKE_INSTALL_LIBDIR}" DESTINO DEL ARCHIVO del cargador de COMPONENTES "${CMAKE_INSTALL_LIBD IR}" Cargador de COMPONENTES ) - personalizará archivos, archivos de biblioteca y archivos de encabezado , etc. Instalar en el directorio especificado exportar ( EXPORTAR openxr_loader_export FILE ${CMAKE_CURRENT_BINARY_DIR}/OpenXRTargets.cmake NAMESPACE OpenXR:: )# Crear alias para que puedan usarse de la misma manera ya sea que se vendan como fuente o se encuentren con CMake add_library(OpenXR:: openxr_loader ALIAS openxr_loader) - - establece el alias de encabezados de biblioteca OpenXR::headers...