e6370a45d8
This commit adds the Pico controller used in the Pico 4 as implemented in current versions of the OpenXR runtime on the device itself. Note that the extension and paths used in this commit might become obsolete once there is official support for the Pico 4 in the OpenXR standard.
114 lines
5.1 KiB
Python
114 lines
5.1 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.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)
|