DataTextureLoader.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. import { LinearFilter, LinearMipmapLinearFilter, ClampToEdgeWrapping } from '../constants.js';
  2. import { FileLoader } from './FileLoader.js';
  3. import { DataTexture } from '../textures/DataTexture.js';
  4. import { Loader } from './Loader.js';
  5. /**
  6. * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)
  7. *
  8. * Sub classes have to implement the parse() method which will be used in load().
  9. */
  10. class DataTextureLoader extends Loader {
  11. constructor( manager ) {
  12. super( manager );
  13. }
  14. load( url, onLoad, onProgress, onError ) {
  15. const scope = this;
  16. const texture = new DataTexture();
  17. const loader = new FileLoader( this.manager );
  18. loader.setResponseType( 'arraybuffer' );
  19. loader.setRequestHeader( this.requestHeader );
  20. loader.setPath( this.path );
  21. loader.setWithCredentials( scope.withCredentials );
  22. loader.load( url, function ( buffer ) {
  23. let texData;
  24. try {
  25. texData = scope.parse( buffer );
  26. } catch ( error ) {
  27. if ( onError !== undefined ) {
  28. onError( error );
  29. } else {
  30. console.error( error );
  31. return;
  32. }
  33. }
  34. if ( texData.image !== undefined ) {
  35. texture.image = texData.image;
  36. } else if ( texData.data !== undefined ) {
  37. texture.image.width = texData.width;
  38. texture.image.height = texData.height;
  39. texture.image.data = texData.data;
  40. }
  41. texture.wrapS = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping;
  42. texture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping;
  43. texture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter;
  44. texture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter;
  45. texture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1;
  46. if ( texData.colorSpace !== undefined ) {
  47. texture.colorSpace = texData.colorSpace;
  48. }
  49. if ( texData.flipY !== undefined ) {
  50. texture.flipY = texData.flipY;
  51. }
  52. if ( texData.format !== undefined ) {
  53. texture.format = texData.format;
  54. }
  55. if ( texData.type !== undefined ) {
  56. texture.type = texData.type;
  57. }
  58. if ( texData.mipmaps !== undefined ) {
  59. texture.mipmaps = texData.mipmaps;
  60. texture.minFilter = LinearMipmapLinearFilter; // presumably...
  61. }
  62. if ( texData.mipmapCount === 1 ) {
  63. texture.minFilter = LinearFilter;
  64. }
  65. if ( texData.generateMipmaps !== undefined ) {
  66. texture.generateMipmaps = texData.generateMipmaps;
  67. }
  68. texture.needsUpdate = true;
  69. if ( onLoad ) onLoad( texture, texData );
  70. }, onProgress, onError );
  71. return texture;
  72. }
  73. }
  74. export { DataTextureLoader };