Add VideoFrame to ExternalImageSource enum (#6170)

This commit is contained in:
Jan Procházka 2024-08-27 20:05:45 +02:00 committed by GitHub
parent 690a3fb3fb
commit 5deaef3b67
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 42 additions and 0 deletions

View File

@ -90,6 +90,7 @@ By @teoxoy [#6134](https://github.com/gfx-rs/wgpu/pull/6134).
- Deduplicate bind group layouts that are created from pipelines with "auto" layouts. By @teoxoy [#6049](https://github.com/gfx-rs/wgpu/pull/6049)
- Fix crash when dropping the surface after the device. By @wumpf in [#6052](https://github.com/gfx-rs/wgpu/pull/6052)
- Fix error message that is thrown in create_render_pass to no longer say `compute_pass`. By @matthew-wong1 [#6041](https://github.com/gfx-rs/wgpu/pull/6041)
- Add `VideoFrame` to `ExternalImageSource` enum. By @jprochazk in [#6170](https://github.com/gfx-rs/wgpu/pull/6170)
#### GLES / OpenGL

View File

@ -502,6 +502,22 @@ impl super::Queue {
v,
);
},
#[cfg(web_sys_unstable_apis)]
wgt::ExternalImageSource::VideoFrame(ref v) => unsafe {
gl.tex_sub_image_3d_with_video_frame(
dst_target,
copy.dst_base.mip_level as i32,
copy.dst_base.origin.x as i32,
copy.dst_base.origin.y as i32,
z_offset as i32,
copy.size.width as i32,
copy.size.height as i32,
copy.size.depth as i32,
format_desc.external,
format_desc.data_type,
v,
)
},
wgt::ExternalImageSource::ImageData(ref i) => unsafe {
gl.tex_sub_image_3d_with_image_data(
dst_target,
@ -577,6 +593,20 @@ impl super::Queue {
v,
)
},
#[cfg(web_sys_unstable_apis)]
wgt::ExternalImageSource::VideoFrame(ref v) => unsafe {
gl.tex_sub_image_2d_with_video_frame_and_width_and_height(
dst_target,
copy.dst_base.mip_level as i32,
copy.dst_base.origin.x as i32,
copy.dst_base.origin.y as i32,
copy.size.width as i32,
copy.size.height as i32,
format_desc.external,
format_desc.data_type,
v,
)
},
wgt::ExternalImageSource::ImageData(ref i) => unsafe {
gl.tex_sub_image_2d_with_image_data_and_width_and_height(
dst_target,

View File

@ -43,9 +43,11 @@ js-sys.workspace = true
web-sys = { workspace = true, features = [
"ImageBitmap",
"ImageData",
"HtmlImageElement",
"HtmlVideoElement",
"HtmlCanvasElement",
"OffscreenCanvas",
"VideoFrame",
] }
[dev-dependencies]

View File

@ -6871,6 +6871,9 @@ pub enum ExternalImageSource {
///
/// Requires [`DownlevelFlags::UNRESTRICTED_EXTERNAL_TEXTURE_COPIES`]
OffscreenCanvas(web_sys::OffscreenCanvas),
/// Copy from a video frame.
#[cfg(web_sys_unstable_apis)]
VideoFrame(web_sys::VideoFrame),
}
#[cfg(target_arch = "wasm32")]
@ -6884,6 +6887,8 @@ impl ExternalImageSource {
ExternalImageSource::ImageData(i) => i.width(),
ExternalImageSource::HTMLCanvasElement(c) => c.width(),
ExternalImageSource::OffscreenCanvas(c) => c.width(),
#[cfg(web_sys_unstable_apis)]
ExternalImageSource::VideoFrame(v) => v.display_width(),
}
}
@ -6896,6 +6901,8 @@ impl ExternalImageSource {
ExternalImageSource::ImageData(i) => i.height(),
ExternalImageSource::HTMLCanvasElement(c) => c.height(),
ExternalImageSource::OffscreenCanvas(c) => c.height(),
#[cfg(web_sys_unstable_apis)]
ExternalImageSource::VideoFrame(v) => v.display_height(),
}
}
}
@ -6912,6 +6919,8 @@ impl std::ops::Deref for ExternalImageSource {
Self::ImageData(i) => i,
Self::HTMLCanvasElement(c) => c,
Self::OffscreenCanvas(c) => c,
#[cfg(web_sys_unstable_apis)]
Self::VideoFrame(v) => v,
}
}
}