Merge pull request #450 from openglfreak/feat-grid-opacity

add option for grid opacity
This commit is contained in:
oo8dev 2026-02-25 21:14:11 +01:00 committed by GitHub
commit de6047107e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 25 additions and 2 deletions

View File

@ -107,6 +107,8 @@
"USE_PASSTHROUGH_HELP": "Allow passthrough if the XR runtime supports it", "USE_PASSTHROUGH_HELP": "Allow passthrough if the XR runtime supports it",
"USE_SKYBOX": "Enable skybox", "USE_SKYBOX": "Enable skybox",
"USE_SKYBOX_HELP": "Show a skybox if there's no scene app or passthrough", "USE_SKYBOX_HELP": "Show a skybox if there's no scene app or passthrough",
"GRID_OPACITY": "Skybox grid opacity",
"GRID_OPACITY_HELP": "Opacity of the floor grid when the skybox is enabled",
"XR_CLICK_SENSITIVITY": "XR click sensitivity", "XR_CLICK_SENSITIVITY": "XR click sensitivity",
"XR_CLICK_SENSITIVITY_HELP": "Analog trigger sensitivity", "XR_CLICK_SENSITIVITY_HELP": "Analog trigger sensitivity",
"XR_CLICK_SENSITIVITY_RELEASE": "XR release sensitivity", "XR_CLICK_SENSITIVITY_RELEASE": "XR release sensitivity",

View File

@ -247,6 +247,7 @@ enum SettingType {
UprightScreenFix, UprightScreenFix,
UsePassthrough, UsePassthrough,
UseSkybox, UseSkybox,
GridOpacity,
XrClickSensitivity, XrClickSensitivity,
XrClickSensitivityRelease, XrClickSensitivityRelease,
XwaylandByDefault, XwaylandByDefault,
@ -294,6 +295,7 @@ impl SettingType {
Self::XrClickSensitivityRelease => &mut config.xr_click_sensitivity_release, Self::XrClickSensitivityRelease => &mut config.xr_click_sensitivity_release,
Self::SpaceDragMultiplier => &mut config.space_drag_multiplier, Self::SpaceDragMultiplier => &mut config.space_drag_multiplier,
Self::PointerLerpFactor => &mut config.pointer_lerp_factor, Self::PointerLerpFactor => &mut config.pointer_lerp_factor,
Self::GridOpacity => &mut config.grid_opacity,
_ => panic!("Requested f32 for non-f32 SettingType"), _ => panic!("Requested f32 for non-f32 SettingType"),
} }
} }
@ -368,6 +370,7 @@ impl SettingType {
Self::Clock12h => Ok("APP_SETTINGS.CLOCK_12H"), Self::Clock12h => Ok("APP_SETTINGS.CLOCK_12H"),
Self::DoubleCursorFix => Ok("APP_SETTINGS.DOUBLE_CURSOR_FIX"), Self::DoubleCursorFix => Ok("APP_SETTINGS.DOUBLE_CURSOR_FIX"),
Self::FocusFollowsMouseMode => Ok("APP_SETTINGS.FOCUS_FOLLOWS_MOUSE_MODE"), Self::FocusFollowsMouseMode => Ok("APP_SETTINGS.FOCUS_FOLLOWS_MOUSE_MODE"),
Self::GridOpacity => Ok("APP_SETTINGS.GRID_OPACITY"),
Self::HandsfreePointer => Ok("APP_SETTINGS.HANDSFREE_POINTER"), Self::HandsfreePointer => Ok("APP_SETTINGS.HANDSFREE_POINTER"),
Self::HideGrabHelp => Ok("APP_SETTINGS.HIDE_GRAB_HELP"), Self::HideGrabHelp => Ok("APP_SETTINGS.HIDE_GRAB_HELP"),
Self::HideUsername => Ok("APP_SETTINGS.HIDE_USERNAME"), Self::HideUsername => Ok("APP_SETTINGS.HIDE_USERNAME"),
@ -408,6 +411,7 @@ impl SettingType {
Self::BlockPosesOnKbdInteraction => Some("APP_SETTINGS.BLOCK_POSES_ON_KBD_INTERACTION_HELP"), Self::BlockPosesOnKbdInteraction => Some("APP_SETTINGS.BLOCK_POSES_ON_KBD_INTERACTION_HELP"),
Self::CaptureMethod => Some("APP_SETTINGS.CAPTURE_METHOD_HELP"), Self::CaptureMethod => Some("APP_SETTINGS.CAPTURE_METHOD_HELP"),
Self::DoubleCursorFix => Some("APP_SETTINGS.DOUBLE_CURSOR_FIX_HELP"), Self::DoubleCursorFix => Some("APP_SETTINGS.DOUBLE_CURSOR_FIX_HELP"),
Self::GridOpacity => Some("APP_SETTINGS.GRID_OPACITY_HELP"),
Self::HandsfreePointer => Some("APP_SETTINGS.HANDSFREE_POINTER_HELP"), Self::HandsfreePointer => Some("APP_SETTINGS.HANDSFREE_POINTER_HELP"),
Self::KeyboardMiddleClick => Some("APP_SETTINGS.KEYBOARD_MIDDLE_CLICK_HELP"), Self::KeyboardMiddleClick => Some("APP_SETTINGS.KEYBOARD_MIDDLE_CLICK_HELP"),
Self::LeftHandedMouse => Some("APP_SETTINGS.LEFT_HANDED_MOUSE_HELP"), Self::LeftHandedMouse => Some("APP_SETTINGS.LEFT_HANDED_MOUSE_HELP"),
@ -795,6 +799,7 @@ impl<T> TabSettings<T> {
slider_f32!(mp, c, SettingType::UiRoundMultiplier, 0.5, 5.0, 0.1); slider_f32!(mp, c, SettingType::UiRoundMultiplier, 0.5, 5.0, 0.1);
checkbox!(mp, c, SettingType::SetsOnWatch); checkbox!(mp, c, SettingType::SetsOnWatch);
checkbox!(mp, c, SettingType::UseSkybox); checkbox!(mp, c, SettingType::UseSkybox);
slider_f32!(mp, c, SettingType::GridOpacity, 0.0, 1.0, 0.05); // min, max, step
checkbox!(mp, c, SettingType::UsePassthrough); checkbox!(mp, c, SettingType::UsePassthrough);
checkbox!(mp, c, SettingType::Clock12h); checkbox!(mp, c, SettingType::Clock12h);
} }

View File

@ -161,13 +161,17 @@ impl Skybox {
.into_iter() .into_iter()
.next() .next()
.unwrap(); .unwrap();
let set0 = pipeline.uniform_buffer_upload(
0,
vec![app.session.config.grid_opacity * app.session.config.grid_opacity],
)?;
let pass = pipeline.create_pass( let pass = pipeline.create_pass(
tgt.extent_f32(), tgt.extent_f32(),
[0.0, 0.0], [0.0, 0.0],
app.gfx_extras.quad_verts.clone(), app.gfx_extras.quad_verts.clone(),
0..4, 0..4,
0..1, 0..1,
vec![], vec![set0],
&Default::default(), &Default::default(),
)?; )?;

View File

@ -130,6 +130,7 @@ pub struct AutoSettings {
pub block_poses_on_kbd_interaction: bool, pub block_poses_on_kbd_interaction: bool,
pub space_drag_multiplier: f32, pub space_drag_multiplier: f32,
pub use_skybox: bool, pub use_skybox: bool,
pub grid_opacity: f32,
pub use_passthrough: bool, pub use_passthrough: bool,
pub screen_render_down: bool, pub screen_render_down: bool,
pub pointer_lerp_factor: f32, pub pointer_lerp_factor: f32,
@ -180,6 +181,7 @@ pub fn save_settings(config: &GeneralConfig) -> anyhow::Result<()> {
block_poses_on_kbd_interaction: config.block_poses_on_kbd_interaction, block_poses_on_kbd_interaction: config.block_poses_on_kbd_interaction,
space_drag_multiplier: config.space_drag_multiplier, space_drag_multiplier: config.space_drag_multiplier,
use_skybox: config.use_skybox, use_skybox: config.use_skybox,
grid_opacity: config.grid_opacity,
use_passthrough: config.use_passthrough, use_passthrough: config.use_passthrough,
screen_render_down: config.screen_render_down, screen_render_down: config.screen_render_down,
pointer_lerp_factor: config.pointer_lerp_factor, pointer_lerp_factor: config.pointer_lerp_factor,

View File

@ -125,6 +125,9 @@
## If disabled, there will be no background rendered (solid black). ## If disabled, there will be no background rendered (solid black).
#use_skybox: true #use_skybox: true
## Monado/WiVRn only. Opacity of the floor grid if use_skybox is enabled.
#grid_opacity: true
## Hide the help popup that appears on your hand while grabbing an overlay ## Hide the help popup that appears on your hand while grabbing an overlay
#hide_grab_help: false #hide_grab_help: false

View File

@ -4,6 +4,10 @@ precision highp float;
layout (location = 0) in vec2 in_uv; layout (location = 0) in vec2 in_uv;
layout (location = 0) out vec4 out_color; layout (location = 0) out vec4 out_color;
layout (set = 0, binding = 0) uniform OpacityBlock {
uniform float opacity;
};
void main() void main()
{ {
float fade = max(1.0 - 2.0 * length(in_uv.xy + vec2(-0.5, -0.5)), 0.0); float fade = max(1.0 - 2.0 * length(in_uv.xy + vec2(-0.5, -0.5)), 0.0);
@ -14,6 +18,6 @@ void main()
} else { } else {
grid = 0.0; grid = 0.0;
} }
out_color = vec4(1.0, 1.0, 1.0, grid * fade); out_color = vec4(1.0, 1.0, 1.0, grid * fade * opacity);
} }

View File

@ -324,4 +324,7 @@ pub struct GeneralConfig {
#[serde(default)] #[serde(default)]
pub handsfree_pointer: HandsfreePointer, pub handsfree_pointer: HandsfreePointer,
#[serde(default = "def_one")]
pub grid_opacity: f32,
} }