File size: 1,097 Bytes
2b7aae2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import { LinearFilter } from '../constants.js';
import { Texture } from './Texture.js';

class VideoTexture extends Texture {
	constructor(video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy) {
		super(video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy);

		this.minFilter = minFilter !== undefined ? minFilter : LinearFilter;
		this.magFilter = magFilter !== undefined ? magFilter : LinearFilter;

		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);
	}

	update() {
		const video = this.image;
		const hasVideoFrameCallback = 'requestVideoFrameCallback' in video;

		if (hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA) {
			this.needsUpdate = true;
		}
	}
}

VideoTexture.prototype.isVideoTexture = true;

export { VideoTexture };