@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.56 kB
JavaScript
import{C as e,ag as t,e as r,bU as a,L as o,c as n}from"./index-Bw2N6w1y.esm.min.js";import"./abstractEngine.cubeTexture-DJ9DQfTr.esm.min.js";const f=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]&f&&(o=Math.max(1,r[7]));const n=r[21],s=n===u?a[32]:0;let E=e.TEXTURETYPE_UNSIGNED_BYTE;switch(n){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:n===A||n===T||n===i,dxgiFormat:s,textureType:E}}static _GetHalfFloatAsFloatRGBAArrayBuffer(e,r,a,o,n,f){const l=new Float32Array(o),s=new Uint16Array(n,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]=f:l[A+3]=t(s[o+3]),A+=4}return l}static _GetHalfFloatRGBAArrayBuffer(e,t,a,o,n,f){if(E.StoreLODInAlphaChannel){const l=new Uint16Array(o),s=new Uint16Array(n,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(f),A+=4}return l}return new Uint16Array(n,a,o)}static _GetFloatRGBAArrayBuffer(e,t,r,a,o,n){if(E.StoreLODInAlphaChannel){const f=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);f[s]=l[a],f[s+1]=l[a+1],f[s+2]=l[a+2],f[s+3]=n,s+=4}return f}return new Float32Array(o,r,a)}static _GetFloatAsHalfFloatRGBAArrayBuffer(e,t,a,o,n,f){const l=new Uint16Array(o),s=new Float32Array(n,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(f):l[A+3]=r(s[A+3]),A+=4;return l}static _GetFloatAsUIntRGBAArrayBuffer(e,t,r,o,n,f){const l=new Uint8Array(o),s=new Float32Array(n,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]=f:l[A+3]=255*a(s[o+3]),A+=4}return l}static _GetHalfFloatAsUIntRGBAArrayBuffer(e,r,o,n,f,l){const s=new Uint8Array(n),A=new Uint16Array(f,o);let T=0;for(let o=0;o<r;o++)for(let r=0;r<e;r++){const n=4*(r+o*e);s[T]=255*a(t(A[n])),s[T+1]=255*a(t(A[n+1])),s[T+2]=255*a(t(A[n+2])),E.StoreLODInAlphaChannel?s[T+3]=l:s[T+3]=255*a(t(A[n+3])),T+=4}return s}static _GetRGBAArrayBuffer(e,t,r,a,o,n,f,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+n],A[i+1]=T[a+f],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,n,f,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+n],s[T+1]=A[a+f],s[T+2]=A[a+l],T+=3}return s}static _GetLuminanceArrayBuffer(e,t,r,a,o){const n=new Uint8Array(a),f=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;n[l]=f[a],l++}return n}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 X=G[22];d=G[1]+4;let S=!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:S=!0,X=64;break;case 116:S=!0,X=128;break;case u:{d+=20;let e=!1;switch(l.dxgiFormat){case 10:S=!0,X=64,e=!0;break;case 2:S=!0,X=128,e=!0;break;case 88:l.isRGB=!0,l.isFourCC=!1,X=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]),Y=E._ExtractLongWordOrder(G[25]),P=E._ExtractLongWordOrder(G[26]);S&&(D=t._getRGBABufferInternalSizedFormat(l.textureType)),m=1,G[2]&f&&!1!==s&&(m=Math.max(1,G[7]));const g=y||0,M=t.getCaps();for(let o=g;o<c;o++){for(p=G[4],b=G[3],C=0;C<m;++C){if(-1===_||_===C){const n=-1===_?C:0;if(!l.isCompressed&&l.isFourCC){r.format=e.TEXTUREFORMAT_RGBA,h=p*b*4;let f=null;if(t._badOS||t._badDesktopOS||!M.textureHalfFloat&&!M.textureFloat)128===X?(f=E._GetFloatAsUIntRGBAArrayBuffer(p,b,a.byteOffset+d,h,a.buffer,n),R&&0==n&&R.push(E._GetFloatRGBAArrayBuffer(p,b,a.byteOffset+d,h,a.buffer,n))):64===X&&(f=E._GetHalfFloatAsUIntRGBAArrayBuffer(p,b,a.byteOffset+d,h,a.buffer,n),R&&0==n&&R.push(E._GetHalfFloatAsFloatRGBAArrayBuffer(p,b,a.byteOffset+d,h,a.buffer,n))),r.type=e.TEXTURETYPE_UNSIGNED_BYTE;else{const t=M.textureFloat&&(F&&M.textureFloatLinearFiltering||!F),o=M.textureHalfFloat&&(F&&M.textureHalfFloatLinearFiltering||!F),l=(128===X||64===X&&!o)&&t?e.TEXTURETYPE_FLOAT:(64===X||128===X&&!t)&&o?e.TEXTURETYPE_HALF_FLOAT:e.TEXTURETYPE_UNSIGNED_BYTE;let s,A=null;if(128===X)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,f=s(p,b,a.byteOffset+d,h,a.buffer,n),R&&0==n&&R.push(A?A(p,b,a.byteOffset+d,h,a.buffer,n):f)}f&&t._uploadDataToTextureDirectly(r,f,o,n)}else if(l.isRGB)r.type=e.TEXTURETYPE_UNSIGNED_BYTE,24===X?(r.format=e.TEXTUREFORMAT_RGB,h=p*b*3,O=E._GetRGBArrayBuffer(p,b,a.byteOffset+d,h,a.buffer,x,I,Y),t._uploadDataToTextureDirectly(r,O,o,n)):(r.format=e.TEXTUREFORMAT_RGBA,h=p*b*4,O=E._GetRGBAArrayBuffer(p,b,a.byteOffset+d,h,a.buffer,x,I,Y,P),t._uploadDataToTextureDirectly(r,O,o,n));else if(l.isLuminance){const f=t._getUnpackAlignement(),l=p;h=Math.floor((p+f-1)/f)*f*(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,n)}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,n)}d+=X?p*b*(X/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=n.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 DDSTools};
//# sourceMappingURL=dds-DEGY607q.esm.min.js.map