files/en-us/web/api/gpudevice/importexternaltexture/index.md
{{APIRef("WebGPU API")}}{{SecureContext_Header}}{{AvailableInWorkers}}
The importExternalTexture() method of the
{{domxref("GPUDevice")}} interface takes an {{domxref("HTMLVideoElement")}} or a {{domxref("VideoFrame")}} object as an input and returns a {{domxref("GPUExternalTexture")}} wrapper object containing a snapshot of the video that can be used as a frame in GPU rendering operations.
importExternalTexture(descriptor)
descriptor
colorSpace {{optional_inline}}
"srgb" and "display-p3". If omitted, colorSpace defaults to "srgb".label {{optional_inline}}
source
A {{domxref("GPUExternalTexture")}} object instance.
Note that the moment when the {{domxref("GPUExternalTexture")}} object expires (is destroyed) depends on what its source is:
VideoFrame is closed, for example via a {{domxref("VideoFrame.close()")}} call.The following criteria must be met when calling importExternalTexture(), otherwise a {{domxref("GPUValidationError")}} is generated and an invalid {{domxref("GPUExternalTexture")}} object is returned:
SecurityError {{domxref("DOMException")}}
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 {{domxref("GPUBindGroup")}} via a {{domxref("GPUDevice.createBindGroup()")}} call:
// …
const uniformBindGroup = device.createBindGroup({
layout: pipeline.getBindGroupLayout(0),
entries: [
{
binding: 1,
resource: sampler,
},
{
binding: 2,
resource: device.importExternalTexture({
source: video,
}),
},
],
});
// …
{{Specifications}}
{{Compat}}