|
@@ -2,56 +2,88 @@ function WebGLExtensions( gl ) {
|
|
|
|
|
|
const extensions = {};
|
|
const extensions = {};
|
|
|
|
|
|
- return {
|
|
|
|
|
|
+ function getExtension( name ) {
|
|
|
|
|
|
- has: function ( name ) {
|
|
|
|
|
|
+ if ( extensions[ name ] !== undefined ) {
|
|
|
|
+
|
|
|
|
+ return extensions[ name ];
|
|
|
|
|
|
- if ( extensions[ name ] !== undefined ) {
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- return extensions[ name ] !== null;
|
|
|
|
|
|
+ let extension;
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ switch ( name ) {
|
|
|
|
|
|
- let extension;
|
|
|
|
|
|
+ case 'WEBGL_depth_texture':
|
|
|
|
+ extension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );
|
|
|
|
+ break;
|
|
|
|
|
|
- switch ( name ) {
|
|
|
|
|
|
+ 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_depth_texture':
|
|
|
|
- extension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );
|
|
|
|
- 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 '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_pvrtc':
|
|
|
|
+ extension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );
|
|
|
|
+ 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;
|
|
|
|
|
|
+ default:
|
|
|
|
+ extension = gl.getExtension( name );
|
|
|
|
|
|
- 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 ) {
|
|
|
|
|
|
- extensions[ name ] = extension;
|
|
|
|
|
|
+ getExtension( 'EXT_color_buffer_float' );
|
|
|
|
|
|
- return extension !== null;
|
|
|
|
|
|
+ } 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' );
|
|
|
|
|
|
},
|
|
},
|
|
|
|
|
|
get: function ( name ) {
|
|
get: function ( name ) {
|
|
|
|
|
|
- if ( ! this.has( name ) ) {
|
|
|
|
|
|
+ const extension = getExtension( name );
|
|
|
|
+
|
|
|
|
+ if ( extension === null ) {
|
|
|
|
|
|
console.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );
|
|
console.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- return extensions[ name ];
|
|
|
|
|
|
+ return extension;
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|