UNPKG

@openhps/core

Version:

Open Hybrid Positioning System - Core component

85 lines (81 loc) 2.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.VideoTexture = void 0; var _constants = require("../constants.js"); var _Texture = require("./Texture.js"); /** * A texture for use with a video. * * ```js * // assuming you have created a HTML video element with id="video" * const video = document.getElementById( 'video' ); * const texture = new THREE.VideoTexture( video ); * ``` * * Note: After the initial use of a texture, its dimensions, format, and type * cannot be changed. Instead, call {@link Texture#dispose} on the texture and instantiate a new one. * * @augments Texture */ class VideoTexture extends _Texture.Texture { /** * Constructs a new video texture. * * @param {Video} video - The video element to use as a data source for the texture. * @param {number} [mapping=Texture.DEFAULT_MAPPING] - The texture mapping. * @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value. * @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value. * @param {number} [magFilter=LinearFilter] - The mag filter value. * @param {number} [minFilter=LinearFilter] - The min filter value. * @param {number} [format=RGBAFormat] - The texture format. * @param {number} [type=UnsignedByteType] - The texture type. * @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value. */ constructor(video, mapping, wrapS, wrapT, magFilter = _constants.LinearFilter, minFilter = _constants.LinearFilter, format, type, anisotropy) { super(video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy); /** * This flag can be used for type testing. * * @type {boolean} * @readonly * @default true */ this.isVideoTexture = true; /** * Whether to generate mipmaps (if possible) for a texture. * * Overwritten and set to `false` by default. * * @type {boolean} * @default false */ this.generateMipmaps = false; const scope = this; function updateVideo() { scope.needsUpdate = true; video.requestVideoFrameCallback(updateVideo); } if ('requestVideoFrameCallback' in video) { video.requestVideoFrameCallback(updateVideo); } } clone() { return new this.constructor(this.image).copy(this); } /** * This method is called automatically by the renderer and sets {@link Texture#needsUpdate} * to `true` every time a new frame is available. * * Only relevant if `requestVideoFrameCallback` is not supported in the browser. */ update() { const video = this.image; const hasVideoFrameCallback = ('requestVideoFrameCallback' in video); if (hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA) { this.needsUpdate = true; } } } exports.VideoTexture = VideoTexture;