aboutsummaryrefslogtreecommitdiffstats
path: root/components/webxr
diff options
context:
space:
mode:
Diffstat (limited to 'components/webxr')
-rw-r--r--components/webxr/gl_utils.rs23
-rw-r--r--components/webxr/glwindow/mod.rs17
-rw-r--r--components/webxr/openxr/mod.rs15
-rw-r--r--components/webxr/surfman_layer_manager.rs11
4 files changed, 25 insertions, 41 deletions
diff --git a/components/webxr/gl_utils.rs b/components/webxr/gl_utils.rs
index 752a68a45e3..d83a21a996e 100644
--- a/components/webxr/gl_utils.rs
+++ b/components/webxr/gl_utils.rs
@@ -3,7 +3,6 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use std::collections::HashMap;
-use std::num::NonZero;
use glow as gl;
use glow::{Context as Gl, HasContext};
@@ -12,10 +11,6 @@ use webxr_api::{ContextId, GLContexts, LayerId};
use crate::SurfmanGL;
-pub(crate) fn framebuffer(framebuffer: u32) -> Option<gl::NativeFramebuffer> {
- NonZero::new(framebuffer).map(gl::NativeFramebuffer)
-}
-
// A utility to clear a color texture and optional depth/stencil texture
pub(crate) struct GlClearer {
fbos: HashMap<
@@ -52,10 +47,9 @@ impl GlClearer {
.entry((layer_id, color, depth_stencil))
.or_insert_with(|| {
// Save the current GL state
- let mut bound_fbos = [0, 0];
unsafe {
- gl.get_parameter_i32_slice(gl::DRAW_FRAMEBUFFER_BINDING, &mut bound_fbos[0..]);
- gl.get_parameter_i32_slice(gl::READ_FRAMEBUFFER_BINDING, &mut bound_fbos[1..]);
+ let draw_fbo = gl.get_parameter_framebuffer(gl::DRAW_FRAMEBUFFER_BINDING);
+ let read_fbo = gl.get_parameter_framebuffer(gl::READ_FRAMEBUFFER_BINDING);
// Generate and set attachments of a new FBO
let fbo = gl.create_framebuffer().ok();
@@ -83,8 +77,8 @@ impl GlClearer {
}
// Restore the GL state
- gl.bind_framebuffer(gl::DRAW_FRAMEBUFFER, framebuffer(bound_fbos[0] as _));
- gl.bind_framebuffer(gl::READ_FRAMEBUFFER, framebuffer(bound_fbos[1] as _));
+ gl.bind_framebuffer(gl::DRAW_FRAMEBUFFER, draw_fbo);
+ gl.bind_framebuffer(gl::READ_FRAMEBUFFER, read_fbo);
debug_assert_eq!(gl.get_error(), gl::NO_ERROR);
fbo
@@ -110,7 +104,6 @@ impl GlClearer {
let fbo = self.fbo(gl, layer_id, color, color_target, depth_stencil);
unsafe {
// Save the current GL state
- let mut bound_fbos = [0, 0];
let mut clear_color = [0., 0., 0., 0.];
let mut clear_depth = [0.];
let mut clear_stencil = [0];
@@ -118,8 +111,8 @@ impl GlClearer {
let scissor_enabled = gl.is_enabled(gl::SCISSOR_TEST);
let rasterizer_enabled = gl.is_enabled(gl::RASTERIZER_DISCARD);
- gl.get_parameter_i32_slice(gl::DRAW_FRAMEBUFFER_BINDING, &mut bound_fbos[0..]);
- gl.get_parameter_i32_slice(gl::READ_FRAMEBUFFER_BINDING, &mut bound_fbos[1..]);
+ let draw_fbo = gl.get_parameter_framebuffer(gl::DRAW_FRAMEBUFFER_BINDING);
+ let read_fbo = gl.get_parameter_framebuffer(gl::READ_FRAMEBUFFER_BINDING);
gl.get_parameter_f32_slice(gl::COLOR_CLEAR_VALUE, &mut clear_color[..]);
gl.get_parameter_f32_slice(gl::DEPTH_CLEAR_VALUE, &mut clear_depth[..]);
gl.get_parameter_i32_slice(gl::STENCIL_CLEAR_VALUE, &mut clear_stencil[..]);
@@ -140,8 +133,8 @@ impl GlClearer {
gl.clear(gl::COLOR_BUFFER_BIT | gl::DEPTH_BUFFER_BIT | gl::STENCIL_BUFFER_BIT);
// Restore the GL state
- gl.bind_framebuffer(gl::DRAW_FRAMEBUFFER, framebuffer(bound_fbos[0] as _));
- gl.bind_framebuffer(gl::READ_FRAMEBUFFER, framebuffer(bound_fbos[1] as _));
+ gl.bind_framebuffer(gl::DRAW_FRAMEBUFFER, draw_fbo);
+ gl.bind_framebuffer(gl::READ_FRAMEBUFFER, read_fbo);
gl.clear_color(
clear_color[0],
clear_color[1],
diff --git a/components/webxr/glwindow/mod.rs b/components/webxr/glwindow/mod.rs
index a1b9136cd9e..e5389c3dcc1 100644
--- a/components/webxr/glwindow/mod.rs
+++ b/components/webxr/glwindow/mod.rs
@@ -3,7 +3,6 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use core::slice;
-use std::num::NonZeroU32;
use std::rc::Rc;
use euclid::{
@@ -25,7 +24,6 @@ use webxr_api::{
VIEWER,
};
-use crate::gl_utils::framebuffer;
use crate::{SurfmanGL, SurfmanLayerManager};
// How far off the ground are the viewer's eyes?
@@ -222,11 +220,10 @@ impl DeviceAPI for GlWindowDevice {
.device
.context_surface_info(&self.context)
.unwrap()
- .map(|info| info.framebuffer_object)
- .unwrap_or(0);
+ .and_then(|info| info.framebuffer_object);
unsafe {
self.gl
- .bind_framebuffer(gl::FRAMEBUFFER, framebuffer(framebuffer_object));
+ .bind_framebuffer(gl::FRAMEBUFFER, framebuffer_object);
debug_assert_eq!(
(
self.gl.get_error(),
@@ -254,10 +251,9 @@ impl DeviceAPI for GlWindowDevice {
.device
.create_surface_texture(&mut self.context, surface)
.unwrap();
- let raw_texture_id = self.device.surface_texture_object(&surface_texture);
- let texture_id = NonZeroU32::new(raw_texture_id).map(gl::NativeTexture);
+ let texture_id = self.device.surface_texture_object(&surface_texture);
let texture_target = self.device.surface_gl_texture_target();
- log::debug!("Presenting texture {}", raw_texture_id);
+ log::debug!("Presenting texture {:?}", texture_id);
if let Some(ref shader) = self.shader {
shader.draw_texture(
@@ -392,9 +388,8 @@ impl GlWindowDevice {
let framebuffer_object = device
.context_surface_info(&context)
.unwrap()
- .map(|info| info.framebuffer_object)
- .unwrap_or(0);
- gl.bind_framebuffer(gl::FRAMEBUFFER, framebuffer(framebuffer_object));
+ .and_then(|info| info.framebuffer_object);
+ gl.bind_framebuffer(gl::FRAMEBUFFER, framebuffer_object);
debug_assert_eq!(
(gl.get_error(), gl.check_framebuffer_status(gl::FRAMEBUFFER)),
(gl::NO_ERROR, gl::FRAMEBUFFER_COMPLETE)
diff --git a/components/webxr/openxr/mod.rs b/components/webxr/openxr/mod.rs
index 12cb9c3b15e..a772cbbbbe2 100644
--- a/components/webxr/openxr/mod.rs
+++ b/components/webxr/openxr/mod.rs
@@ -3,7 +3,6 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use std::collections::HashMap;
-use std::num::NonZeroU32;
use std::ops::Deref;
use std::sync::{Arc, Mutex};
use std::time::Duration;
@@ -767,15 +766,13 @@ impl LayerManagerAPI<SurfmanGL> for OpenXrLayerManager {
})?;
let color_texture = device.surface_texture_object(color_surface_texture);
let color_target = device.surface_gl_texture_target();
- let depth_stencil_texture = openxr_layer
- .depth_stencil_texture
- .map(|texture| texture.0.get());
+ let depth_stencil_texture = openxr_layer.depth_stencil_texture;
let texture_array_index = None;
let origin = Point2D::new(0, 0);
let texture_size = openxr_layer.size;
let sub_image = Some(SubImage {
- color_texture,
- depth_stencil_texture,
+ color_texture: color_texture.map(|t| t.0),
+ depth_stencil_texture: depth_stencil_texture.map(|t| t.0),
texture_array_index,
viewport: Rect::new(origin, texture_size),
});
@@ -784,8 +781,8 @@ impl LayerManagerAPI<SurfmanGL> for OpenXrLayerManager {
.viewports
.iter()
.map(|&viewport| SubImage {
- color_texture,
- depth_stencil_texture,
+ color_texture: color_texture.map(|t| t.0),
+ depth_stencil_texture: depth_stencil_texture.map(|t| t.0),
texture_array_index,
viewport,
})
@@ -795,7 +792,7 @@ impl LayerManagerAPI<SurfmanGL> for OpenXrLayerManager {
contexts,
context_id,
layer_id,
- NonZeroU32::new(color_texture).map(glow::NativeTexture),
+ color_texture,
color_target,
openxr_layer.depth_stencil_texture,
);
diff --git a/components/webxr/surfman_layer_manager.rs b/components/webxr/surfman_layer_manager.rs
index 5b6f0fdbfaf..39dd37a0de9 100644
--- a/components/webxr/surfman_layer_manager.rs
+++ b/components/webxr/surfman_layer_manager.rs
@@ -5,7 +5,6 @@
//! An implementation of layer management using surfman
use std::collections::HashMap;
-use std::num::NonZeroU32;
use euclid::{Point2D, Rect, Size2D};
use glow::{self as gl, Context as Gl, HasContext, PixelUnpackData};
@@ -165,8 +164,8 @@ impl LayerManagerAPI<SurfmanGL> for SurfmanLayerManager {
let texture_array_index = None;
let origin = Point2D::new(0, 0);
let sub_image = Some(SubImage {
- color_texture,
- depth_stencil_texture: depth_stencil_texture.map(|nt| nt.0.get()),
+ color_texture: color_texture.map(|nt| nt.0),
+ depth_stencil_texture: depth_stencil_texture.map(|nt| nt.0),
texture_array_index,
viewport: Rect::new(origin, surface_size),
});
@@ -175,8 +174,8 @@ impl LayerManagerAPI<SurfmanGL> for SurfmanLayerManager {
.viewports
.iter()
.map(|&viewport| SubImage {
- color_texture,
- depth_stencil_texture: depth_stencil_texture.map(|texture| texture.0.get()),
+ color_texture: color_texture.map(|nt| nt.0),
+ depth_stencil_texture: depth_stencil_texture.map(|texture| texture.0),
texture_array_index,
viewport,
})
@@ -187,7 +186,7 @@ impl LayerManagerAPI<SurfmanGL> for SurfmanLayerManager {
contexts,
context_id,
layer_id,
- NonZeroU32::new(color_texture).map(gl::NativeTexture),
+ color_texture,
color_target,
depth_stencil_texture,
);