BinaryTextureLoader.js 1.9 KB

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