make app close when requested by os and other stuff (#61)
* idk * mr stuff * done * fix windows * add patches to Readme
This commit is contained in:
242
src/graphics/extensions.rs
Normal file
242
src/graphics/extensions.rs
Normal file
@@ -0,0 +1,242 @@
|
||||
use openxr::ExtensionSet;
|
||||
use std::ops;
|
||||
|
||||
#[derive(Clone, Debug, Eq, PartialEq)]
|
||||
pub struct XrExtensions(ExtensionSet);
|
||||
impl XrExtensions {
|
||||
pub fn raw_mut(&mut self) -> &mut ExtensionSet {
|
||||
&mut self.0
|
||||
}
|
||||
pub fn raw(&self) -> &ExtensionSet {
|
||||
&self.0
|
||||
}
|
||||
// pub fn enable_fb_passthrough(&mut self) -> &mut Self {
|
||||
// self.0.fb_passthrough = true;
|
||||
// self
|
||||
// }
|
||||
// pub fn disable_fb_passthrough(&mut self) -> &mut Self {
|
||||
// self.0.fb_passthrough = false;
|
||||
// self
|
||||
// }
|
||||
pub fn enable_hand_tracking(&mut self) -> &mut Self {
|
||||
self.0.ext_hand_tracking = true;
|
||||
self
|
||||
}
|
||||
pub fn disable_hand_tracking(&mut self) -> &mut Self {
|
||||
self.0.ext_hand_tracking = false;
|
||||
self
|
||||
}
|
||||
}
|
||||
impl From<ExtensionSet> for XrExtensions {
|
||||
fn from(value: ExtensionSet) -> Self {
|
||||
Self(value)
|
||||
}
|
||||
}
|
||||
impl From<XrExtensions> for ExtensionSet {
|
||||
fn from(val: XrExtensions) -> Self {
|
||||
val.0
|
||||
}
|
||||
}
|
||||
impl Default for XrExtensions {
|
||||
fn default() -> Self {
|
||||
let mut exts = ExtensionSet::default();
|
||||
exts.ext_hand_tracking = true;
|
||||
Self(exts)
|
||||
}
|
||||
}
|
||||
impl ops::BitAnd for XrExtensions {
|
||||
type Output = Self;
|
||||
|
||||
fn bitand(self, rhs: Self) -> Self::Output {
|
||||
let mut out = ExtensionSet::default();
|
||||
out.almalence_digital_lens_control =
|
||||
self.0.almalence_digital_lens_control && rhs.0.almalence_digital_lens_control;
|
||||
out.epic_view_configuration_fov =
|
||||
self.0.epic_view_configuration_fov && rhs.0.epic_view_configuration_fov;
|
||||
out.ext_performance_settings =
|
||||
self.0.ext_performance_settings && rhs.0.ext_performance_settings;
|
||||
out.ext_thermal_query = self.0.ext_thermal_query && rhs.0.ext_thermal_query;
|
||||
out.ext_debug_utils = self.0.ext_debug_utils && rhs.0.ext_debug_utils;
|
||||
out.ext_eye_gaze_interaction =
|
||||
self.0.ext_eye_gaze_interaction && rhs.0.ext_eye_gaze_interaction;
|
||||
out.ext_view_configuration_depth_range =
|
||||
self.0.ext_view_configuration_depth_range && rhs.0.ext_view_configuration_depth_range;
|
||||
out.ext_conformance_automation =
|
||||
self.0.ext_conformance_automation && rhs.0.ext_conformance_automation;
|
||||
out.ext_hand_tracking = self.0.ext_hand_tracking && rhs.0.ext_hand_tracking;
|
||||
out.ext_dpad_binding = self.0.ext_dpad_binding && rhs.0.ext_dpad_binding;
|
||||
out.ext_hand_joints_motion_range =
|
||||
self.0.ext_hand_joints_motion_range && rhs.0.ext_hand_joints_motion_range;
|
||||
out.ext_samsung_odyssey_controller =
|
||||
self.0.ext_samsung_odyssey_controller && rhs.0.ext_samsung_odyssey_controller;
|
||||
out.ext_hp_mixed_reality_controller =
|
||||
self.0.ext_hp_mixed_reality_controller && rhs.0.ext_hp_mixed_reality_controller;
|
||||
out.ext_palm_pose = self.0.ext_palm_pose && rhs.0.ext_palm_pose;
|
||||
out.ext_uuid = self.0.ext_uuid && rhs.0.ext_uuid;
|
||||
out.extx_overlay = self.0.extx_overlay && rhs.0.extx_overlay;
|
||||
out.fb_composition_layer_image_layout =
|
||||
self.0.fb_composition_layer_image_layout && rhs.0.fb_composition_layer_image_layout;
|
||||
out.fb_composition_layer_alpha_blend =
|
||||
self.0.fb_composition_layer_alpha_blend && rhs.0.fb_composition_layer_alpha_blend;
|
||||
out.fb_swapchain_update_state =
|
||||
self.0.fb_swapchain_update_state && rhs.0.fb_swapchain_update_state;
|
||||
out.fb_composition_layer_secure_content =
|
||||
self.0.fb_composition_layer_secure_content && rhs.0.fb_composition_layer_secure_content;
|
||||
out.fb_display_refresh_rate =
|
||||
self.0.fb_display_refresh_rate && rhs.0.fb_display_refresh_rate;
|
||||
out.fb_color_space = self.0.fb_color_space && rhs.0.fb_color_space;
|
||||
out.fb_hand_tracking_mesh = self.0.fb_hand_tracking_mesh && rhs.0.fb_hand_tracking_mesh;
|
||||
out.fb_hand_tracking_aim = self.0.fb_hand_tracking_aim && rhs.0.fb_hand_tracking_aim;
|
||||
out.fb_hand_tracking_capsules =
|
||||
self.0.fb_hand_tracking_capsules && rhs.0.fb_hand_tracking_capsules;
|
||||
out.fb_spatial_entity = self.0.fb_spatial_entity && rhs.0.fb_spatial_entity;
|
||||
out.fb_foveation = self.0.fb_foveation && rhs.0.fb_foveation;
|
||||
out.fb_foveation_configuration =
|
||||
self.0.fb_foveation_configuration && rhs.0.fb_foveation_configuration;
|
||||
out.fb_keyboard_tracking = self.0.fb_keyboard_tracking && rhs.0.fb_keyboard_tracking;
|
||||
out.fb_triangle_mesh = self.0.fb_triangle_mesh && rhs.0.fb_triangle_mesh;
|
||||
out.fb_passthrough = self.0.fb_passthrough && rhs.0.fb_passthrough;
|
||||
out.fb_render_model = self.0.fb_render_model && rhs.0.fb_render_model;
|
||||
out.fb_spatial_entity_query =
|
||||
self.0.fb_spatial_entity_query && rhs.0.fb_spatial_entity_query;
|
||||
out.fb_spatial_entity_storage =
|
||||
self.0.fb_spatial_entity_storage && rhs.0.fb_spatial_entity_storage;
|
||||
out.fb_foveation_vulkan = self.0.fb_foveation_vulkan && rhs.0.fb_foveation_vulkan;
|
||||
out.fb_swapchain_update_state_opengl_es =
|
||||
self.0.fb_swapchain_update_state_opengl_es && rhs.0.fb_swapchain_update_state_opengl_es;
|
||||
out.fb_swapchain_update_state_vulkan =
|
||||
self.0.fb_swapchain_update_state_vulkan && rhs.0.fb_swapchain_update_state_vulkan;
|
||||
out.fb_space_warp = self.0.fb_space_warp && rhs.0.fb_space_warp;
|
||||
out.fb_scene = self.0.fb_scene && rhs.0.fb_scene;
|
||||
out.fb_spatial_entity_container =
|
||||
self.0.fb_spatial_entity_container && rhs.0.fb_spatial_entity_container;
|
||||
out.fb_passthrough_keyboard_hands =
|
||||
self.0.fb_passthrough_keyboard_hands && rhs.0.fb_passthrough_keyboard_hands;
|
||||
out.fb_composition_layer_settings =
|
||||
self.0.fb_composition_layer_settings && rhs.0.fb_composition_layer_settings;
|
||||
out.htc_vive_cosmos_controller_interaction = self.0.htc_vive_cosmos_controller_interaction
|
||||
&& rhs.0.htc_vive_cosmos_controller_interaction;
|
||||
out.htc_facial_tracking = self.0.htc_facial_tracking && rhs.0.htc_facial_tracking;
|
||||
out.htc_vive_focus3_controller_interaction = self.0.htc_vive_focus3_controller_interaction
|
||||
&& rhs.0.htc_vive_focus3_controller_interaction;
|
||||
out.htc_hand_interaction = self.0.htc_hand_interaction && rhs.0.htc_hand_interaction;
|
||||
out.htc_vive_wrist_tracker_interaction =
|
||||
self.0.htc_vive_wrist_tracker_interaction && rhs.0.htc_vive_wrist_tracker_interaction;
|
||||
out.htcx_vive_tracker_interaction =
|
||||
self.0.htcx_vive_tracker_interaction && rhs.0.htcx_vive_tracker_interaction;
|
||||
out.huawei_controller_interaction =
|
||||
self.0.huawei_controller_interaction && rhs.0.huawei_controller_interaction;
|
||||
out.khr_composition_layer_cube =
|
||||
self.0.khr_composition_layer_cube && rhs.0.khr_composition_layer_cube;
|
||||
out.khr_composition_layer_depth =
|
||||
self.0.khr_composition_layer_depth && rhs.0.khr_composition_layer_depth;
|
||||
out.khr_vulkan_swapchain_format_list =
|
||||
self.0.khr_vulkan_swapchain_format_list && rhs.0.khr_vulkan_swapchain_format_list;
|
||||
out.khr_composition_layer_cylinder =
|
||||
self.0.khr_composition_layer_cylinder && rhs.0.khr_composition_layer_cylinder;
|
||||
out.khr_composition_layer_equirect =
|
||||
self.0.khr_composition_layer_equirect && rhs.0.khr_composition_layer_equirect;
|
||||
out.khr_opengl_enable = self.0.khr_opengl_enable && rhs.0.khr_opengl_enable;
|
||||
out.khr_opengl_es_enable = self.0.khr_opengl_es_enable && rhs.0.khr_opengl_es_enable;
|
||||
out.khr_vulkan_enable = self.0.khr_vulkan_enable && rhs.0.khr_vulkan_enable;
|
||||
out.khr_visibility_mask = self.0.khr_visibility_mask && rhs.0.khr_visibility_mask;
|
||||
out.khr_composition_layer_color_scale_bias = self.0.khr_composition_layer_color_scale_bias
|
||||
&& rhs.0.khr_composition_layer_color_scale_bias;
|
||||
out.khr_convert_timespec_time =
|
||||
self.0.khr_convert_timespec_time && rhs.0.khr_convert_timespec_time;
|
||||
out.khr_loader_init = self.0.khr_loader_init && rhs.0.khr_loader_init;
|
||||
out.khr_vulkan_enable2 = self.0.khr_vulkan_enable2 && rhs.0.khr_vulkan_enable2;
|
||||
out.khr_composition_layer_equirect2 =
|
||||
self.0.khr_composition_layer_equirect2 && rhs.0.khr_composition_layer_equirect2;
|
||||
out.khr_binding_modification =
|
||||
self.0.khr_binding_modification && rhs.0.khr_binding_modification;
|
||||
out.khr_swapchain_usage_input_attachment_bit =
|
||||
self.0.khr_swapchain_usage_input_attachment_bit
|
||||
&& rhs.0.khr_swapchain_usage_input_attachment_bit;
|
||||
out.meta_vulkan_swapchain_create_info =
|
||||
self.0.meta_vulkan_swapchain_create_info && rhs.0.meta_vulkan_swapchain_create_info;
|
||||
out.meta_performance_metrics =
|
||||
self.0.meta_performance_metrics && rhs.0.meta_performance_metrics;
|
||||
out.ml_ml2_controller_interaction =
|
||||
self.0.ml_ml2_controller_interaction && rhs.0.ml_ml2_controller_interaction;
|
||||
out.mnd_headless = self.0.mnd_headless && rhs.0.mnd_headless;
|
||||
out.mnd_swapchain_usage_input_attachment_bit =
|
||||
self.0.mnd_swapchain_usage_input_attachment_bit
|
||||
&& rhs.0.mnd_swapchain_usage_input_attachment_bit;
|
||||
out.mndx_egl_enable = self.0.mndx_egl_enable && rhs.0.mndx_egl_enable;
|
||||
out.msft_unbounded_reference_space =
|
||||
self.0.msft_unbounded_reference_space && rhs.0.msft_unbounded_reference_space;
|
||||
out.msft_spatial_anchor = self.0.msft_spatial_anchor && rhs.0.msft_spatial_anchor;
|
||||
out.msft_spatial_graph_bridge =
|
||||
self.0.msft_spatial_graph_bridge && rhs.0.msft_spatial_graph_bridge;
|
||||
out.msft_hand_interaction = self.0.msft_hand_interaction && rhs.0.msft_hand_interaction;
|
||||
out.msft_hand_tracking_mesh =
|
||||
self.0.msft_hand_tracking_mesh && rhs.0.msft_hand_tracking_mesh;
|
||||
out.msft_secondary_view_configuration =
|
||||
self.0.msft_secondary_view_configuration && rhs.0.msft_secondary_view_configuration;
|
||||
out.msft_first_person_observer =
|
||||
self.0.msft_first_person_observer && rhs.0.msft_first_person_observer;
|
||||
out.msft_controller_model = self.0.msft_controller_model && rhs.0.msft_controller_model;
|
||||
out.msft_composition_layer_reprojection =
|
||||
self.0.msft_composition_layer_reprojection && rhs.0.msft_composition_layer_reprojection;
|
||||
out.msft_spatial_anchor_persistence =
|
||||
self.0.msft_spatial_anchor_persistence && rhs.0.msft_spatial_anchor_persistence;
|
||||
out.oculus_audio_device_guid =
|
||||
self.0.oculus_audio_device_guid && rhs.0.oculus_audio_device_guid;
|
||||
out.ultraleap_hand_tracking_forearm =
|
||||
self.0.ultraleap_hand_tracking_forearm && rhs.0.ultraleap_hand_tracking_forearm;
|
||||
out.valve_analog_threshold = self.0.valve_analog_threshold && rhs.0.valve_analog_threshold;
|
||||
out.varjo_quad_views = self.0.varjo_quad_views && rhs.0.varjo_quad_views;
|
||||
out.varjo_foveated_rendering =
|
||||
self.0.varjo_foveated_rendering && rhs.0.varjo_foveated_rendering;
|
||||
out.varjo_composition_layer_depth_test =
|
||||
self.0.varjo_composition_layer_depth_test && rhs.0.varjo_composition_layer_depth_test;
|
||||
out.varjo_environment_depth_estimation =
|
||||
self.0.varjo_environment_depth_estimation && rhs.0.varjo_environment_depth_estimation;
|
||||
out.varjo_marker_tracking = self.0.varjo_marker_tracking && rhs.0.varjo_marker_tracking;
|
||||
out.varjo_view_offset = self.0.varjo_view_offset && rhs.0.varjo_view_offset;
|
||||
and_android_only_exts(&self, &rhs, &mut out);
|
||||
and_windows_only_exts(&self, &rhs, &mut out);
|
||||
for ext in self.0.other {
|
||||
if rhs.0.other.contains(&ext) {
|
||||
out.other.push(ext);
|
||||
}
|
||||
}
|
||||
Self(out)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(not(target_os = "android"))]
|
||||
fn and_android_only_exts(lhs: &XrExtensions, rhs: &XrExtensions, out: &mut ExtensionSet) {}
|
||||
#[cfg(not(windows))]
|
||||
fn and_windows_only_exts(lhs: &XrExtensions, rhs: &XrExtensions, out: &mut ExtensionSet) {}
|
||||
#[cfg(target_os = "android")]
|
||||
fn and_android_only_exts(lhs: &XrExtensions, rhs: &XrExtensions, out: &mut ExtensionSet) {
|
||||
out.oculus_android_session_state_enable =
|
||||
lhs.0.oculus_android_session_state_enable && rhs.0.oculus_android_session_state_enable;
|
||||
out.khr_loader_init_android = lhs.0.khr_loader_init_android && rhs.0.khr_loader_init_android;
|
||||
out.fb_android_surface_swapchain_create =
|
||||
lhs.0.fb_android_surface_swapchain_create && rhs.0.fb_android_surface_swapchain_create;
|
||||
out.fb_swapchain_update_state_android_surface = lhs.0.fb_swapchain_update_state_android_surface
|
||||
&& rhs.0.fb_swapchain_update_state_android_surface;
|
||||
out.khr_android_thread_settings =
|
||||
lhs.0.khr_android_thread_settings && rhs.0.khr_android_thread_settings;
|
||||
out.khr_android_surface_swapchain =
|
||||
lhs.0.khr_android_surface_swapchain && rhs.0.khr_android_surface_swapchain;
|
||||
out.khr_android_create_instance =
|
||||
lhs.0.khr_android_create_instance && rhs.0.khr_android_create_instance;
|
||||
}
|
||||
#[cfg(windows)]
|
||||
fn and_windows_only_exts(lhs: &XrExtensions, rhs: &XrExtensions, out: &mut ExtensionSet) {
|
||||
out.ext_win32_appcontainer_compatible =
|
||||
lhs.0.ext_win32_appcontainer_compatible && rhs.0.ext_win32_appcontainer_compatible;
|
||||
out.khr_d3d11_enable = lhs.0.khr_d3d11_enable && rhs.0.khr_d3d11_enable;
|
||||
out.khr_d3d12_enable = lhs.0.khr_d3d12_enable && rhs.0.khr_d3d12_enable;
|
||||
out.khr_win32_convert_performance_counter_time =
|
||||
lhs.0.khr_win32_convert_performance_counter_time
|
||||
&& rhs.0.khr_win32_convert_performance_counter_time;
|
||||
out.msft_perception_anchor_interop =
|
||||
lhs.0.msft_perception_anchor_interop && rhs.0.msft_perception_anchor_interop;
|
||||
out.msft_holographic_window_attachment =
|
||||
lhs.0.msft_holographic_window_attachment && rhs.0.msft_holographic_window_attachment;
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
pub mod extensions;
|
||||
mod vulkan;
|
||||
|
||||
use bevy::render::renderer::{RenderAdapter, RenderAdapterInfo, RenderDevice, RenderQueue};
|
||||
@@ -12,8 +13,37 @@ use crate::resources::{
|
||||
|
||||
use openxr as xr;
|
||||
|
||||
use self::extensions::XrExtensions;
|
||||
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
|
||||
pub enum XrPreferdBlendMode {
|
||||
Opaque,
|
||||
Additive,
|
||||
AlphaBlend,
|
||||
}
|
||||
impl Default for XrPreferdBlendMode {
|
||||
fn default() -> Self {
|
||||
Self::Opaque
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct XrAppInfo {
|
||||
pub name: String,
|
||||
}
|
||||
impl Default for XrAppInfo {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
name: "Ambient".into(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn initialize_xr_graphics(
|
||||
window: Option<RawHandleWrapper>,
|
||||
reqeusted_extensions: XrExtensions,
|
||||
prefered_blend_mode: XrPreferdBlendMode,
|
||||
app_info: XrAppInfo,
|
||||
) -> anyhow::Result<(
|
||||
RenderDevice,
|
||||
RenderQueue,
|
||||
@@ -32,13 +62,13 @@ pub fn initialize_xr_graphics(
|
||||
XrViews,
|
||||
XrFrameState,
|
||||
)> {
|
||||
vulkan::initialize_xr_graphics(window)
|
||||
vulkan::initialize_xr_graphics(window, reqeusted_extensions, prefered_blend_mode, app_info)
|
||||
}
|
||||
|
||||
pub fn xr_entry() -> anyhow::Result<xr::Entry> {
|
||||
#[cfg(feature = "linked")]
|
||||
#[cfg(windows)]
|
||||
let entry = Ok(xr::Entry::linked());
|
||||
#[cfg(not(feature = "linked"))]
|
||||
#[cfg(not(windows))]
|
||||
let entry = unsafe { xr::Entry::load().map_err(|e| anyhow::anyhow!(e)) };
|
||||
entry
|
||||
}
|
||||
|
||||
@@ -10,7 +10,9 @@ use bevy::render::renderer::{RenderAdapter, RenderAdapterInfo, RenderDevice, Ren
|
||||
use bevy::window::RawHandleWrapper;
|
||||
use openxr as xr;
|
||||
use wgpu::Instance;
|
||||
use xr::EnvironmentBlendMode;
|
||||
|
||||
use crate::graphics::extensions::XrExtensions;
|
||||
use crate::input::XrInput;
|
||||
use crate::resources::{
|
||||
Swapchain, SwapchainInner, XrEnvironmentBlendMode, XrFormat, XrFrameState, XrFrameWaiter,
|
||||
@@ -18,10 +20,13 @@ use crate::resources::{
|
||||
};
|
||||
use crate::VIEW_TYPE;
|
||||
|
||||
use super::{XrAppInfo, XrPreferdBlendMode};
|
||||
|
||||
pub fn initialize_xr_graphics(
|
||||
window: Option<RawHandleWrapper>,
|
||||
// Horrible hack to get the Handtacking extension Loaded, Replace with good system to load
|
||||
// any extension at some point
|
||||
reqeusted_extensions: XrExtensions,
|
||||
prefered_blend_mode: XrPreferdBlendMode,
|
||||
app_info: XrAppInfo,
|
||||
) -> anyhow::Result<(
|
||||
RenderDevice,
|
||||
RenderQueue,
|
||||
@@ -39,8 +44,6 @@ pub fn initialize_xr_graphics(
|
||||
XrInput,
|
||||
XrViews,
|
||||
XrFrameState,
|
||||
// Horrible hack to get the Handtacking extension Loaded, Replace with good system to load
|
||||
// any extension at some point
|
||||
)> {
|
||||
use wgpu_hal::{api::Vulkan as V, Api};
|
||||
|
||||
@@ -49,26 +52,25 @@ pub fn initialize_xr_graphics(
|
||||
#[cfg(target_os = "android")]
|
||||
xr_entry.initialize_android_loader()?;
|
||||
|
||||
let available_extensions = xr_entry.enumerate_extensions()?;
|
||||
assert!(available_extensions.khr_vulkan_enable2);
|
||||
let available_extensions: XrExtensions = xr_entry.enumerate_extensions()?.into();
|
||||
assert!(available_extensions.raw().khr_vulkan_enable2);
|
||||
info!("available xr exts: {:#?}", available_extensions);
|
||||
|
||||
let mut enabled_extensions = xr::ExtensionSet::default();
|
||||
let mut enabled_extensions: xr::ExtensionSet =
|
||||
(available_extensions & reqeusted_extensions).into();
|
||||
enabled_extensions.khr_vulkan_enable2 = true;
|
||||
#[cfg(target_os = "android")]
|
||||
{
|
||||
enabled_extensions.khr_android_create_instance = true;
|
||||
}
|
||||
enabled_extensions.ext_hand_tracking = available_extensions.ext_hand_tracking;
|
||||
// enabled_extensions.ext_hand_joints_motion_range = available_extensions.ext_hand_joints_motion_range;
|
||||
|
||||
|
||||
let available_layers = xr_entry.enumerate_layers()?;
|
||||
info!("available xr layers: {:#?}", available_layers);
|
||||
|
||||
let xr_instance = xr_entry.create_instance(
|
||||
&xr::ApplicationInfo {
|
||||
application_name: "Ambient",
|
||||
application_name: &app_info.name,
|
||||
engine_name: "Bevy",
|
||||
..Default::default()
|
||||
},
|
||||
&enabled_extensions,
|
||||
@@ -90,7 +92,22 @@ pub fn initialize_xr_graphics(
|
||||
}
|
||||
);
|
||||
|
||||
let blend_mode = xr_instance.enumerate_environment_blend_modes(xr_system_id, VIEW_TYPE)?[0];
|
||||
let blend_modes = xr_instance.enumerate_environment_blend_modes(xr_system_id, VIEW_TYPE)?;
|
||||
let blend_mode: EnvironmentBlendMode = match prefered_blend_mode {
|
||||
XrPreferdBlendMode::Opaque if blend_modes.contains(&EnvironmentBlendMode::OPAQUE) => {
|
||||
EnvironmentBlendMode::OPAQUE
|
||||
}
|
||||
XrPreferdBlendMode::Additive if blend_modes.contains(&EnvironmentBlendMode::ADDITIVE) => {
|
||||
EnvironmentBlendMode::ADDITIVE
|
||||
}
|
||||
XrPreferdBlendMode::AlphaBlend
|
||||
if blend_modes.contains(&EnvironmentBlendMode::ALPHA_BLEND) =>
|
||||
{
|
||||
EnvironmentBlendMode::ALPHA_BLEND
|
||||
}
|
||||
_ => EnvironmentBlendMode::OPAQUE,
|
||||
};
|
||||
|
||||
|
||||
#[cfg(not(target_os = "android"))]
|
||||
let vk_target_version = vk::make_api_version(0, 1, 2, 0);
|
||||
@@ -131,7 +148,7 @@ pub fn initialize_xr_graphics(
|
||||
let vk_instance = unsafe {
|
||||
let extensions_cchar: Vec<_> = extensions.iter().map(|s| s.as_ptr()).collect();
|
||||
|
||||
let app_name = CString::new("Ambient")?;
|
||||
let app_name = CString::new(app_info.name)?;
|
||||
let vk_app_info = vk::ApplicationInfo::builder()
|
||||
.application_name(&app_name)
|
||||
.application_version(1)
|
||||
@@ -409,8 +426,6 @@ pub fn initialize_xr_graphics(
|
||||
should_render: true,
|
||||
})
|
||||
.into(),
|
||||
// Horrible hack to get the Handtacking extension Loaded, Replace with good system to load
|
||||
// any extension at some point
|
||||
))
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user