@babylonjs/viewer
Version:
The Babylon Viewer aims to simplify a specific but common Babylon.js use case: loading, viewing, and interacting with a 3D model.
3 lines (2 loc) • 7.57 kB
JavaScript
import{C as e,aS as t,aT as r,j as a,y as o}from"./index-BPURObVq.esm.min.js";import{C as f}from"./cubemapToSphericalPolynomial-PoSb7sAl.esm.min.js";const n=131072,l=131072;function s(e){return e.charCodeAt(0)+(e.charCodeAt(1)<<8)+(e.charCodeAt(2)<<16)+(e.charCodeAt(3)<<24)}const A=s("DXT1"),T=s("DXT3"),i=s("DXT5"),u=s("DX10");class E{static GetDDSInfo(t){const r=new Int32Array(t.buffer,t.byteOffset,31),a=new Int32Array(t.buffer,t.byteOffset,35);let o=1;r[2]&n&&(o=Math.max(1,r[7]));const f=r[21],s=f===u?a[32]:0;let E=e.TEXTURETYPE_UNSIGNED_BYTE;switch(f){case 113:E=e.TEXTURETYPE_HALF_FLOAT;break;case 116:E=e.TEXTURETYPE_FLOAT;break;case u:if(10===s){E=e.TEXTURETYPE_HALF_FLOAT;break}if(2===s){E=e.TEXTURETYPE_FLOAT;break}}return{width:r[4],height:r[3],mipmapCount:o,isFourCC:!(4&~r[20]),isRGB:!(64&~r[20]),isLuminance:(r[20]&l)===l,isCube:!(512&~r[28]),isCompressed:f===A||f===T||f===i,dxgiFormat:s,textureType:E}}static _GetHalfFloatAsFloatRGBAArrayBuffer(e,r,a,o,f,n){const l=new Float32Array(o),s=new Uint16Array(f,a);let A=0;for(let a=0;a<r;a++)for(let r=0;r<e;r++){const o=4*(r+a*e);l[A]=t(s[o]),l[A+1]=t(s[o+1]),l[A+2]=t(s[o+2]),E.StoreLODInAlphaChannel?l[A+3]=n:l[A+3]=t(s[o+3]),A+=4}return l}static _GetHalfFloatRGBAArrayBuffer(e,t,a,o,f,n){if(E.StoreLODInAlphaChannel){const l=new Uint16Array(o),s=new Uint16Array(f,a);let A=0;for(let a=0;a<t;a++)for(let t=0;t<e;t++){const o=4*(t+a*e);l[A]=s[o],l[A+1]=s[o+1],l[A+2]=s[o+2],l[A+3]=r(n),A+=4}return l}return new Uint16Array(f,a,o)}static _GetFloatRGBAArrayBuffer(e,t,r,a,o,f){if(E.StoreLODInAlphaChannel){const n=new Float32Array(a),l=new Float32Array(o,r);let s=0;for(let r=0;r<t;r++)for(let t=0;t<e;t++){const a=4*(t+r*e);n[s]=l[a],n[s+1]=l[a+1],n[s+2]=l[a+2],n[s+3]=f,s+=4}return n}return new Float32Array(o,r,a)}static _GetFloatAsHalfFloatRGBAArrayBuffer(e,t,a,o,f,n){const l=new Uint16Array(o),s=new Float32Array(f,a);let A=0;for(let a=0;a<t;a++)for(let t=0;t<e;t++)l[A]=r(s[A]),l[A+1]=r(s[A+1]),l[A+2]=r(s[A+2]),E.StoreLODInAlphaChannel?l[A+3]=r(n):l[A+3]=r(s[A+3]),A+=4;return l}static _GetFloatAsUIntRGBAArrayBuffer(e,t,r,o,f,n){const l=new Uint8Array(o),s=new Float32Array(f,r);let A=0;for(let r=0;r<t;r++)for(let t=0;t<e;t++){const o=4*(t+r*e);l[A]=255*a(s[o]),l[A+1]=255*a(s[o+1]),l[A+2]=255*a(s[o+2]),E.StoreLODInAlphaChannel?l[A+3]=n:l[A+3]=255*a(s[o+3]),A+=4}return l}static _GetHalfFloatAsUIntRGBAArrayBuffer(e,r,o,f,n,l){const s=new Uint8Array(f),A=new Uint16Array(n,o);let T=0;for(let o=0;o<r;o++)for(let r=0;r<e;r++){const f=4*(r+o*e);s[T]=255*a(t(A[f])),s[T+1]=255*a(t(A[f+1])),s[T+2]=255*a(t(A[f+2])),E.StoreLODInAlphaChannel?s[T+3]=l:s[T+3]=255*a(t(A[f+3])),T+=4}return s}static _GetRGBAArrayBuffer(e,t,r,a,o,f,n,l,s){const A=new Uint8Array(a),T=new Uint8Array(o,r);let i=0;for(let r=0;r<t;r++)for(let t=0;t<e;t++){const a=4*(t+r*e);A[i]=T[a+f],A[i+1]=T[a+n],A[i+2]=T[a+l],A[i+3]=T[a+s],i+=4}return A}static _ExtractLongWordOrder(e){return 0===e||255===e||-16777216===e?0:1+E._ExtractLongWordOrder(e>>8)}static _GetRGBArrayBuffer(e,t,r,a,o,f,n,l){const s=new Uint8Array(a),A=new Uint8Array(o,r);let T=0;for(let r=0;r<t;r++)for(let t=0;t<e;t++){const a=3*(t+r*e);s[T]=A[a+f],s[T+1]=A[a+n],s[T+2]=A[a+l],T+=3}return s}static _GetLuminanceArrayBuffer(e,t,r,a,o){const f=new Uint8Array(a),n=new Uint8Array(o,r);let l=0;for(let r=0;r<t;r++)for(let t=0;t<e;t++){const a=t+r*e;f[l]=n[a],l++}return f}static UploadDDSLevels(t,r,a,l,s,c,_=-1,y,F=!0){let R=null;l.sphericalPolynomial&&(R=[]);const B=!!t.getCaps().s3tc;r.generateMipMaps=s;const G=new Int32Array(a.buffer,a.byteOffset,31);let U,p,b,d,O,m,C,h=0,D=0,L=1;if(542327876!==G[0])return void o.Error("Invalid magic number in DDS header");if(!l.isFourCC&&!l.isRGB&&!l.isLuminance)return void o.Error("Unsupported format, must contain a FourCC, RGB or LUMINANCE code");if(l.isCompressed&&!B)return void o.Error("Compressed textures are not supported on this platform.");let S=G[22];d=G[1]+4;let X=!1;if(l.isFourCC)switch(U=G[21],U){case A:L=8,D=e.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT1;break;case T:L=16,D=e.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT3;break;case i:L=16,D=e.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT5;break;case 113:X=!0,S=64;break;case 116:X=!0,S=128;break;case u:{d+=20;let e=!1;switch(l.dxgiFormat){case 10:X=!0,S=64,e=!0;break;case 2:X=!0,S=128,e=!0;break;case 88:l.isRGB=!0,l.isFourCC=!1,S=32,e=!0}if(e)break}default:return void o.Error(["Unsupported FourCC code:",(w=U,String.fromCharCode(255&w,w>>8&255,w>>16&255,w>>24&255))])}var w;const x=E._ExtractLongWordOrder(G[23]),I=E._ExtractLongWordOrder(G[24]),P=E._ExtractLongWordOrder(G[25]),Y=E._ExtractLongWordOrder(G[26]);X&&(D=t._getRGBABufferInternalSizedFormat(l.textureType)),m=1,G[2]&n&&!1!==s&&(m=Math.max(1,G[7]));const M=y||0,g=t.getCaps();for(let o=M;o<c;o++){for(p=G[4],b=G[3],C=0;C<m;++C){if(-1===_||_===C){const f=-1===_?C:0;if(!l.isCompressed&&l.isFourCC){r.format=e.TEXTUREFORMAT_RGBA,h=p*b*4;let n=null;if(t._badOS||t._badDesktopOS||!g.textureHalfFloat&&!g.textureFloat)128===S?(n=E._GetFloatAsUIntRGBAArrayBuffer(p,b,a.byteOffset+d,h,a.buffer,f),R&&0==f&&R.push(E._GetFloatRGBAArrayBuffer(p,b,a.byteOffset+d,h,a.buffer,f))):64===S&&(n=E._GetHalfFloatAsUIntRGBAArrayBuffer(p,b,a.byteOffset+d,h,a.buffer,f),R&&0==f&&R.push(E._GetHalfFloatAsFloatRGBAArrayBuffer(p,b,a.byteOffset+d,h,a.buffer,f))),r.type=e.TEXTURETYPE_UNSIGNED_BYTE;else{const t=g.textureFloat&&(F&&g.textureFloatLinearFiltering||!F),o=g.textureHalfFloat&&(F&&g.textureHalfFloatLinearFiltering||!F),l=(128===S||64===S&&!o)&&t?e.TEXTURETYPE_FLOAT:(64===S||128===S&&!t)&&o?e.TEXTURETYPE_HALF_FLOAT:e.TEXTURETYPE_UNSIGNED_BYTE;let s,A=null;if(128===S)switch(l){case e.TEXTURETYPE_FLOAT:s=E._GetFloatRGBAArrayBuffer,A=null;break;case e.TEXTURETYPE_HALF_FLOAT:s=E._GetFloatAsHalfFloatRGBAArrayBuffer,A=E._GetFloatRGBAArrayBuffer;break;case e.TEXTURETYPE_UNSIGNED_BYTE:s=E._GetFloatAsUIntRGBAArrayBuffer,A=E._GetFloatRGBAArrayBuffer}else switch(l){case e.TEXTURETYPE_FLOAT:s=E._GetHalfFloatAsFloatRGBAArrayBuffer,A=null;break;case e.TEXTURETYPE_HALF_FLOAT:s=E._GetHalfFloatRGBAArrayBuffer,A=E._GetHalfFloatAsFloatRGBAArrayBuffer;break;case e.TEXTURETYPE_UNSIGNED_BYTE:s=E._GetHalfFloatAsUIntRGBAArrayBuffer,A=E._GetHalfFloatAsFloatRGBAArrayBuffer}r.type=l,n=s(p,b,a.byteOffset+d,h,a.buffer,f),R&&0==f&&R.push(A?A(p,b,a.byteOffset+d,h,a.buffer,f):n)}n&&t._uploadDataToTextureDirectly(r,n,o,f)}else if(l.isRGB)r.type=e.TEXTURETYPE_UNSIGNED_BYTE,24===S?(r.format=e.TEXTUREFORMAT_RGB,h=p*b*3,O=E._GetRGBArrayBuffer(p,b,a.byteOffset+d,h,a.buffer,x,I,P),t._uploadDataToTextureDirectly(r,O,o,f)):(r.format=e.TEXTUREFORMAT_RGBA,h=p*b*4,O=E._GetRGBAArrayBuffer(p,b,a.byteOffset+d,h,a.buffer,x,I,P,Y),t._uploadDataToTextureDirectly(r,O,o,f));else if(l.isLuminance){const n=t._getUnpackAlignement(),l=p;h=Math.floor((p+n-1)/n)*n*(b-1)+l,O=E._GetLuminanceArrayBuffer(p,b,a.byteOffset+d,h,a.buffer),r.format=e.TEXTUREFORMAT_LUMINANCE,r.type=e.TEXTURETYPE_UNSIGNED_BYTE,t._uploadDataToTextureDirectly(r,O,o,f)}else h=Math.max(4,p)/4*Math.max(4,b)/4*L,O=new Uint8Array(a.buffer,a.byteOffset+d,h),r.type=e.TEXTURETYPE_UNSIGNED_BYTE,t._uploadCompressedDataToTextureDirectly(r,D,p,b,O,o,f)}d+=S?p*b*(S/8):h,p*=.5,b*=.5,p=Math.max(1,p),b=Math.max(1,b)}if(void 0!==y)break}R&&R.length>0?l.sphericalPolynomial=f.ConvertCubeMapToSphericalPolynomial({size:G[4],right:R[0],left:R[1],up:R[2],down:R[3],front:R[4],back:R[5],format:e.TEXTUREFORMAT_RGBA,type:e.TEXTURETYPE_FLOAT,gammaSpace:!1}):l.sphericalPolynomial=void 0}}E.StoreLODInAlphaChannel=!1;export{E as D};
//# sourceMappingURL=dds.pure-D6Brsw-m.esm.min.js.map