123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- /**
- * @author mrdoob / http://mrdoob.com/
- */
- function WebGLExtensions( gl ) {
- var extensions = {};
- var isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext );
- return {
- get: function ( name ) {
- if ( extensions[ name ] !== undefined ) {
- return extensions[ name ];
- }
- var extension;
- switch ( name ) {
- case 'WEBGL_depth_texture':
- if ( isWebGL2 ) {
- extension = gl;
- } else {
- 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;
- case 'WEBGL_compressed_texture_etc1':
- extension = gl.getExtension( 'WEBGL_compressed_texture_etc1' );
- break;
- default:
- if ( isWebGL2 &&
- [ 'ANGLE_instanced_arrays',
- 'OES_texture_float',
- 'OES_texture_half_float',
- 'OES_texture_half_float_linear',
- 'OES_element_index_uint',
- 'OES_standard_derivatives',
- 'EXT_frag_depth',
- 'EXT_shader_texture_lod',
- 'EXT_blend_minmax',
- 'WEBGL_draw_buffers' ].indexOf( name ) >= 0 ) {
- extension = gl;
- } else {
- extension = gl.getExtension( name );
- }
- }
- if ( extension === null ) {
- console.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );
- }
- extensions[ name ] = extension;
- return extension;
- }
- };
- }
- export { WebGLExtensions };
|