WebGLExtensions.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. function WebGLExtensions( gl ) {
  2. const extensions = {};
  3. function getExtension( name ) {
  4. if ( extensions[ name ] !== undefined ) {
  5. return extensions[ name ];
  6. }
  7. let extension;
  8. switch ( name ) {
  9. case 'WEBGL_depth_texture':
  10. extension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );
  11. break;
  12. case 'EXT_texture_filter_anisotropic':
  13. extension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );
  14. break;
  15. case 'WEBGL_compressed_texture_s3tc':
  16. extension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );
  17. break;
  18. case 'WEBGL_compressed_texture_pvrtc':
  19. extension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );
  20. break;
  21. default:
  22. extension = gl.getExtension( name );
  23. }
  24. extensions[ name ] = extension;
  25. return extension;
  26. }
  27. return {
  28. has: function ( name ) {
  29. return getExtension( name ) !== null;
  30. },
  31. init: function ( capabilities ) {
  32. if ( capabilities.isWebGL2 ) {
  33. getExtension( 'EXT_color_buffer_float' );
  34. } else {
  35. getExtension( 'WEBGL_depth_texture' );
  36. getExtension( 'OES_texture_float' );
  37. getExtension( 'OES_texture_half_float' );
  38. getExtension( 'OES_texture_half_float_linear' );
  39. getExtension( 'OES_standard_derivatives' );
  40. getExtension( 'OES_element_index_uint' );
  41. getExtension( 'OES_vertex_array_object' );
  42. getExtension( 'ANGLE_instanced_arrays' );
  43. }
  44. getExtension( 'OES_texture_float_linear' );
  45. getExtension( 'EXT_color_buffer_half_float' );
  46. },
  47. get: function ( name ) {
  48. const extension = getExtension( name );
  49. if ( extension === null ) {
  50. console.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );
  51. }
  52. return extension;
  53. }
  54. };
  55. }
  56. export { WebGLExtensions };
粤ICP备19079148号