diff --git a/Cargo.toml b/Cargo.toml index 0793e7f..291e565 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,7 +39,7 @@ wasm-bindgen = "~0.2" slotmap = "1" [target.'cfg(target_arch = "wasm32")'.dependencies.web_sys] -version = "~0.3.37" +version = "~0.3.58" package = "web-sys" features = [ "Document", @@ -93,6 +93,7 @@ features = [ "WebglDepthTexture", "WebglDrawBuffers", "WebglLoseContext", + "OvrMultiview2", ] [workspace] diff --git a/src/web_sys.rs b/src/web_sys.rs index 702794e..fd1ebde 100644 --- a/src/web_sys.rs +++ b/src/web_sys.rs @@ -41,7 +41,7 @@ struct Extensions { pub oes_texture_half_float: Option, pub oes_texture_half_float_linear: Option, pub oes_vertex_array_object: Option, - pub ovr_multiview2: Option<()>, + pub ovr_multiview2: Option, pub webgl_color_buffer_float: Option, pub webgl_compressed_texture_astc: Option, pub webgl_compressed_texture_etc: Option, @@ -182,7 +182,7 @@ macro_rules! build_extensions { &$context, "OES_vertex_array_object", ), - ovr_multiview2: get_extension_no_object(&$context, "OVR_multiview2"), + ovr_multiview2: get_extension::(&$context, "OVR_multiview2"), webgl_color_buffer_float: get_extension::( &$context, "WEBGL_color_buffer_float", @@ -707,6 +707,36 @@ impl Context { } } + pub unsafe fn framebuffer_texture_multiview_ovr( + &self, + target: u32, + attachment: u32, + texture: Option<::Texture>, + level: i32, + base_view_index: i32, + num_views: i32, + ) { + let textures = self.textures.borrow(); + let raw_texture = texture.map(|t| textures.get_unchecked(t)); + match self.raw { + RawRenderingContext::WebGl1(ref _gl) => { + panic!("OVR_multiview2 is not supported in WebGL1") + } + RawRenderingContext::WebGl2(ref _gl) => { + if let Some(ext) = &self.extensions.ovr_multiview2 { + ext.framebuffer_texture_multiview_ovr( + target, + attachment, + raw_texture, + level, + base_view_index, + num_views, + ); + } + } + } + } + pub unsafe fn bind_external_framebuffer(&self, target: u32, framebuffer: &WebGlFramebuffer) { match self.raw { RawRenderingContext::WebGl1(ref gl) => gl.bind_framebuffer(target, Some(framebuffer)),