fix: fix alpha blending, suboptimal since it doesn't support prelutiplied alpha but its fine for now

Signed-off-by: Schmarni <marnistromer@gmail.com>
This commit is contained in:
Schmarni
2025-08-13 00:18:08 +02:00
committed by Schmarni
parent 65cfa920c9
commit a988d73187
2 changed files with 19 additions and 5 deletions

View File

@@ -2,8 +2,11 @@
use bevy::prelude::*;
use bevy_mod_openxr::{
add_xr_plugins, features::overlay::OxrOverlaySessionEvent, init::OxrInitPlugin,
resources::OxrSessionConfig, types::OxrExtensions,
add_xr_plugins,
features::overlay::{OxrOverlaySessionEvent, OxrOverlaySettings},
init::OxrInitPlugin,
resources::OxrSessionConfig,
types::OxrExtensions,
};
use openxr::EnvironmentBlendMode;
@@ -18,6 +21,10 @@ fn main() {
},
..OxrInitPlugin::default()
}))
.insert_resource(OxrOverlaySettings {
session_layer_placement: 300,
..Default::default()
})
.insert_resource(OxrSessionConfig {
blend_mode_preference: {
vec![
@@ -82,7 +89,11 @@ fn setup(
// cube
commands.spawn((
Mesh3d(meshes.add(Cuboid::new(1.0, 1.0, 1.0))),
MeshMaterial3d(materials.add(Color::srgb_u8(124, 144, 255))),
MeshMaterial3d(materials.add(StandardMaterial {
base_color: Color::srgba_u8(124, 144, 255, 127),
alpha_mode: AlphaMode::Blend,
..Default::default()
})),
Transform::from_xyz(0.0, 2.5, 0.0),
));
// light

View File

@@ -36,7 +36,10 @@ impl LayerProvider for ProjectionLayer {
Some(Box::new(
CompositionLayerProjection::new()
.layer_flags(CompositionLayerFlags::BLEND_TEXTURE_SOURCE_ALPHA)
.layer_flags(
CompositionLayerFlags::BLEND_TEXTURE_SOURCE_ALPHA
| CompositionLayerFlags::UNPREMULTIPLIED_ALPHA,
)
.space(stage)
.views(&[
CompositionLayerProjectionView::new()
@@ -171,7 +174,7 @@ impl Default for CompositionLayerProjectionView<'_> {
}
}
/// # Safety
/// the header function must return a ref to a valid Composition Layer struct.
/// the header function must return a ref to a valid Composition Layer struct.
/// it has to use `repr(C)` and it has to follow the shape of a Composition Layer struct from the
/// OpenXR specification
pub unsafe trait CompositionLayer<'a> {