BinaryTextureLoader.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import { LinearFilter, LinearMipMapLinearFilter, ClampToEdgeWrapping } from '../constants';
  2. import { FileLoader } from './FileLoader';
  3. import { DataTexture } from '../textures/DataTexture';
  4. import { DefaultLoadingManager } from './LoadingManager';
  5. /**
  6. * @author Nikos M. / https://github.com/foo123/
  7. *
  8. * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)
  9. */
  10. var DataTextureLoader = BinaryTextureLoader;
  11. function BinaryTextureLoader( manager ) {
  12. this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;
  13. // override in sub classes
  14. this._parser = null;
  15. }
  16. Object.assign( BinaryTextureLoader.prototype, {
  17. load: function ( url, onLoad, onProgress, onError ) {
  18. var scope = this;
  19. var texture = new DataTexture();
  20. var loader = new FileLoader( this.manager );
  21. loader.setResponseType( 'arraybuffer' );
  22. loader.load( url, function ( buffer ) {
  23. var texData = scope._parser( buffer );
  24. if ( ! texData ) return;
  25. if ( undefined !== texData.image ) {
  26. texture.image = texData.image;
  27. } else if ( undefined !== texData.data ) {
  28. texture.image.width = texData.width;
  29. texture.image.height = texData.height;
  30. texture.image.data = texData.data;
  31. }
  32. texture.wrapS = undefined !== texData.wrapS ? texData.wrapS : ClampToEdgeWrapping;
  33. texture.wrapT = undefined !== texData.wrapT ? texData.wrapT : ClampToEdgeWrapping;
  34. texture.magFilter = undefined !== texData.magFilter ? texData.magFilter : LinearFilter;
  35. texture.minFilter = undefined !== texData.minFilter ? texData.minFilter : LinearMipMapLinearFilter;
  36. texture.anisotropy = undefined !== texData.anisotropy ? texData.anisotropy : 1;
  37. if ( undefined !== texData.format ) {
  38. texture.format = texData.format;
  39. }
  40. if ( undefined !== texData.type ) {
  41. texture.type = texData.type;
  42. }
  43. if ( undefined !== texData.mipmaps ) {
  44. texture.mipmaps = texData.mipmaps;
  45. }
  46. if ( 1 === texData.mipmapCount ) {
  47. texture.minFilter = LinearFilter;
  48. }
  49. texture.needsUpdate = true;
  50. if ( onLoad ) onLoad( texture, texData );
  51. }, onProgress, onError );
  52. return texture;
  53. }
  54. } );
  55. export { BinaryTextureLoader, DataTextureLoader };