@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 2.63 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.33/esri/copyright.txt for details.
*/
import{getBasisTranscoder as e}from"../../../../libs/basisu/BasisUTranscoder.js";import{TextureFormat as t}from"../../../../libs/basisu/TextureFormat.js";import{CompressedTextureFormat as n,PixelFormat as s,TextureSamplingMode as r}from"../../../webgl/enums.js";import{Texture as i}from"../../../webgl/Texture.js";import{getBytesPerElementFormat as a}from"../../../webgl/Util.js";let l=null,o=null;async function g(){return null==o&&(o=e(),l=await o),o}function u(e,t){if(null==l)return e.byteLength;const n=new l.BasisFile(new Uint8Array(e)),s=T(n)?m(n.getNumLevels(0),n.getHasAlpha(),n.getImageWidth(0,0),n.getImageHeight(0,0),t):0;return n.close(),n.delete(),s}function c(e,t){if(null==l)return e.byteLength;const n=new l.KTX2File(new Uint8Array(e)),s=E(n)?m(n.getLevels(),n.getHasAlpha(),n.getWidth(),n.getHeight(),t):0;return n.close(),n.delete(),s}function m(e,t,s,r,i){const l=a(t?n.COMPRESSED_RGBA8_ETC2_EAC:n.COMPRESSED_RGB8_ETC2),o=i&&e>1?(4**e-1)/(3*4**(e-1)):1;return Math.ceil(s*r*l*o)}function T(e){return e.getNumImages()>=1&&!e.isUASTC()}function E(e){return e.getFaces()>=1&&e.isETC1S()}async function h(e,t,n){null==l&&(l=await g());const s=new l.BasisFile(new Uint8Array(n));if(!T(s))return null;s.startTranscoding();const r=p(e,t,s.getNumLevels(0),s.getHasAlpha(),s.getImageWidth(0,0),s.getImageHeight(0,0),((e,t)=>s.getImageTranscodedSizeInBytes(0,e,t)),((e,t,n)=>s.transcodeImage(n,0,e,t,0,0)));return s.close(),s.delete(),r}async function _(e,t,n){null==l&&(l=await g());const s=new l.KTX2File(new Uint8Array(n));if(!E(s))return null;s.startTranscoding();const r=p(e,t,s.getLevels(),s.getHasAlpha(),s.getWidth(),s.getHeight(),((e,t)=>s.getImageTranscodedSizeInBytes(e,0,0,t)),((e,t,n)=>s.transcodeImage(n,e,0,0,t,0,-1,-1)));return s.close(),s.delete(),r}function p(e,a,l,o,g,u,c,m){const{compressedTextureETC:T,compressedTextureS3TC:E}=e.capabilities,[h,_]=T?o?[t.ETC2_RGBA,n.COMPRESSED_RGBA8_ETC2_EAC]:[t.ETC1_RGB,n.COMPRESSED_RGB8_ETC2]:E?o?[t.BC3_RGBA,n.COMPRESSED_RGBA_S3TC_DXT5_EXT]:[t.BC1_RGB,n.COMPRESSED_RGB_S3TC_DXT1_EXT]:[t.RGBA32,s.RGBA],p=a.hasMipmap?l:Math.min(1,l),A=[];for(let t=0;t<p;t++)A.push(new Uint8Array(c(t,h))),m(t,h,A[t]);return a.internalFormat=_,a.hasMipmap=A.length>1,a.samplingMode=a.hasMipmap?r.LINEAR_MIPMAP_LINEAR:r.LINEAR,a.width=g,a.height=u,new i(e,a,{type:"compressed",levels:A})}export{E as checkKTX2,h as createTextureBasis,_ as createTextureKTX2,u as estimateMemoryBasis,c as estimateMemoryKTX2,g as loadBasisTranscoder};