d600e6eb1b
This commit adds the classes OpenXRExtensionWrapperExtension and OpenXRAPIExtension that can be used in GDExtensions to define OpenXR extension wrappers. It modifies extension wrapper registration so that they can be registered before OpenXRAPI instantiation (e.g. in core level initialization of GDExtensions). Developed by Migeran (https://migeran.com)
116 lines
5.3 KiB
Python
116 lines
5.3 KiB
Python
#!/usr/bin/env python
|
|
|
|
Import("env")
|
|
Import("env_modules")
|
|
|
|
env_openxr = env_modules.Clone()
|
|
|
|
#################################################
|
|
# Add in our Khronos OpenXR loader
|
|
|
|
thirdparty_obj = []
|
|
thirdparty_dir = "#thirdparty/openxr"
|
|
|
|
env_openxr.Prepend(
|
|
CPPPATH=[
|
|
thirdparty_dir,
|
|
thirdparty_dir + "/include",
|
|
thirdparty_dir + "/src",
|
|
thirdparty_dir + "/src/common",
|
|
thirdparty_dir + "/src/external/jsoncpp/include",
|
|
]
|
|
)
|
|
|
|
if env["platform"] == "android":
|
|
# may need to set OPENXR_ANDROID_VERSION_SUFFIX
|
|
env_openxr.AppendUnique(CPPDEFINES=["XR_OS_ANDROID", "XR_USE_PLATFORM_ANDROID"])
|
|
env_openxr.AppendUnique(CPPDEFINES=["JSON_USE_EXCEPTION=0"])
|
|
|
|
# may need to include java parts of the openxr loader
|
|
elif env["platform"] == "linuxbsd":
|
|
env_openxr.AppendUnique(CPPDEFINES=["XR_OS_LINUX"])
|
|
|
|
if env["x11"]:
|
|
env_openxr.AppendUnique(CPPDEFINES=["XR_USE_PLATFORM_XLIB"])
|
|
|
|
# FIXME: Review what needs to be set for Android and macOS.
|
|
env_openxr.AppendUnique(CPPDEFINES=["HAVE_SECURE_GETENV"])
|
|
elif env["platform"] == "windows":
|
|
env_openxr.AppendUnique(CPPDEFINES=["XR_OS_WINDOWS", "NOMINMAX", "XR_USE_PLATFORM_WIN32"])
|
|
|
|
# may need to check and set:
|
|
# - XR_USE_TIMESPEC
|
|
|
|
env_thirdparty = env_openxr.Clone()
|
|
env_thirdparty.disable_warnings()
|
|
env_thirdparty.AppendUnique(CPPDEFINES=["DISABLE_STD_FILESYSTEM"])
|
|
|
|
if "-fno-exceptions" in env_thirdparty["CXXFLAGS"]:
|
|
env_thirdparty["CXXFLAGS"].remove("-fno-exceptions")
|
|
env_thirdparty.Append(CPPPATH=[thirdparty_dir + "/src/loader"])
|
|
|
|
# add in external jsoncpp dependency
|
|
env_thirdparty.add_source_files(thirdparty_obj, thirdparty_dir + "/src/external/jsoncpp/src/lib_json/json_reader.cpp")
|
|
env_thirdparty.add_source_files(thirdparty_obj, thirdparty_dir + "/src/external/jsoncpp/src/lib_json/json_value.cpp")
|
|
env_thirdparty.add_source_files(thirdparty_obj, thirdparty_dir + "/src/external/jsoncpp/src/lib_json/json_writer.cpp")
|
|
|
|
# add in load
|
|
if env["platform"] != "android":
|
|
# On Android the openxr_loader is provided by separate plugins for each device
|
|
# Build the engine using object files
|
|
khrloader_obj = []
|
|
env_thirdparty.add_source_files(khrloader_obj, thirdparty_dir + "/src/xr_generated_dispatch_table.c")
|
|
|
|
env_thirdparty.add_source_files(khrloader_obj, thirdparty_dir + "/src/common/filesystem_utils.cpp")
|
|
env_thirdparty.add_source_files(khrloader_obj, thirdparty_dir + "/src/common/object_info.cpp")
|
|
|
|
env_thirdparty.add_source_files(khrloader_obj, thirdparty_dir + "/src/loader/api_layer_interface.cpp")
|
|
env_thirdparty.add_source_files(khrloader_obj, thirdparty_dir + "/src/loader/loader_core.cpp")
|
|
env_thirdparty.add_source_files(khrloader_obj, thirdparty_dir + "/src/loader/loader_instance.cpp")
|
|
env_thirdparty.add_source_files(khrloader_obj, thirdparty_dir + "/src/loader/loader_logger_recorders.cpp")
|
|
env_thirdparty.add_source_files(khrloader_obj, thirdparty_dir + "/src/loader/loader_logger.cpp")
|
|
env_thirdparty.add_source_files(khrloader_obj, thirdparty_dir + "/src/loader/manifest_file.cpp")
|
|
env_thirdparty.add_source_files(khrloader_obj, thirdparty_dir + "/src/loader/runtime_interface.cpp")
|
|
env_thirdparty.add_source_files(khrloader_obj, thirdparty_dir + "/src/loader/xr_generated_loader.cpp")
|
|
env.modules_sources += khrloader_obj
|
|
|
|
env.modules_sources += thirdparty_obj
|
|
|
|
#################################################
|
|
# And include our module source
|
|
|
|
module_obj = []
|
|
|
|
env_openxr.add_source_files(module_obj, "*.cpp")
|
|
env_openxr.add_source_files(module_obj, "action_map/*.cpp")
|
|
env_openxr.add_source_files(module_obj, "scene/*.cpp")
|
|
|
|
# We're a little more targeted with our extensions
|
|
if env["platform"] == "android":
|
|
env_openxr.add_source_files(module_obj, "extensions/openxr_android_extension.cpp")
|
|
if env["vulkan"]:
|
|
env_openxr.add_source_files(module_obj, "extensions/openxr_vulkan_extension.cpp")
|
|
if env["opengl3"]:
|
|
env_openxr.add_source_files(module_obj, "extensions/openxr_opengl_extension.cpp")
|
|
|
|
env_openxr.add_source_files(module_obj, "extensions/openxr_palm_pose_extension.cpp")
|
|
env_openxr.add_source_files(module_obj, "extensions/openxr_composition_layer_depth_extension.cpp")
|
|
env_openxr.add_source_files(module_obj, "extensions/openxr_htc_controller_extension.cpp")
|
|
env_openxr.add_source_files(module_obj, "extensions/openxr_htc_vive_tracker_extension.cpp")
|
|
env_openxr.add_source_files(module_obj, "extensions/openxr_huawei_controller_extension.cpp")
|
|
env_openxr.add_source_files(module_obj, "extensions/openxr_hand_tracking_extension.cpp")
|
|
env_openxr.add_source_files(module_obj, "extensions/openxr_fb_passthrough_extension_wrapper.cpp")
|
|
env_openxr.add_source_files(module_obj, "extensions/openxr_fb_display_refresh_rate_extension.cpp")
|
|
env_openxr.add_source_files(module_obj, "extensions/openxr_pico_controller_extension.cpp")
|
|
env_openxr.add_source_files(module_obj, "extensions/openxr_wmr_controller_extension.cpp")
|
|
env_openxr.add_source_files(module_obj, "extensions/openxr_ml2_controller_extension.cpp")
|
|
env_openxr.add_source_files(module_obj, "extensions/openxr_extension_wrapper_extension.cpp")
|
|
env_openxr.add_source_files(module_obj, "extensions/openxr_api_extension.cpp")
|
|
|
|
env.modules_sources += module_obj
|
|
|
|
if env.editor_build:
|
|
SConscript("editor/SCsub")
|
|
|
|
# Needed to force rebuilding the module files when the thirdparty library is updated.
|
|
env.Depends(module_obj, thirdparty_obj)
|