Comparing version 0.0.3 to 0.0.4
@@ -48,3 +48,12 @@ import { KTX2SupercompressionScheme } from './constants'; | ||
levelData: Uint8Array; | ||
/** Uncompressed size of the mip level. */ | ||
/** | ||
* Size of the mip level after reflation from supercompression, if applicable. When | ||
* `supercompressionType` is BASISLZ, `uncompressedByteLength` must be 0. When | ||
* `supercompressionType` is `NONE`, `uncompressedByteLength` must match the `levelData` byte | ||
* length. | ||
* | ||
* _**NOTICE:** this implies that for formats such as UASTC, `uncompressedByteLength` may | ||
* indicate size after ZSTD reflation (and of transcoded ASTC data), but does _not_ indicate | ||
* size of decoded RGBA32 pixels._ | ||
*/ | ||
uncompressedByteLength: number; | ||
@@ -51,0 +60,0 @@ } |
@@ -1,2 +0,2 @@ | ||
var t,e,n,i,r,a,s,o,l=new Uint8Array([0]),f=[171,75,84,88,32,50,48,187,13,10,26,10];!function(t){t[t.NONE=0]="NONE",t[t.BASISLZ=1]="BASISLZ",t[t.ZSTD=2]="ZSTD",t[t.ZLIB=3]="ZLIB"}(t||(t={})),function(t){t[t.BASICFORMAT=0]="BASICFORMAT"}(e||(e={})),function(t){t[t.UNSPECIFIED=0]="UNSPECIFIED",t[t.ETC1S=163]="ETC1S",t[t.UASTC=166]="UASTC"}(n||(n={})),function(t){t[t.UNSPECIFIED=0]="UNSPECIFIED",t[t.SRGB=1]="SRGB"}(i||(i={})),function(t){t[t.UNSPECIFIED=0]="UNSPECIFIED",t[t.LINEAR=1]="LINEAR",t[t.SRGB=2]="SRGB",t[t.ITU=3]="ITU",t[t.NTSC=4]="NTSC",t[t.SLOG=5]="SLOG",t[t.SLOG2=6]="SLOG2"}(r||(r={})),function(t){t[t.ALPHA_STRAIGHT=0]="ALPHA_STRAIGHT",t[t.ALPHA_PREMULTIPLIED=1]="ALPHA_PREMULTIPLIED"}(a||(a={})),function(t){t[t.RGB=0]="RGB",t[t.RRR=3]="RRR",t[t.GGG=4]="GGG",t[t.AAA=15]="AAA"}(s||(s={})),function(t){t[t.RGB=0]="RGB",t[t.RGBA=3]="RGBA",t[t.RRR=4]="RRR",t[t.RRRG=5]="RRRG"}(o||(o={}));var U=function(){this.vkFormat=0,this.typeSize=1,this.pixelWidth=0,this.pixelHeight=0,this.pixelDepth=0,this.layerCount=0,this.faceCount=1,this.supercompressionScheme=t.NONE,this.levels=[],this.dataFormatDescriptor=[{vendorId:0,descriptorType:e.BASICFORMAT,versionNumber:2,descriptorBlockSize:40,colorModel:n.UNSPECIFIED,colorPrimaries:i.SRGB,transferFunction:i.SRGB,flags:a.ALPHA_STRAIGHT,texelBlockDimension:{x:4,y:4,z:1,w:1},bytesPlane:[],samples:[]}],this.keyValue={},this.globalData=null},h=function(){function t(t,e,n,i){this._dataView=new DataView(t.buffer,t.byteOffset+e,n),this._littleEndian=i,this._offset=0}var e=t.prototype;return e._nextUint8=function(){var t=this._dataView.getUint8(this._offset);return this._offset+=1,t},e._nextUint16=function(){var t=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,t},e._nextUint32=function(){var t=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,t},e._nextUint64=function(){var t=this._dataView.getUint32(this._offset,this._littleEndian),e=this._dataView.getUint32(this._offset+4,this._littleEndian),n=t+Math.pow(2,32)*e;return this._offset+=8,n},e._skip=function(t){return this._offset+=t,this},e._scan=function(t,e){void 0===e&&(e=0);for(var n=this._offset,i=0;this._dataView.getUint8(this._offset)!==e&&i<t;)i++,this._offset++;return i<t&&this._offset++,new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+n,i)},t}();function c(){return(c=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t}).apply(this,arguments)}function u(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}function _(t,e){var n;if("undefined"==typeof Symbol||null==t[Symbol.iterator]){if(Array.isArray(t)||(n=function(t,e){if(t){if("string"==typeof t)return u(t,void 0);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?u(t,void 0):void 0}}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var i=0;return function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=t[Symbol.iterator]()).next.bind(n)}function p(t){return"undefined"!=typeof TextEncoder?(new TextEncoder).encode(t):Buffer.from(t)}function g(t){return"undefined"!=typeof TextDecoder?(new TextDecoder).decode(t):Buffer.from(t).toString("utf8")}function y(t){for(var e,n=0,i=_(t);!(e=i()).done;)n+=e.value.byteLength;for(var r,a=new Uint8Array(n),s=0,o=_(t);!(r=o()).done;){var l=r.value;a.set(new Uint8Array(l),s),s+=l.byteLength}return a}var x={keepWriter:!1};exports.KTX2Container=U,exports.read=function(t){var e=new Uint8Array(t.buffer,t.byteOffset,f.length);if(e[0]!==f[0]||e[1]!==f[1]||e[2]!==f[2]||e[3]!==f[3]||e[4]!==f[4]||e[5]!==f[5]||e[6]!==f[6]||e[7]!==f[7]||e[8]!==f[8]||e[9]!==f[9]||e[10]!==f[10]||e[11]!==f[11])throw new Error("Missing KTX 2.0 identifier.");var n=new U,i=17*Uint32Array.BYTES_PER_ELEMENT,r=new h(t,f.length,i,!0);n.vkFormat=r._nextUint32(),n.typeSize=r._nextUint32(),n.pixelWidth=r._nextUint32(),n.pixelHeight=r._nextUint32(),n.pixelDepth=r._nextUint32(),n.layerCount=r._nextUint32(),n.faceCount=r._nextUint32();var a=r._nextUint32();n.supercompressionScheme=r._nextUint32();for(var s=r._nextUint32(),o=r._nextUint32(),l=r._nextUint32(),c=r._nextUint32(),u=r._nextUint64(),_=r._nextUint64(),p=new h(t,f.length+i,3*a*8,!0),y=0;y<a;y++)n.levels.push({levelData:new Uint8Array(t.buffer,t.byteOffset+p._nextUint64(),p._nextUint64()),uncompressedByteLength:p._nextUint64()});for(var x=new h(t,s,o,!0),b={vendorId:x._skip(4)._nextUint16(),descriptorType:x._nextUint16(),versionNumber:x._nextUint16(),descriptorBlockSize:x._nextUint16(),colorModel:x._nextUint8(),colorPrimaries:x._nextUint8(),transferFunction:x._nextUint8(),flags:x._nextUint8(),texelBlockDimension:{x:x._nextUint8()+1,y:x._nextUint8()+1,z:x._nextUint8()+1,w:x._nextUint8()+1},bytesPlane:[x._nextUint8(),x._nextUint8(),x._nextUint8(),x._nextUint8(),x._nextUint8(),x._nextUint8(),x._nextUint8(),x._nextUint8()],samples:[]},d=(b.descriptorBlockSize/4-6)/4,v=0;v<d;v++)b.samples[v]={bitOffset:x._nextUint16(),bitLength:x._nextUint8(),channelID:x._nextUint8(),samplePosition:[x._nextUint8(),x._nextUint8(),x._nextUint8(),x._nextUint8()],sampleLower:x._nextUint32(),sampleUpper:x._nextUint32()};n.dataFormatDescriptor.length=0,n.dataFormatDescriptor.push(b);for(var D=new h(t,l,c,!0);D._offset<c;){var m=D._nextUint32(),A=D._scan(m),w=g(A),S=D._scan(m-A.byteLength);n.keyValue[w]=w.match(/^ktx/i)?g(S):S,m%4&&D._skip(4-m%4)}if(_<=0)return n;for(var B=new h(t,u,_,!0),L=B._nextUint16(),I=B._nextUint16(),R=B._nextUint32(),E=B._nextUint32(),T=B._nextUint32(),O=B._nextUint32(),C=[],P=0;P<a;P++)C.push({imageFlags:B._nextUint32(),rgbSliceByteOffset:B._nextUint32(),rgbSliceByteLength:B._nextUint32(),alphaSliceByteOffset:B._nextUint32(),alphaSliceByteLength:B._nextUint32()});var F=u+B._offset,G=F+R,k=G+E,N=k+T,V=new Uint8Array(t.buffer,t.byteOffset+F,R),M=new Uint8Array(t.buffer,t.byteOffset+G,E),H=new Uint8Array(t.buffer,t.byteOffset+k,T),z=new Uint8Array(t.buffer,t.byteOffset+N,O);return n.globalData={endpointCount:L,selectorCount:I,imageDescs:C,endpointsData:V,selectorsData:M,tablesData:H,extendedData:z},n},exports.write=function(t,n){void 0===n&&(n={}),n=c({},x,n);var i=new ArrayBuffer(0);if(t.globalData){var r=new ArrayBuffer(20+5*t.globalData.imageDescs.length*4),a=new DataView(r);a.setUint16(0,t.globalData.endpointCount,!0),a.setUint16(2,t.globalData.selectorCount,!0),a.setUint32(4,t.globalData.endpointsData.byteLength,!0),a.setUint32(8,t.globalData.selectorsData.byteLength,!0),a.setUint32(12,t.globalData.tablesData.byteLength,!0),a.setUint32(16,t.globalData.extendedData.byteLength,!0);for(var s=0;s<t.globalData.imageDescs.length;s++){var o=t.globalData.imageDescs[s];a.setUint32(20+5*s*4+0,o.imageFlags,!0),a.setUint32(20+5*s*4+4,o.rgbSliceByteOffset,!0),a.setUint32(20+5*s*4+8,o.rgbSliceByteLength,!0),a.setUint32(20+5*s*4+12,o.alphaSliceByteOffset,!0),a.setUint32(20+5*s*4+16,o.alphaSliceByteLength,!0)}i=y([r,t.globalData.endpointsData,t.globalData.selectorsData,t.globalData.tablesData,t.globalData.extendedData])}var U=[],h=t.keyValue;for(var u in n.keepWriter||(h=c({},t.keyValue,{KTXwriter:"KTX-Parse v0.0.3"})),h){var _=h[u],g=p(u),b="string"==typeof _?p(_):_,d=g.byteLength+1+b.byteLength+1,v=d%4?4-d%4:0;U.push(y([new Uint32Array([d]),g,l,b,l,new Uint8Array(v).fill(0)]))}var D=y(U),m=new ArrayBuffer(44),A=new DataView(m);if(1!==t.dataFormatDescriptor.length||t.dataFormatDescriptor[0].descriptorType!==e.BASICFORMAT)throw new Error("Only BASICFORMAT Data Format Descriptor output supported.");var w=t.dataFormatDescriptor[0];A.setUint32(0,44,!0),A.setUint16(4,w.vendorId,!0),A.setUint16(6,w.descriptorType,!0),A.setUint16(8,w.versionNumber,!0),A.setUint16(10,w.descriptorBlockSize,!0),A.setUint8(12,w.colorModel),A.setUint8(13,w.colorPrimaries),A.setUint8(14,w.transferFunction),A.setUint8(15,w.flags),A.setUint8(16,w.texelBlockDimension.x-1),A.setUint8(17,w.texelBlockDimension.y-1),A.setUint8(18,w.texelBlockDimension.z-1),A.setUint8(19,w.texelBlockDimension.w-1);for(var S=0;S<8;S++)A.setUint8(20+S,w.bytesPlane[S]);for(var B=0;B<w.samples.length;B++){var L=w.samples[B],I=28+16*B;A.setUint16(I+0,L.bitOffset,!0),A.setUint8(I+2,L.bitLength),A.setUint8(I+3,L.channelID),A.setUint8(I+4,L.samplePosition[0]),A.setUint8(I+5,L.samplePosition[1]),A.setUint8(I+6,L.samplePosition[2]),A.setUint8(I+7,L.samplePosition[3]),A.setUint32(I+8,L.sampleLower,!0),A.setUint32(I+12,L.sampleUpper,!0)}var R=f.length+68+3*t.levels.length*8,E=R+m.byteLength,T=E+D.byteLength;T%8&&(T+=8-T%8);for(var O=[],C=new DataView(new ArrayBuffer(3*t.levels.length*8)),P=T+i.byteLength,F=0;F<t.levels.length;F++){var G=t.levels[F];O.push(G.levelData),C.setBigUint64(24*F+0,BigInt(P),!0),C.setBigUint64(24*F+8,BigInt(G.levelData.byteLength),!0),C.setBigUint64(24*F+16,BigInt(G.uncompressedByteLength),!0),P+=G.levelData.byteLength}var k=new ArrayBuffer(68),N=new DataView(k);return N.setUint32(0,t.vkFormat,!0),N.setUint32(4,t.typeSize,!0),N.setUint32(8,t.pixelWidth,!0),N.setUint32(12,t.pixelHeight,!0),N.setUint32(16,t.pixelDepth,!0),N.setUint32(20,t.layerCount,!0),N.setUint32(24,t.faceCount,!0),N.setUint32(28,t.levels.length,!0),N.setUint32(32,t.supercompressionScheme,!0),N.setUint32(36,R,!0),N.setUint32(40,m.byteLength,!0),N.setUint32(44,E,!0),N.setUint32(48,D.byteLength,!0),N.setBigUint64(52,BigInt(T),!0),N.setBigUint64(60,BigInt(i.byteLength),!0),new Uint8Array(y([new Uint8Array(f).buffer,k,C.buffer,m,D,new ArrayBuffer(T-(E+D.byteLength)),i].concat(O)))}; | ||
var t,e,n,i,r,a,s,o,l=new Uint8Array([0]),f=[171,75,84,88,32,50,48,187,13,10,26,10];!function(t){t[t.NONE=0]="NONE",t[t.BASISLZ=1]="BASISLZ",t[t.ZSTD=2]="ZSTD",t[t.ZLIB=3]="ZLIB"}(t||(t={})),function(t){t[t.BASICFORMAT=0]="BASICFORMAT"}(e||(e={})),function(t){t[t.UNSPECIFIED=0]="UNSPECIFIED",t[t.ETC1S=163]="ETC1S",t[t.UASTC=166]="UASTC"}(n||(n={})),function(t){t[t.UNSPECIFIED=0]="UNSPECIFIED",t[t.SRGB=1]="SRGB"}(i||(i={})),function(t){t[t.UNSPECIFIED=0]="UNSPECIFIED",t[t.LINEAR=1]="LINEAR",t[t.SRGB=2]="SRGB",t[t.ITU=3]="ITU",t[t.NTSC=4]="NTSC",t[t.SLOG=5]="SLOG",t[t.SLOG2=6]="SLOG2"}(r||(r={})),function(t){t[t.ALPHA_STRAIGHT=0]="ALPHA_STRAIGHT",t[t.ALPHA_PREMULTIPLIED=1]="ALPHA_PREMULTIPLIED"}(a||(a={})),function(t){t[t.RGB=0]="RGB",t[t.RRR=3]="RRR",t[t.GGG=4]="GGG",t[t.AAA=15]="AAA"}(s||(s={})),function(t){t[t.RGB=0]="RGB",t[t.RGBA=3]="RGBA",t[t.RRR=4]="RRR",t[t.RRRG=5]="RRRG"}(o||(o={}));var U=function(){this.vkFormat=0,this.typeSize=1,this.pixelWidth=0,this.pixelHeight=0,this.pixelDepth=0,this.layerCount=0,this.faceCount=1,this.supercompressionScheme=t.NONE,this.levels=[],this.dataFormatDescriptor=[{vendorId:0,descriptorType:e.BASICFORMAT,versionNumber:2,descriptorBlockSize:40,colorModel:n.UNSPECIFIED,colorPrimaries:i.SRGB,transferFunction:i.SRGB,flags:a.ALPHA_STRAIGHT,texelBlockDimension:{x:4,y:4,z:1,w:1},bytesPlane:[],samples:[]}],this.keyValue={},this.globalData=null},h=function(){function t(t,e,n,i){this._dataView=new DataView(t.buffer,t.byteOffset+e,n),this._littleEndian=i,this._offset=0}var e=t.prototype;return e._nextUint8=function(){var t=this._dataView.getUint8(this._offset);return this._offset+=1,t},e._nextUint16=function(){var t=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,t},e._nextUint32=function(){var t=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,t},e._nextUint64=function(){var t=this._dataView.getUint32(this._offset,this._littleEndian),e=this._dataView.getUint32(this._offset+4,this._littleEndian),n=t+Math.pow(2,32)*e;return this._offset+=8,n},e._skip=function(t){return this._offset+=t,this},e._scan=function(t,e){void 0===e&&(e=0);for(var n=this._offset,i=0;this._dataView.getUint8(this._offset)!==e&&i<t;)i++,this._offset++;return i<t&&this._offset++,new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+n,i)},t}();function c(){return(c=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t}).apply(this,arguments)}function u(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}function _(t,e){var n;if("undefined"==typeof Symbol||null==t[Symbol.iterator]){if(Array.isArray(t)||(n=function(t,e){if(t){if("string"==typeof t)return u(t,void 0);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?u(t,void 0):void 0}}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var i=0;return function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=t[Symbol.iterator]()).next.bind(n)}function p(t){return"undefined"!=typeof TextEncoder?(new TextEncoder).encode(t):Buffer.from(t)}function g(t){return"undefined"!=typeof TextDecoder?(new TextDecoder).decode(t):Buffer.from(t).toString("utf8")}function y(t){for(var e,n=0,i=_(t);!(e=i()).done;)n+=e.value.byteLength;for(var r,a=new Uint8Array(n),s=0,o=_(t);!(r=o()).done;){var l=r.value;a.set(new Uint8Array(l),s),s+=l.byteLength}return a}var x={keepWriter:!1};exports.KTX2Container=U,exports.read=function(t){var e=new Uint8Array(t.buffer,t.byteOffset,f.length);if(e[0]!==f[0]||e[1]!==f[1]||e[2]!==f[2]||e[3]!==f[3]||e[4]!==f[4]||e[5]!==f[5]||e[6]!==f[6]||e[7]!==f[7]||e[8]!==f[8]||e[9]!==f[9]||e[10]!==f[10]||e[11]!==f[11])throw new Error("Missing KTX 2.0 identifier.");var n=new U,i=17*Uint32Array.BYTES_PER_ELEMENT,r=new h(t,f.length,i,!0);n.vkFormat=r._nextUint32(),n.typeSize=r._nextUint32(),n.pixelWidth=r._nextUint32(),n.pixelHeight=r._nextUint32(),n.pixelDepth=r._nextUint32(),n.layerCount=r._nextUint32(),n.faceCount=r._nextUint32();var a=r._nextUint32();n.supercompressionScheme=r._nextUint32();for(var s=r._nextUint32(),o=r._nextUint32(),l=r._nextUint32(),c=r._nextUint32(),u=r._nextUint64(),_=r._nextUint64(),p=new h(t,f.length+i,3*a*8,!0),y=0;y<a;y++)n.levels.push({levelData:new Uint8Array(t.buffer,t.byteOffset+p._nextUint64(),p._nextUint64()),uncompressedByteLength:p._nextUint64()});for(var x=new h(t,s,o,!0),b={vendorId:x._skip(4)._nextUint16(),descriptorType:x._nextUint16(),versionNumber:x._nextUint16(),descriptorBlockSize:x._nextUint16(),colorModel:x._nextUint8(),colorPrimaries:x._nextUint8(),transferFunction:x._nextUint8(),flags:x._nextUint8(),texelBlockDimension:{x:x._nextUint8()+1,y:x._nextUint8()+1,z:x._nextUint8()+1,w:x._nextUint8()+1},bytesPlane:[x._nextUint8(),x._nextUint8(),x._nextUint8(),x._nextUint8(),x._nextUint8(),x._nextUint8(),x._nextUint8(),x._nextUint8()],samples:[]},d=(b.descriptorBlockSize/4-6)/4,v=0;v<d;v++)b.samples[v]={bitOffset:x._nextUint16(),bitLength:x._nextUint8(),channelID:x._nextUint8(),samplePosition:[x._nextUint8(),x._nextUint8(),x._nextUint8(),x._nextUint8()],sampleLower:x._nextUint32(),sampleUpper:x._nextUint32()};n.dataFormatDescriptor.length=0,n.dataFormatDescriptor.push(b);for(var D=new h(t,l,c,!0);D._offset<c;){var m=D._nextUint32(),A=D._scan(m),w=g(A),S=D._scan(m-A.byteLength);n.keyValue[w]=w.match(/^ktx/i)?g(S):S,m%4&&D._skip(4-m%4)}if(_<=0)return n;for(var B=new h(t,u,_,!0),L=B._nextUint16(),I=B._nextUint16(),R=B._nextUint32(),E=B._nextUint32(),T=B._nextUint32(),O=B._nextUint32(),C=[],P=0;P<a;P++)C.push({imageFlags:B._nextUint32(),rgbSliceByteOffset:B._nextUint32(),rgbSliceByteLength:B._nextUint32(),alphaSliceByteOffset:B._nextUint32(),alphaSliceByteLength:B._nextUint32()});var F=u+B._offset,G=F+R,k=G+E,N=k+T,V=new Uint8Array(t.buffer,t.byteOffset+F,R),M=new Uint8Array(t.buffer,t.byteOffset+G,E),H=new Uint8Array(t.buffer,t.byteOffset+k,T),z=new Uint8Array(t.buffer,t.byteOffset+N,O);return n.globalData={endpointCount:L,selectorCount:I,imageDescs:C,endpointsData:V,selectorsData:M,tablesData:H,extendedData:z},n},exports.write=function(t,n){void 0===n&&(n={}),n=c({},x,n);var i=new ArrayBuffer(0);if(t.globalData){var r=new ArrayBuffer(20+5*t.globalData.imageDescs.length*4),a=new DataView(r);a.setUint16(0,t.globalData.endpointCount,!0),a.setUint16(2,t.globalData.selectorCount,!0),a.setUint32(4,t.globalData.endpointsData.byteLength,!0),a.setUint32(8,t.globalData.selectorsData.byteLength,!0),a.setUint32(12,t.globalData.tablesData.byteLength,!0),a.setUint32(16,t.globalData.extendedData.byteLength,!0);for(var s=0;s<t.globalData.imageDescs.length;s++){var o=t.globalData.imageDescs[s];a.setUint32(20+5*s*4+0,o.imageFlags,!0),a.setUint32(20+5*s*4+4,o.rgbSliceByteOffset,!0),a.setUint32(20+5*s*4+8,o.rgbSliceByteLength,!0),a.setUint32(20+5*s*4+12,o.alphaSliceByteOffset,!0),a.setUint32(20+5*s*4+16,o.alphaSliceByteLength,!0)}i=y([r,t.globalData.endpointsData,t.globalData.selectorsData,t.globalData.tablesData,t.globalData.extendedData])}var U=[],h=t.keyValue;for(var u in n.keepWriter||(h=c({},t.keyValue,{KTXwriter:"KTX-Parse v0.0.4"})),h){var _=h[u],g=p(u),b="string"==typeof _?p(_):_,d=g.byteLength+1+b.byteLength+1,v=d%4?4-d%4:0;U.push(y([new Uint32Array([d]),g,l,b,l,new Uint8Array(v).fill(0)]))}var D=y(U),m=new ArrayBuffer(44),A=new DataView(m);if(1!==t.dataFormatDescriptor.length||t.dataFormatDescriptor[0].descriptorType!==e.BASICFORMAT)throw new Error("Only BASICFORMAT Data Format Descriptor output supported.");var w=t.dataFormatDescriptor[0];A.setUint32(0,44,!0),A.setUint16(4,w.vendorId,!0),A.setUint16(6,w.descriptorType,!0),A.setUint16(8,w.versionNumber,!0),A.setUint16(10,w.descriptorBlockSize,!0),A.setUint8(12,w.colorModel),A.setUint8(13,w.colorPrimaries),A.setUint8(14,w.transferFunction),A.setUint8(15,w.flags),A.setUint8(16,w.texelBlockDimension.x-1),A.setUint8(17,w.texelBlockDimension.y-1),A.setUint8(18,w.texelBlockDimension.z-1),A.setUint8(19,w.texelBlockDimension.w-1);for(var S=0;S<8;S++)A.setUint8(20+S,w.bytesPlane[S]);for(var B=0;B<w.samples.length;B++){var L=w.samples[B],I=28+16*B;A.setUint16(I+0,L.bitOffset,!0),A.setUint8(I+2,L.bitLength),A.setUint8(I+3,L.channelID),A.setUint8(I+4,L.samplePosition[0]),A.setUint8(I+5,L.samplePosition[1]),A.setUint8(I+6,L.samplePosition[2]),A.setUint8(I+7,L.samplePosition[3]),A.setUint32(I+8,L.sampleLower,!0),A.setUint32(I+12,L.sampleUpper,!0)}var R=f.length+68+3*t.levels.length*8,E=R+m.byteLength,T=E+D.byteLength;T%8&&(T+=8-T%8);for(var O=[],C=new DataView(new ArrayBuffer(3*t.levels.length*8)),P=T+i.byteLength,F=0;F<t.levels.length;F++){var G=t.levels[F];O.push(G.levelData),C.setBigUint64(24*F+0,BigInt(P),!0),C.setBigUint64(24*F+8,BigInt(G.levelData.byteLength),!0),C.setBigUint64(24*F+16,BigInt(G.uncompressedByteLength),!0),P+=G.levelData.byteLength}var k=new ArrayBuffer(68),N=new DataView(k);return N.setUint32(0,t.vkFormat,!0),N.setUint32(4,t.typeSize,!0),N.setUint32(8,t.pixelWidth,!0),N.setUint32(12,t.pixelHeight,!0),N.setUint32(16,t.pixelDepth,!0),N.setUint32(20,t.layerCount,!0),N.setUint32(24,t.faceCount,!0),N.setUint32(28,t.levels.length,!0),N.setUint32(32,t.supercompressionScheme,!0),N.setUint32(36,R,!0),N.setUint32(40,m.byteLength,!0),N.setUint32(44,E,!0),N.setUint32(48,D.byteLength,!0),N.setBigUint64(52,BigInt(T),!0),N.setBigUint64(60,BigInt(i.byteLength),!0),new Uint8Array(y([new Uint8Array(f).buffer,k,C.buffer,m,D,new ArrayBuffer(T-(E+D.byteLength)),i].concat(O)))}; | ||
//# sourceMappingURL=ktx-parse.js.map |
@@ -1,2 +0,2 @@ | ||
const t=new Uint8Array([0]),e=[171,75,84,88,32,50,48,187,13,10,26,10];var n,i,s,a,r,o,l,f;!function(t){t[t.NONE=0]="NONE",t[t.BASISLZ=1]="BASISLZ",t[t.ZSTD=2]="ZSTD",t[t.ZLIB=3]="ZLIB"}(n||(n={})),function(t){t[t.BASICFORMAT=0]="BASICFORMAT"}(i||(i={})),function(t){t[t.UNSPECIFIED=0]="UNSPECIFIED",t[t.ETC1S=163]="ETC1S",t[t.UASTC=166]="UASTC"}(s||(s={})),function(t){t[t.UNSPECIFIED=0]="UNSPECIFIED",t[t.SRGB=1]="SRGB"}(a||(a={})),function(t){t[t.UNSPECIFIED=0]="UNSPECIFIED",t[t.LINEAR=1]="LINEAR",t[t.SRGB=2]="SRGB",t[t.ITU=3]="ITU",t[t.NTSC=4]="NTSC",t[t.SLOG=5]="SLOG",t[t.SLOG2=6]="SLOG2"}(r||(r={})),function(t){t[t.ALPHA_STRAIGHT=0]="ALPHA_STRAIGHT",t[t.ALPHA_PREMULTIPLIED=1]="ALPHA_PREMULTIPLIED"}(o||(o={})),function(t){t[t.RGB=0]="RGB",t[t.RRR=3]="RRR",t[t.GGG=4]="GGG",t[t.AAA=15]="AAA"}(l||(l={})),function(t){t[t.RGB=0]="RGB",t[t.RGBA=3]="RGBA",t[t.RRR=4]="RRR",t[t.RRRG=5]="RRRG"}(f||(f={}));class U{constructor(){this.vkFormat=0,this.typeSize=1,this.pixelWidth=0,this.pixelHeight=0,this.pixelDepth=0,this.layerCount=0,this.faceCount=1,this.supercompressionScheme=n.NONE,this.levels=[],this.dataFormatDescriptor=[{vendorId:0,descriptorType:i.BASICFORMAT,versionNumber:2,descriptorBlockSize:40,colorModel:s.UNSPECIFIED,colorPrimaries:a.SRGB,transferFunction:a.SRGB,flags:o.ALPHA_STRAIGHT,texelBlockDimension:{x:4,y:4,z:1,w:1},bytesPlane:[],samples:[]}],this.keyValue={},this.globalData=null}}class c{constructor(t,e,n,i){this._dataView=new DataView(t.buffer,t.byteOffset+e,n),this._littleEndian=i,this._offset=0}_nextUint8(){const t=this._dataView.getUint8(this._offset);return this._offset+=1,t}_nextUint16(){const t=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,t}_nextUint32(){const t=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,t}_nextUint64(){const t=this._dataView.getUint32(this._offset,this._littleEndian)+2**32*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,t}_skip(t){return this._offset+=t,this}_scan(t,e=0){const n=this._offset;let i=0;for(;this._dataView.getUint8(this._offset)!==e&&i<t;)i++,this._offset++;return i<t&&this._offset++,new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+n,i)}}function h(t){return"undefined"!=typeof TextEncoder?(new TextEncoder).encode(t):Buffer.from(t)}function _(t){return"undefined"!=typeof TextDecoder?(new TextDecoder).decode(t):Buffer.from(t).toString("utf8")}function g(t){let e=0;for(const n of t)e+=n.byteLength;const n=new Uint8Array(e);let i=0;for(const e of t)n.set(new Uint8Array(e),i),i+=e.byteLength;return n}function p(t){const n=new Uint8Array(t.buffer,t.byteOffset,e.length);if(n[0]!==e[0]||n[1]!==e[1]||n[2]!==e[2]||n[3]!==e[3]||n[4]!==e[4]||n[5]!==e[5]||n[6]!==e[6]||n[7]!==e[7]||n[8]!==e[8]||n[9]!==e[9]||n[10]!==e[10]||n[11]!==e[11])throw new Error("Missing KTX 2.0 identifier.");const i=new U,s=17*Uint32Array.BYTES_PER_ELEMENT,a=new c(t,e.length,s,!0);i.vkFormat=a._nextUint32(),i.typeSize=a._nextUint32(),i.pixelWidth=a._nextUint32(),i.pixelHeight=a._nextUint32(),i.pixelDepth=a._nextUint32(),i.layerCount=a._nextUint32(),i.faceCount=a._nextUint32();const r=a._nextUint32();i.supercompressionScheme=a._nextUint32();const o=a._nextUint32(),l=a._nextUint32(),f=a._nextUint32(),h=a._nextUint32(),g=a._nextUint64(),p=a._nextUint64(),x=new c(t,e.length+s,3*r*8,!0);for(let e=0;e<r;e++)i.levels.push({levelData:new Uint8Array(t.buffer,t.byteOffset+x._nextUint64(),x._nextUint64()),uncompressedByteLength:x._nextUint64()});const u=new c(t,o,l,!0),y={vendorId:u._skip(4)._nextUint16(),descriptorType:u._nextUint16(),versionNumber:u._nextUint16(),descriptorBlockSize:u._nextUint16(),colorModel:u._nextUint8(),colorPrimaries:u._nextUint8(),transferFunction:u._nextUint8(),flags:u._nextUint8(),texelBlockDimension:{x:u._nextUint8()+1,y:u._nextUint8()+1,z:u._nextUint8()+1,w:u._nextUint8()+1},bytesPlane:[u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8()],samples:[]},D=(y.descriptorBlockSize/4-6)/4;for(let t=0;t<D;t++)y.samples[t]={bitOffset:u._nextUint16(),bitLength:u._nextUint8(),channelID:u._nextUint8(),samplePosition:[u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8()],sampleLower:u._nextUint32(),sampleUpper:u._nextUint32()};i.dataFormatDescriptor.length=0,i.dataFormatDescriptor.push(y);const b=new c(t,f,h,!0);for(;b._offset<h;){const t=b._nextUint32(),e=b._scan(t),n=_(e),s=b._scan(t-e.byteLength);i.keyValue[n]=n.match(/^ktx/i)?_(s):s,t%4&&b._skip(4-t%4)}if(p<=0)return i;const d=new c(t,g,p,!0),B=d._nextUint16(),w=d._nextUint16(),A=d._nextUint32(),S=d._nextUint32(),m=d._nextUint32(),L=d._nextUint32(),I=[];for(let t=0;t<r;t++)I.push({imageFlags:d._nextUint32(),rgbSliceByteOffset:d._nextUint32(),rgbSliceByteLength:d._nextUint32(),alphaSliceByteOffset:d._nextUint32(),alphaSliceByteLength:d._nextUint32()});const R=g+d._offset,E=R+A,T=E+S,O=T+m,P=new Uint8Array(t.buffer,t.byteOffset+R,A),C=new Uint8Array(t.buffer,t.byteOffset+E,S),F=new Uint8Array(t.buffer,t.byteOffset+T,m),G=new Uint8Array(t.buffer,t.byteOffset+O,L);return i.globalData={endpointCount:B,selectorCount:w,imageDescs:I,endpointsData:P,selectorsData:C,tablesData:F,extendedData:G},i}function x(){return(x=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t}).apply(this,arguments)}const u={keepWriter:!1};function y(n,s={}){s=x({},u,s);let a=new ArrayBuffer(0);if(n.globalData){const t=new ArrayBuffer(20+5*n.globalData.imageDescs.length*4),e=new DataView(t);e.setUint16(0,n.globalData.endpointCount,!0),e.setUint16(2,n.globalData.selectorCount,!0),e.setUint32(4,n.globalData.endpointsData.byteLength,!0),e.setUint32(8,n.globalData.selectorsData.byteLength,!0),e.setUint32(12,n.globalData.tablesData.byteLength,!0),e.setUint32(16,n.globalData.extendedData.byteLength,!0);for(let t=0;t<n.globalData.imageDescs.length;t++){const i=n.globalData.imageDescs[t];e.setUint32(20+5*t*4+0,i.imageFlags,!0),e.setUint32(20+5*t*4+4,i.rgbSliceByteOffset,!0),e.setUint32(20+5*t*4+8,i.rgbSliceByteLength,!0),e.setUint32(20+5*t*4+12,i.alphaSliceByteOffset,!0),e.setUint32(20+5*t*4+16,i.alphaSliceByteLength,!0)}a=g([t,n.globalData.endpointsData,n.globalData.selectorsData,n.globalData.tablesData,n.globalData.extendedData])}const r=[];let o=n.keyValue;s.keepWriter||(o=x({},n.keyValue,{KTXwriter:"KTX-Parse v0.0.3"}));for(const e in o){const n=o[e],i=h(e),s="string"==typeof n?h(n):n,a=i.byteLength+1+s.byteLength+1,l=a%4?4-a%4:0;r.push(g([new Uint32Array([a]),i,t,s,t,new Uint8Array(l).fill(0)]))}const l=g(r),f=new ArrayBuffer(44),U=new DataView(f);if(1!==n.dataFormatDescriptor.length||n.dataFormatDescriptor[0].descriptorType!==i.BASICFORMAT)throw new Error("Only BASICFORMAT Data Format Descriptor output supported.");const c=n.dataFormatDescriptor[0];U.setUint32(0,44,!0),U.setUint16(4,c.vendorId,!0),U.setUint16(6,c.descriptorType,!0),U.setUint16(8,c.versionNumber,!0),U.setUint16(10,c.descriptorBlockSize,!0),U.setUint8(12,c.colorModel),U.setUint8(13,c.colorPrimaries),U.setUint8(14,c.transferFunction),U.setUint8(15,c.flags),U.setUint8(16,c.texelBlockDimension.x-1),U.setUint8(17,c.texelBlockDimension.y-1),U.setUint8(18,c.texelBlockDimension.z-1),U.setUint8(19,c.texelBlockDimension.w-1);for(let t=0;t<8;t++)U.setUint8(20+t,c.bytesPlane[t]);for(let t=0;t<c.samples.length;t++){const e=c.samples[t],n=28+16*t;U.setUint16(n+0,e.bitOffset,!0),U.setUint8(n+2,e.bitLength),U.setUint8(n+3,e.channelID),U.setUint8(n+4,e.samplePosition[0]),U.setUint8(n+5,e.samplePosition[1]),U.setUint8(n+6,e.samplePosition[2]),U.setUint8(n+7,e.samplePosition[3]),U.setUint32(n+8,e.sampleLower,!0),U.setUint32(n+12,e.sampleUpper,!0)}const _=e.length+68+3*n.levels.length*8,p=_+f.byteLength;let y=p+l.byteLength;y%8&&(y+=8-y%8);const D=[],b=new DataView(new ArrayBuffer(3*n.levels.length*8));let d=y+a.byteLength;for(let t=0;t<n.levels.length;t++){const e=n.levels[t];D.push(e.levelData),b.setBigUint64(24*t+0,BigInt(d),!0),b.setBigUint64(24*t+8,BigInt(e.levelData.byteLength),!0),b.setBigUint64(24*t+16,BigInt(e.uncompressedByteLength),!0),d+=e.levelData.byteLength}const B=new ArrayBuffer(68),w=new DataView(B);return w.setUint32(0,n.vkFormat,!0),w.setUint32(4,n.typeSize,!0),w.setUint32(8,n.pixelWidth,!0),w.setUint32(12,n.pixelHeight,!0),w.setUint32(16,n.pixelDepth,!0),w.setUint32(20,n.layerCount,!0),w.setUint32(24,n.faceCount,!0),w.setUint32(28,n.levels.length,!0),w.setUint32(32,n.supercompressionScheme,!0),w.setUint32(36,_,!0),w.setUint32(40,f.byteLength,!0),w.setUint32(44,p,!0),w.setUint32(48,l.byteLength,!0),w.setBigUint64(52,BigInt(y),!0),w.setBigUint64(60,BigInt(a.byteLength),!0),new Uint8Array(g([new Uint8Array(e).buffer,B,b.buffer,f,l,new ArrayBuffer(y-(p+l.byteLength)),a,...D]))}export{U as KTX2Container,p as read,y as write}; | ||
const t=new Uint8Array([0]),e=[171,75,84,88,32,50,48,187,13,10,26,10];var n,i,s,a,r,o,l,f;!function(t){t[t.NONE=0]="NONE",t[t.BASISLZ=1]="BASISLZ",t[t.ZSTD=2]="ZSTD",t[t.ZLIB=3]="ZLIB"}(n||(n={})),function(t){t[t.BASICFORMAT=0]="BASICFORMAT"}(i||(i={})),function(t){t[t.UNSPECIFIED=0]="UNSPECIFIED",t[t.ETC1S=163]="ETC1S",t[t.UASTC=166]="UASTC"}(s||(s={})),function(t){t[t.UNSPECIFIED=0]="UNSPECIFIED",t[t.SRGB=1]="SRGB"}(a||(a={})),function(t){t[t.UNSPECIFIED=0]="UNSPECIFIED",t[t.LINEAR=1]="LINEAR",t[t.SRGB=2]="SRGB",t[t.ITU=3]="ITU",t[t.NTSC=4]="NTSC",t[t.SLOG=5]="SLOG",t[t.SLOG2=6]="SLOG2"}(r||(r={})),function(t){t[t.ALPHA_STRAIGHT=0]="ALPHA_STRAIGHT",t[t.ALPHA_PREMULTIPLIED=1]="ALPHA_PREMULTIPLIED"}(o||(o={})),function(t){t[t.RGB=0]="RGB",t[t.RRR=3]="RRR",t[t.GGG=4]="GGG",t[t.AAA=15]="AAA"}(l||(l={})),function(t){t[t.RGB=0]="RGB",t[t.RGBA=3]="RGBA",t[t.RRR=4]="RRR",t[t.RRRG=5]="RRRG"}(f||(f={}));class U{constructor(){this.vkFormat=0,this.typeSize=1,this.pixelWidth=0,this.pixelHeight=0,this.pixelDepth=0,this.layerCount=0,this.faceCount=1,this.supercompressionScheme=n.NONE,this.levels=[],this.dataFormatDescriptor=[{vendorId:0,descriptorType:i.BASICFORMAT,versionNumber:2,descriptorBlockSize:40,colorModel:s.UNSPECIFIED,colorPrimaries:a.SRGB,transferFunction:a.SRGB,flags:o.ALPHA_STRAIGHT,texelBlockDimension:{x:4,y:4,z:1,w:1},bytesPlane:[],samples:[]}],this.keyValue={},this.globalData=null}}class c{constructor(t,e,n,i){this._dataView=new DataView(t.buffer,t.byteOffset+e,n),this._littleEndian=i,this._offset=0}_nextUint8(){const t=this._dataView.getUint8(this._offset);return this._offset+=1,t}_nextUint16(){const t=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,t}_nextUint32(){const t=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,t}_nextUint64(){const t=this._dataView.getUint32(this._offset,this._littleEndian)+2**32*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,t}_skip(t){return this._offset+=t,this}_scan(t,e=0){const n=this._offset;let i=0;for(;this._dataView.getUint8(this._offset)!==e&&i<t;)i++,this._offset++;return i<t&&this._offset++,new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+n,i)}}function h(t){return"undefined"!=typeof TextEncoder?(new TextEncoder).encode(t):Buffer.from(t)}function _(t){return"undefined"!=typeof TextDecoder?(new TextDecoder).decode(t):Buffer.from(t).toString("utf8")}function g(t){let e=0;for(const n of t)e+=n.byteLength;const n=new Uint8Array(e);let i=0;for(const e of t)n.set(new Uint8Array(e),i),i+=e.byteLength;return n}function p(t){const n=new Uint8Array(t.buffer,t.byteOffset,e.length);if(n[0]!==e[0]||n[1]!==e[1]||n[2]!==e[2]||n[3]!==e[3]||n[4]!==e[4]||n[5]!==e[5]||n[6]!==e[6]||n[7]!==e[7]||n[8]!==e[8]||n[9]!==e[9]||n[10]!==e[10]||n[11]!==e[11])throw new Error("Missing KTX 2.0 identifier.");const i=new U,s=17*Uint32Array.BYTES_PER_ELEMENT,a=new c(t,e.length,s,!0);i.vkFormat=a._nextUint32(),i.typeSize=a._nextUint32(),i.pixelWidth=a._nextUint32(),i.pixelHeight=a._nextUint32(),i.pixelDepth=a._nextUint32(),i.layerCount=a._nextUint32(),i.faceCount=a._nextUint32();const r=a._nextUint32();i.supercompressionScheme=a._nextUint32();const o=a._nextUint32(),l=a._nextUint32(),f=a._nextUint32(),h=a._nextUint32(),g=a._nextUint64(),p=a._nextUint64(),x=new c(t,e.length+s,3*r*8,!0);for(let e=0;e<r;e++)i.levels.push({levelData:new Uint8Array(t.buffer,t.byteOffset+x._nextUint64(),x._nextUint64()),uncompressedByteLength:x._nextUint64()});const u=new c(t,o,l,!0),y={vendorId:u._skip(4)._nextUint16(),descriptorType:u._nextUint16(),versionNumber:u._nextUint16(),descriptorBlockSize:u._nextUint16(),colorModel:u._nextUint8(),colorPrimaries:u._nextUint8(),transferFunction:u._nextUint8(),flags:u._nextUint8(),texelBlockDimension:{x:u._nextUint8()+1,y:u._nextUint8()+1,z:u._nextUint8()+1,w:u._nextUint8()+1},bytesPlane:[u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8()],samples:[]},D=(y.descriptorBlockSize/4-6)/4;for(let t=0;t<D;t++)y.samples[t]={bitOffset:u._nextUint16(),bitLength:u._nextUint8(),channelID:u._nextUint8(),samplePosition:[u._nextUint8(),u._nextUint8(),u._nextUint8(),u._nextUint8()],sampleLower:u._nextUint32(),sampleUpper:u._nextUint32()};i.dataFormatDescriptor.length=0,i.dataFormatDescriptor.push(y);const b=new c(t,f,h,!0);for(;b._offset<h;){const t=b._nextUint32(),e=b._scan(t),n=_(e),s=b._scan(t-e.byteLength);i.keyValue[n]=n.match(/^ktx/i)?_(s):s,t%4&&b._skip(4-t%4)}if(p<=0)return i;const d=new c(t,g,p,!0),B=d._nextUint16(),w=d._nextUint16(),A=d._nextUint32(),S=d._nextUint32(),m=d._nextUint32(),L=d._nextUint32(),I=[];for(let t=0;t<r;t++)I.push({imageFlags:d._nextUint32(),rgbSliceByteOffset:d._nextUint32(),rgbSliceByteLength:d._nextUint32(),alphaSliceByteOffset:d._nextUint32(),alphaSliceByteLength:d._nextUint32()});const R=g+d._offset,E=R+A,T=E+S,O=T+m,P=new Uint8Array(t.buffer,t.byteOffset+R,A),C=new Uint8Array(t.buffer,t.byteOffset+E,S),F=new Uint8Array(t.buffer,t.byteOffset+T,m),G=new Uint8Array(t.buffer,t.byteOffset+O,L);return i.globalData={endpointCount:B,selectorCount:w,imageDescs:I,endpointsData:P,selectorsData:C,tablesData:F,extendedData:G},i}function x(){return(x=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t}).apply(this,arguments)}const u={keepWriter:!1};function y(n,s={}){s=x({},u,s);let a=new ArrayBuffer(0);if(n.globalData){const t=new ArrayBuffer(20+5*n.globalData.imageDescs.length*4),e=new DataView(t);e.setUint16(0,n.globalData.endpointCount,!0),e.setUint16(2,n.globalData.selectorCount,!0),e.setUint32(4,n.globalData.endpointsData.byteLength,!0),e.setUint32(8,n.globalData.selectorsData.byteLength,!0),e.setUint32(12,n.globalData.tablesData.byteLength,!0),e.setUint32(16,n.globalData.extendedData.byteLength,!0);for(let t=0;t<n.globalData.imageDescs.length;t++){const i=n.globalData.imageDescs[t];e.setUint32(20+5*t*4+0,i.imageFlags,!0),e.setUint32(20+5*t*4+4,i.rgbSliceByteOffset,!0),e.setUint32(20+5*t*4+8,i.rgbSliceByteLength,!0),e.setUint32(20+5*t*4+12,i.alphaSliceByteOffset,!0),e.setUint32(20+5*t*4+16,i.alphaSliceByteLength,!0)}a=g([t,n.globalData.endpointsData,n.globalData.selectorsData,n.globalData.tablesData,n.globalData.extendedData])}const r=[];let o=n.keyValue;s.keepWriter||(o=x({},n.keyValue,{KTXwriter:"KTX-Parse v0.0.4"}));for(const e in o){const n=o[e],i=h(e),s="string"==typeof n?h(n):n,a=i.byteLength+1+s.byteLength+1,l=a%4?4-a%4:0;r.push(g([new Uint32Array([a]),i,t,s,t,new Uint8Array(l).fill(0)]))}const l=g(r),f=new ArrayBuffer(44),U=new DataView(f);if(1!==n.dataFormatDescriptor.length||n.dataFormatDescriptor[0].descriptorType!==i.BASICFORMAT)throw new Error("Only BASICFORMAT Data Format Descriptor output supported.");const c=n.dataFormatDescriptor[0];U.setUint32(0,44,!0),U.setUint16(4,c.vendorId,!0),U.setUint16(6,c.descriptorType,!0),U.setUint16(8,c.versionNumber,!0),U.setUint16(10,c.descriptorBlockSize,!0),U.setUint8(12,c.colorModel),U.setUint8(13,c.colorPrimaries),U.setUint8(14,c.transferFunction),U.setUint8(15,c.flags),U.setUint8(16,c.texelBlockDimension.x-1),U.setUint8(17,c.texelBlockDimension.y-1),U.setUint8(18,c.texelBlockDimension.z-1),U.setUint8(19,c.texelBlockDimension.w-1);for(let t=0;t<8;t++)U.setUint8(20+t,c.bytesPlane[t]);for(let t=0;t<c.samples.length;t++){const e=c.samples[t],n=28+16*t;U.setUint16(n+0,e.bitOffset,!0),U.setUint8(n+2,e.bitLength),U.setUint8(n+3,e.channelID),U.setUint8(n+4,e.samplePosition[0]),U.setUint8(n+5,e.samplePosition[1]),U.setUint8(n+6,e.samplePosition[2]),U.setUint8(n+7,e.samplePosition[3]),U.setUint32(n+8,e.sampleLower,!0),U.setUint32(n+12,e.sampleUpper,!0)}const _=e.length+68+3*n.levels.length*8,p=_+f.byteLength;let y=p+l.byteLength;y%8&&(y+=8-y%8);const D=[],b=new DataView(new ArrayBuffer(3*n.levels.length*8));let d=y+a.byteLength;for(let t=0;t<n.levels.length;t++){const e=n.levels[t];D.push(e.levelData),b.setBigUint64(24*t+0,BigInt(d),!0),b.setBigUint64(24*t+8,BigInt(e.levelData.byteLength),!0),b.setBigUint64(24*t+16,BigInt(e.uncompressedByteLength),!0),d+=e.levelData.byteLength}const B=new ArrayBuffer(68),w=new DataView(B);return w.setUint32(0,n.vkFormat,!0),w.setUint32(4,n.typeSize,!0),w.setUint32(8,n.pixelWidth,!0),w.setUint32(12,n.pixelHeight,!0),w.setUint32(16,n.pixelDepth,!0),w.setUint32(20,n.layerCount,!0),w.setUint32(24,n.faceCount,!0),w.setUint32(28,n.levels.length,!0),w.setUint32(32,n.supercompressionScheme,!0),w.setUint32(36,_,!0),w.setUint32(40,f.byteLength,!0),w.setUint32(44,p,!0),w.setUint32(48,l.byteLength,!0),w.setBigUint64(52,BigInt(y),!0),w.setBigUint64(60,BigInt(a.byteLength),!0),new Uint8Array(g([new Uint8Array(e).buffer,B,b.buffer,f,l,new ArrayBuffer(y-(p+l.byteLength)),a,...D]))}export{U as KTX2Container,p as read,y as write}; | ||
//# sourceMappingURL=ktx-parse.modern.js.map |
{ | ||
"name": "ktx-parse", | ||
"version": "0.0.3", | ||
"version": "0.0.4", | ||
"description": "KTX 2.0 (.ktx2) parser and serializer.", | ||
@@ -5,0 +5,0 @@ "source": "src/index.ts", |
# ktx-parse | ||
![Status](https://img.shields.io/badge/status-incomplete-orange.svg) | ||
[![Latest NPM release](https://img.shields.io/npm/v/ktx-parse.svg)](https://www.npmjs.com/package/ktx-parse) | ||
@@ -12,4 +11,2 @@ [![Minzipped size](https://badgen.net/bundlephobia/minzip/ktx-parse)](https://bundlephobia.com/result?p=ktx-parse) | ||
> _**NOTICE**: Work in progress._ | ||
## Quickstart | ||
@@ -76,3 +73,3 @@ | ||
*Defined in [src/read.ts:13](https://github.com/donmccurdy/KTX-Parse/blob/a6f24b4/src/read.ts#L13)* | ||
*Defined in [src/read.ts:13](https://github.com/donmccurdy/KTX-Parse/blob/bfff943/src/read.ts#L13)* | ||
@@ -100,3 +97,3 @@ Parses a KTX 2.0 file, returning an unpacked `KTX2Container` instance with all associated | ||
*Defined in [src/write.ts:20](https://github.com/donmccurdy/KTX-Parse/blob/a6f24b4/src/write.ts#L20)* | ||
*Defined in [src/write.ts:20](https://github.com/donmccurdy/KTX-Parse/blob/bfff943/src/write.ts#L20)* | ||
@@ -136,3 +133,3 @@ Serializes a `KTX2Container` instance to a KTX 2.0 file. Mip levels and other binary data | ||
*Defined in [src/container.ts:47](https://github.com/donmccurdy/KTX-Parse/blob/a6f24b4/src/container.ts#L47)* | ||
*Defined in [src/container.ts:47](https://github.com/donmccurdy/KTX-Parse/blob/bfff943/src/container.ts#L47)* | ||
@@ -147,3 +144,3 @@ Data Format Descriptor. | ||
*Defined in [src/container.ts:38](https://github.com/donmccurdy/KTX-Parse/blob/a6f24b4/src/container.ts#L38)* | ||
*Defined in [src/container.ts:38](https://github.com/donmccurdy/KTX-Parse/blob/bfff943/src/container.ts#L38)* | ||
@@ -160,3 +157,3 @@ Number of cubemap faces. For cubemaps and cubemap arrays, `faceCount` must be 6. For all | ||
*Defined in [src/container.ts:65](https://github.com/donmccurdy/KTX-Parse/blob/a6f24b4/src/container.ts#L65)* | ||
*Defined in [src/container.ts:65](https://github.com/donmccurdy/KTX-Parse/blob/bfff943/src/container.ts#L65)* | ||
@@ -171,3 +168,3 @@ Supercompression Global Data. | ||
*Defined in [src/container.ts:62](https://github.com/donmccurdy/KTX-Parse/blob/a6f24b4/src/container.ts#L62)* | ||
*Defined in [src/container.ts:62](https://github.com/donmccurdy/KTX-Parse/blob/bfff943/src/container.ts#L62)* | ||
@@ -182,3 +179,3 @@ Key/Value Data. | ||
*Defined in [src/container.ts:31](https://github.com/donmccurdy/KTX-Parse/blob/a6f24b4/src/container.ts#L31)* | ||
*Defined in [src/container.ts:31](https://github.com/donmccurdy/KTX-Parse/blob/bfff943/src/container.ts#L31)* | ||
@@ -193,3 +190,3 @@ Number of array elements (array textures only). | ||
*Defined in [src/container.ts:44](https://github.com/donmccurdy/KTX-Parse/blob/a6f24b4/src/container.ts#L44)* | ||
*Defined in [src/container.ts:44](https://github.com/donmccurdy/KTX-Parse/blob/bfff943/src/container.ts#L44)* | ||
@@ -204,3 +201,3 @@ Mip levels, ordered largest (original) to smallest (~1px). | ||
*Defined in [src/container.ts:28](https://github.com/donmccurdy/KTX-Parse/blob/a6f24b4/src/container.ts#L28)* | ||
*Defined in [src/container.ts:28](https://github.com/donmccurdy/KTX-Parse/blob/bfff943/src/container.ts#L28)* | ||
@@ -215,3 +212,3 @@ Depth of the texture image for level 0, in pixels (3D textures only). | ||
*Defined in [src/container.ts:25](https://github.com/donmccurdy/KTX-Parse/blob/a6f24b4/src/container.ts#L25)* | ||
*Defined in [src/container.ts:25](https://github.com/donmccurdy/KTX-Parse/blob/bfff943/src/container.ts#L25)* | ||
@@ -226,3 +223,3 @@ Height of the texture image for level 0, in pixels. | ||
*Defined in [src/container.ts:22](https://github.com/donmccurdy/KTX-Parse/blob/a6f24b4/src/container.ts#L22)* | ||
*Defined in [src/container.ts:22](https://github.com/donmccurdy/KTX-Parse/blob/bfff943/src/container.ts#L22)* | ||
@@ -237,3 +234,3 @@ Width of the texture image for level 0, in pixels. | ||
*Defined in [src/container.ts:41](https://github.com/donmccurdy/KTX-Parse/blob/a6f24b4/src/container.ts#L41)* | ||
*Defined in [src/container.ts:41](https://github.com/donmccurdy/KTX-Parse/blob/bfff943/src/container.ts#L41)* | ||
@@ -248,3 +245,3 @@ Indicates which supercompression scheme has been applied to mip level images, if any. | ||
*Defined in [src/container.ts:19](https://github.com/donmccurdy/KTX-Parse/blob/a6f24b4/src/container.ts#L19)* | ||
*Defined in [src/container.ts:19](https://github.com/donmccurdy/KTX-Parse/blob/bfff943/src/container.ts#L19)* | ||
@@ -260,3 +257,3 @@ Size of the data type in bytes used to upload the data to a graphics API. When `vkFormat` is | ||
*Defined in [src/container.ts:13](https://github.com/donmccurdy/KTX-Parse/blob/a6f24b4/src/container.ts#L13)* | ||
*Defined in [src/container.ts:13](https://github.com/donmccurdy/KTX-Parse/blob/bfff943/src/container.ts#L13)* | ||
@@ -263,0 +260,0 @@ Specifies the image format using Vulkan VkFormat enum values. When using Basis Universal |
@@ -77,3 +77,12 @@ import { KHR_DF_BLOCKSIZE, KHR_DF_VENDORID_KHRONOS, KHR_DF_VERSION, KTX2DataFormatFlags, KTX2DataFormatModel, KTX2DataFormatPrimaries, KTX2DataFormatType, KTX2SupercompressionScheme, VK_FORMAT_UNDEFINED } from './constants'; | ||
/** Uncompressed size of the mip level. */ | ||
/** | ||
* Size of the mip level after reflation from supercompression, if applicable. When | ||
* `supercompressionType` is BASISLZ, `uncompressedByteLength` must be 0. When | ||
* `supercompressionType` is `NONE`, `uncompressedByteLength` must match the `levelData` byte | ||
* length. | ||
* | ||
* _**NOTICE:** this implies that for formats such as UASTC, `uncompressedByteLength` may | ||
* indicate size after ZSTD reflation (and of transcoded ASTC data), but does _not_ indicate | ||
* size of decoded RGBA32 pixels._ | ||
*/ | ||
uncompressedByteLength: number; | ||
@@ -80,0 +89,0 @@ }; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
176567
982
0
249