WebGLExtensions.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /**
  2. * @author mrdoob / http://mrdoob.com/
  3. */
  4. function WebGLExtensions( gl ) {
  5. var extensions = {};
  6. var isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext );
  7. return {
  8. get: function ( name ) {
  9. if ( extensions[ name ] !== undefined ) {
  10. return extensions[ name ];
  11. }
  12. var extension;
  13. switch ( name ) {
  14. case 'WEBGL_depth_texture':
  15. if ( isWebGL2 ) {
  16. extension = gl;
  17. } else {
  18. extension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );
  19. }
  20. break;
  21. case 'EXT_texture_filter_anisotropic':
  22. extension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );
  23. break;
  24. case 'WEBGL_compressed_texture_s3tc':
  25. extension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );
  26. break;
  27. case 'WEBGL_compressed_texture_pvrtc':
  28. extension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );
  29. break;
  30. case 'WEBGL_compressed_texture_etc1':
  31. extension = gl.getExtension( 'WEBGL_compressed_texture_etc1' );
  32. break;
  33. default:
  34. if ( isWebGL2 &&
  35. [ 'ANGLE_instanced_arrays',
  36. 'OES_texture_float',
  37. 'OES_texture_half_float',
  38. 'OES_texture_half_float_linear',
  39. 'OES_element_index_uint',
  40. 'OES_standard_derivatives',
  41. 'EXT_frag_depth',
  42. 'EXT_shader_texture_lod',
  43. 'EXT_blend_minmax',
  44. 'WEBGL_draw_buffers' ].indexOf( name ) >= 0 ) {
  45. extension = gl;
  46. } else {
  47. extension = gl.getExtension( name );
  48. }
  49. }
  50. if ( extension === null ) {
  51. console.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );
  52. }
  53. extensions[ name ] = extension;
  54. return extension;
  55. }
  56. };
  57. }
  58. export { WebGLExtensions };