web api instance method
GPUDevice: importExternalTexture() method
Secure contextAvailable in workers
The importExternalTexture() method of the
GPUDevice interface takes an HTMLVideoElement or a VideoFrame object as an input and returns a GPUExternalTexture wrapper object containing a snapshot of the video that can be used as a frame in GPU rendering operations.
Syntax
importExternalTexture(descriptor)
Parameters
descriptor- : An object containing the following properties:
colorSpaceOptional- : An enumerated value specifying the color space to use for the video frame. Possible values are
"srgb"and"display-p3". If omitted,colorSpacedefaults to"srgb".
- : An enumerated value specifying the color space to use for the video frame. Possible values are
labelOptional- : A string providing a label that can be used to identify the object, for example in
GPUErrormessages or console warnings.
- : A string providing a label that can be used to identify the object, for example in
source- : The
HTMLVideoElementorVideoFramesource of the video snapshot.
- : The
- : An object containing the following properties:
Return value
A GPUExternalTexture object instance.
Note that the moment when the GPUExternalTexture object expires (is destroyed) depends on what its source is:
GPUExternalTextureobjects with anHTMLVideoElementsource expire as soon as they are used (for example in a bind group).GPUExternalTextureobjects with aVideoFramesource expire only when theVideoFrameis closed, for example via aclose()call.
Validation
The following criteria must be met when calling importExternalTexture(), otherwise a GPUValidationError is generated and an invalid GPUExternalTexture object is returned:
- The video snapshot is usable (e.g., the video source is loaded properly, and doesn’t have a width or height of 0).
Exceptions
SecurityErrorDOMException- : Thrown if the video source data is cross-origin.
Examples
In the WebGPU samples Video Uploading sample, an importExternalTexture() call is used as the value of a bind group entry resource, specified when creating a GPUBindGroup via a createBindGroup() call:
// …
const uniformBindGroup = device.createBindGroup({
layout: pipeline.getBindGroupLayout(0),
entries: [
{
binding: 1,
resource: sampler,
},
{
binding: 2,
resource: device.importExternalTexture({
source: video,
}),
},
],
});
// …
Specifications
Browser compatibility
See also
- The WebGPU API