File size: 2,152 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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
function WebGLExtensions(gl) {
	const extensions = {};

	function getExtension(name) {
		if (extensions[name] !== undefined) {
			return extensions[name];
		}

		let extension;

		switch (name) {
			case 'WEBGL_depth_texture':
				extension =
					gl.getExtension('WEBGL_depth_texture') || gl.getExtension('MOZ_WEBGL_depth_texture') || gl.getExtension('WEBKIT_WEBGL_depth_texture');
				break;

			case 'EXT_texture_filter_anisotropic':
				extension =
					gl.getExtension('EXT_texture_filter_anisotropic') ||
					gl.getExtension('MOZ_EXT_texture_filter_anisotropic') ||
					gl.getExtension('WEBKIT_EXT_texture_filter_anisotropic');
				break;

			case 'WEBGL_compressed_texture_s3tc':
				extension =
					gl.getExtension('WEBGL_compressed_texture_s3tc') ||
					gl.getExtension('MOZ_WEBGL_compressed_texture_s3tc') ||
					gl.getExtension('WEBKIT_WEBGL_compressed_texture_s3tc');
				break;

			case 'WEBGL_compressed_texture_pvrtc':
				extension = gl.getExtension('WEBGL_compressed_texture_pvrtc') || gl.getExtension('WEBKIT_WEBGL_compressed_texture_pvrtc');
				break;

			default:
				extension = gl.getExtension(name);
		}

		extensions[name] = extension;

		return extension;
	}

	return {
		has: function (name) {
			return getExtension(name) !== null;
		},

		init: function (capabilities) {
			if (capabilities.isWebGL2) {
				getExtension('EXT_color_buffer_float');
			} else {
				getExtension('WEBGL_depth_texture');
				getExtension('OES_texture_float');
				getExtension('OES_texture_half_float');
				getExtension('OES_texture_half_float_linear');
				getExtension('OES_standard_derivatives');
				getExtension('OES_element_index_uint');
				getExtension('OES_vertex_array_object');
				getExtension('ANGLE_instanced_arrays');
			}

			getExtension('OES_texture_float_linear');
			getExtension('EXT_color_buffer_half_float');
			getExtension('WEBGL_multisampled_render_to_texture');
		},

		get: function (name) {
			const extension = getExtension(name);

			if (extension === null) {
				console.warn('THREE.WebGLRenderer: ' + name + ' extension not supported.');
			}

			return extension;
		},
	};
}

export { WebGLExtensions };