UNPKG

@animech-public/playcanvas

Version:
2 lines (1 loc) 1.97 kB
import{extends as e}from"../../../../_virtual/_rollupPluginBabelHelpers.js";import{ReadStream as t}from"../../../core/read-stream.js";import{ADDRESS_CLAMP_TO_EDGE as r,ADDRESS_REPEAT as s}from"../../../platform/graphics/constants.js";import{Texture as a}from"../../../platform/graphics/texture.js";import{Asset as d}from"../../asset/asset.js";import{basisTranscode as o}from"../../handlers/basis.js";import{TextureParser as i}from"./texture.js";const l=166;class n extends i{constructor(e,t){super(),this.maxRetries=0,this.device=t}load(e,t,r){d.fetchArrayBuffer(e.load,((s,a)=>{s?t(s,a):this.parse(a,e,t,r)}),r,this.maxRetries)}open(t,d,o,i={}){const l=new a(o,e({name:t,addressU:d.cubemap?r:s,addressV:d.cubemap?r:s,width:d.width,height:d.height,format:d.format,cubemap:d.cubemap,levels:d.levels},i));return l.upload(),l}parse(e,r,s,a){const d=new t(e),i=[d.readU32be(),d.readU32be(),d.readU32be()];if(2873840728!==i[0]||540160187!==i[1]||218765834!==i[2])return null;const n={vkFormat:d.readU32(),typeSize:d.readU32(),pixelWidth:d.readU32(),pixelHeight:d.readU32(),pixelDepth:d.readU32(),layerCount:d.readU32(),faceCount:d.readU32(),levelCount:d.readU32(),supercompressionScheme:d.readU32()},p={dfdByteOffset:d.readU32(),dfdByteLength:d.readU32(),kvdByteOffset:d.readU32(),kvdByteLength:d.readU32(),sgdByteOffset:d.readU64(),sgdByteLength:d.readU64()},f=[];for(let e=0;e<Math.max(1,n.levelCount);++e)f.push({byteOffset:d.readU64(),byteLength:d.readU64(),uncompressedByteLength:d.readU64()});if(d.readU32()!==p.kvdByteOffset-p.dfdByteOffset)return null;d.skip(8);const m=d.readU8();if(d.skip(p.dfdByteLength-9),d.skip(p.kvdByteLength),1===n.supercompressionScheme||m===l){var u;o(this.device,r.load,e,s,{isGGGR:!!(8&(null==a||null==(u=a.file)||null==(u=u.variants)||null==(u=u.basis)?void 0:u.opt)),isKTX2:!0})||s(`Basis module not found. Asset "${a.name}" basis texture variant will not be loaded.`)}else s("unsupported KTX2 pixel format")}}export{n as Ktx2Parser};