Buckets:
| import { LinearFilter } from '../constants.js'; | |
| import { Texture } from './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 { | |
| /** | |
| * Constructs a new video texture. | |
| * | |
| * @param {HTMLVideoElement} 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 = LinearFilter, minFilter = 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; | |
| } | |
| } | |
| } | |
| export { VideoTexture }; | |
Xet Storage Details
- Size:
- 2.68 kB
- Xet hash:
- 4414b0a7550c445f2ba9221d2ea72af272f22b1dd3d2baf340024a347588997c
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.