@rings-webgpu/core 1.0.10 → 1.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5811,202 +5811,219 @@ var<uniform> materialUniform: MaterialUniform;
5811
5811
  }
5812
5812
  `;
5813
5813
 
5814
- let ShadowMapping_frag = `
5815
- @group(1) @binding(auto) var shadowMapSampler: sampler;
5814
+ let ShadowMapping_frag = (
5815
+ /*wgsl*/
5816
+ `
5817
+ @group(1) @binding(auto) var shadowMapSampler: sampler_comparison;
5816
5818
  @group(1) @binding(auto) var shadowMap: texture_depth_2d_array;
5817
- @group(1) @binding(auto) var pointShadowMapSampler: sampler;
5819
+ @group(1) @binding(auto) var pointShadowMapSampler: sampler_comparison;
5818
5820
  @group(1) @binding(auto) var pointShadowMap: texture_depth_cube_array;
5819
5821
 
5820
5822
  var<private> directShadowVisibility: array<f32, 8>;
5821
5823
  var<private> pointShadows: array<f32, 8>;
5822
- var<private> shadowWeight: f32 = 1.0;
5824
+ var<private> shadowWeight: f32 = 1.0 ;
5823
5825
 
5824
5826
  fn useShadow(){
5825
- directShadowVisibility = array<f32, 8>(1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0);
5827
+ directShadowVisibility = array<f32, 8>( 1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0) ;
5826
5828
  pointShadows = array<f32, 8>(1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0) ;
5827
5829
  directShadowMaping(globalUniform.shadowBias);
5828
5830
  pointShadowMapCompare(globalUniform.pointShadowBias);
5829
5831
  }
5830
5832
 
5831
5833
  fn calcBasicBias(shadowWorldSize:f32, shadowDepthTexSize:f32, near:f32, far:f32) -> f32{
5832
- var bias = shadowWorldSize / shadowDepthTexSize;
5833
- bias = bias / (far - near);
5834
- return bias * 2.0;
5834
+ var bias = shadowWorldSize / shadowDepthTexSize;
5835
+ bias = bias / (far - near);
5836
+ return bias * 2.0;
5835
5837
  }
5836
5838
 
5837
- const dirCount:i32 = 8;
5838
- const pointCount:i32 = 8;
5839
- const csmCount:i32 = ${CSM.Cascades};
5839
+ const dirCount:i32 = 8 ;
5840
+ const pointCount:i32 = 8 ;
5841
+ const csmCount:i32 = ${CSM.Cascades} ;
5840
5842
  var<private> csmLevel:i32 = -1;
5843
+ fn directShadowMaping(shadowBias: f32) {
5841
5844
 
5842
- fn directShadowMaping(shadowBias: f32) {
5843
5845
  let enableCSM:bool = globalUniform.enableCSM > 0.5;
5844
- for(var i:i32 = 0; i < dirCount; i = i+1){
5845
- if(i >= globalUniform.nDirShadowStart && i < globalUniform.nDirShadowEnd){
5846
- let ldx = globalUniform.shadowLights[u32(i) / 4u][u32(i) % 4u];
5847
- let light = lightBuffer[u32(ldx)] ;
5848
- var shadowIndex = i32(light.castShadow);
5849
- var visibility = 1.0;
5850
- var shadowMatrix:mat4x4<f32>;
5851
- #if USE_CSM
5852
- if(enableCSM && shadowIndex == 0){
5853
- var totalWeight = 0.0;
5854
- visibility = 0.0;
5855
- var validCount = 0;
5856
- for(var csm:i32 = 0; csm < csmCount; csm ++){
5857
- var csmShadowBias = globalUniform.csmShadowBias[csm] * shadowBias;
5858
- shadowMatrix = globalUniform.csmMatrix[csm];
5859
- let csmShadowResult = directShadowMapingIndex(light, shadowMatrix, csm, csmShadowBias);
5860
- if(csmShadowResult.y < 0.5){
5861
- validCount ++;
5862
- var uv = 2.0 * csmShadowResult.zw - vec2<f32>(1.0);
5863
- uv = saturate(vec2<f32>(1.0) - abs(uv));
5864
- uv /= clamp(globalUniform.csmMargin, 0.01, 0.5);
5865
- var weight:f32 = min(uv.x, 1.0);
5866
- weight = min(weight, uv.y);
5867
-
5868
- if(validCount == 1 && csm == csmCount - 1){
5869
- visibility = 1.0 - weight + csmShadowResult.x * weight;
5870
- totalWeight = 1.0;
5871
- }else{
5872
- weight *= 1.0 - totalWeight;
5873
- visibility += csmShadowResult.x * weight;
5874
- totalWeight += weight;
5875
- };
5876
-
5877
- if(validCount >= 2 || totalWeight >= 0.99){
5878
- csmLevel = csm;
5879
- break;
5880
- };
5881
- }
5882
- }
5883
-
5884
- totalWeight += 0.0001;
5885
- if(validCount == 0){
5886
- visibility = 1.0;
5887
- }else{
5888
- visibility = visibility / totalWeight ;
5889
- };
5890
- } else {
5891
- shadowMatrix = globalUniform.shadowMatrix[shadowIndex];
5892
- if(enableCSM) {
5893
- shadowIndex += csmCount - 1;
5894
- }
5895
- visibility = directShadowMapingIndex(light, shadowMatrix, shadowIndex, shadowBias).x;
5846
+ for (var i: i32 = 0; i < dirCount ; i = i + 1) {
5847
+ if( i >= globalUniform.nDirShadowStart && i < globalUniform.nDirShadowEnd ){
5848
+ let ldx = globalUniform.shadowLights[u32(i) / 4u][u32(i) % 4u];
5849
+ let light = lightBuffer[u32(ldx)] ;
5850
+ var shadowIndex = i32(light.castShadow);
5851
+ var visibility = 1.0;
5852
+ var shadowMatrix:mat4x4<f32>;
5853
+ #if USE_CSM
5854
+ if(enableCSM && shadowIndex == 0){
5855
+ var totalWeight = 0.0;
5856
+ visibility = 0.0;
5857
+ var validCount = 0;
5858
+ for(var csm:i32 = 0; csm < csmCount; csm ++){
5859
+ var csmShadowBias = globalUniform.csmShadowBias[csm] * shadowBias;
5860
+ shadowMatrix = globalUniform.csmMatrix[csm];
5861
+ let csmShadowResult = directShadowMapingIndex(light, shadowMatrix, csm, csmShadowBias);
5862
+ if(csmShadowResult.y < 0.5){
5863
+ validCount ++;
5864
+
5865
+ var uv = 2.0 * csmShadowResult.zw - vec2<f32>(1.0);
5866
+ uv = saturate(vec2<f32>(1.0) - abs(uv));
5867
+ uv /= clamp(globalUniform.csmMargin, 0.01, 0.5);
5868
+ var weight:f32 = min(uv.x, 1.0);
5869
+ weight = min(weight, uv.y);
5870
+
5871
+ if(validCount == 1 && csm == csmCount - 1){
5872
+ visibility = 1.0 - weight + csmShadowResult.x * weight;
5873
+ totalWeight = 1.0;
5874
+ }else{
5875
+ weight *= 1.0 - totalWeight;
5876
+ visibility += csmShadowResult.x * weight;
5877
+ totalWeight += weight;
5896
5878
  }
5897
- #else
5898
- shadowMatrix = globalUniform.shadowMatrix[shadowIndex];
5899
- visibility = directShadowMapingIndex(light, shadowMatrix, shadowIndex, shadowBias).x;
5900
- #endif
5901
- directShadowVisibility[i] = visibility;
5902
- }
5879
+ // if(weight < 1.0){
5880
+ // visibility += 0.1;
5881
+ // }
5882
+ if(validCount >= 2 || totalWeight >= 0.99){
5883
+ csmLevel = csm;
5884
+ break;
5885
+ }
5886
+ }
5887
+ }
5888
+ totalWeight += 0.0001;
5889
+ if(validCount == 0){
5890
+ visibility = 1.0;
5891
+ }else{
5892
+ visibility = visibility / totalWeight ;
5893
+ }
5894
+ }else{
5895
+ shadowMatrix = globalUniform.shadowMatrix[shadowIndex];
5896
+ if(enableCSM) {
5897
+ shadowIndex += csmCount - 1;
5898
+ }
5899
+ visibility = directShadowMapingIndex(light, shadowMatrix, shadowIndex, shadowBias).x;
5900
+ }
5901
+ #else
5902
+ shadowMatrix = globalUniform.shadowMatrix[shadowIndex];
5903
+ visibility = directShadowMapingIndex(light, shadowMatrix, shadowIndex, shadowBias).x;
5904
+ #endif
5905
+ directShadowVisibility[i] = visibility;
5906
+ }
5903
5907
  }
5908
+
5904
5909
  }
5905
5910
 
5906
- fn directShadowMapingIndex(light:LightData, matrix:mat4x4<f32>, depthTexIndex:i32, shadowBias:f32) -> vec4<f32> {
5907
- var visibility = 1.0;
5908
- var isOutSideArea:f32 = 1.0;
5909
- var varying_shadowUV:vec2<f32> = vec2<f32>(0.0);
5910
- #if USE_SHADOWMAPING
5911
- var shadowPosTmp = matrix * vec4<f32>(ORI_VertexVarying.vWorldPos.xyz, 1.0);
5912
- var shadowPos = shadowPosTmp.xyz / shadowPosTmp.w;
5913
- varying_shadowUV = shadowPos.xy * vec2<f32>(0.5, -0.5) + vec2<f32>(0.5, 0.5);
5914
- if (varying_shadowUV.x <= 1.0
5915
- && varying_shadowUV.x >= 0.0
5916
- && varying_shadowUV.y <= 1.0
5917
- && varying_shadowUV.y >= 0.0
5918
- && shadowPosTmp.z <= 1.0
5919
- && shadowPosTmp.z >= 0.0){
5920
- visibility = 0.0;
5921
- isOutSideArea = 0.0;
5922
- var uvOnePixel = 1.0 / vec2<f32>(globalUniform.shadowMapSize) ;
5923
- var totalWeight = 0.0;
5924
- var bias = -0.005 * max(dot(fragData.N, -light.direction) , 0.0 );
5925
- bias = clamp(bias, 0, 0.01) + -shadowBias;
5926
- let bound = 1;
5927
- for (var y = -bound; y <= bound; y++) {
5928
- for(var x = -bound; x <= bound; x++) {
5929
- var offset = vec2<f32>(f32(x), f32(y)) ;
5930
- var offsetUV = offset * uvOnePixel ;
5931
- var weight = min(length(offset),1.0) ;
5932
- var depth = textureSampleLevel(shadowMap, shadowMapSampler, varying_shadowUV + offsetUV , depthTexIndex, 0);
5933
- if ((shadowPos.z - bias ) < depth) {
5934
- visibility += weight ;
5935
- totalWeight += weight;
5936
- }else{
5937
- totalWeight += 1.0;
5938
- };
5939
- }
5911
+ fn directShadowMapingIndex(light:LightData, matrix:mat4x4<f32>, depthTexIndex:i32, shadowBias:f32) -> vec4<f32>
5912
+ {
5913
+ var visibility = 1.0;
5914
+ var isOutSideArea:f32 = 1.0;
5915
+ var varying_shadowUV:vec2<f32> = vec2<f32>(0.0);
5916
+ #if USE_SHADOWMAPING
5917
+ var shadowPosTmp = matrix * vec4<f32>(ORI_VertexVarying.vWorldPos.xyz, 1.0);
5918
+ var shadowPos = shadowPosTmp.xyz / shadowPosTmp.w;
5919
+ varying_shadowUV = shadowPos.xy * vec2<f32>(0.5, -0.5) + vec2<f32>(0.5, 0.5);
5920
+ if (varying_shadowUV.x <= 1.0
5921
+ && varying_shadowUV.x >= 0.0
5922
+ && varying_shadowUV.y <= 1.0
5923
+ && varying_shadowUV.y >= 0.0
5924
+ && shadowPosTmp.z <= 1.0
5925
+ && shadowPosTmp.z >= 0.0)
5926
+ {
5927
+ visibility = 0.0;
5928
+ isOutSideArea = 0.0;
5929
+ var uvOnePixel = 1.0 / vec2<f32>(globalUniform.shadowMapSize) ;
5930
+ var totalWeight = 0.0;
5931
+ // var NoL = (dot(normalize(ORI_VertexVarying.vWorldNormal), normalize(-light.direction)));
5932
+ // let v = max(NoL, 0.0) ;
5933
+ // var bias = max(0.05 * (dot(normalize(fragData.N), normalize(-light.direction)) ), -shadowBias);
5934
+ var bias = -0.005 * max(dot(fragData.N, -light.direction) , 0.0 );
5935
+ bias = clamp(bias, 0, 0.01) + -shadowBias;
5936
+
5937
+ // var bias = shadowBias / v;
5938
+ let bound = 1 ;
5939
+ for (var y = -bound; y <= bound; y++) {
5940
+ for (var x = -bound; x <= bound; x++) {
5941
+ var offset = vec2<f32>(f32(x), f32(y)) ;
5942
+ var offsetUV = offset * uvOnePixel ;
5943
+ var weight = min(length(offset),1.0) ;
5944
+ var depth = textureSampleCompareLevel(shadowMap, shadowMapSampler, varying_shadowUV + offsetUV , depthTexIndex, shadowPos.z - bias);
5945
+ if (depth < 0.5) {
5946
+ totalWeight += 1.0;
5947
+ }else{
5948
+ visibility += weight;
5949
+ totalWeight += weight;
5940
5950
  }
5941
- visibility /= totalWeight;
5942
5951
  }
5943
- #endif
5944
- return vec4<f32>(visibility, isOutSideArea, varying_shadowUV);
5945
- }
5946
-
5947
- fn pointShadowMapCompare(shadowBias: f32) {
5948
- let worldPos = ORI_VertexVarying.vWorldPos.xyz;
5949
- let offset = 0.1;
5950
- for(var i: i32 = 0; i < pointCount ; i = i + 1){
5951
- if( i >= globalUniform.nPointShadowStart && i < globalUniform.nPointShadowEnd ){
5952
- let ldx = globalUniform.shadowLights[u32(i) / 4u][u32(i) % 4u];
5953
- let light = lightBuffer[u32(ldx)];
5954
-
5955
- #if USE_SHADOWMAPING
5956
- let lightPos = light.position.xyz;
5957
- var shadow = 0.0;
5958
- let frgToLight = worldPos - lightPos.xyz;
5959
- var dir: vec3<f32> = normalize(frgToLight);
5960
- var len = length(frgToLight);
5961
- var bias = max(shadowBias * globalUniform.far * (1.0 - dot(ORI_ShadingInput.Normal, dir)), 0.005);
5962
-
5963
- #if USE_PCF_SHADOW
5964
- let samples = 4.0;
5965
- let sampleOffset = offset / (samples * 0.5);
5966
- for (var x: f32 = -offset; x < offset; x += sampleOffset) {
5967
- for (var y: f32 = -offset; y < offset; y += sampleOffset) {
5968
- for (var z: f32 = -offset; z < offset; z += sampleOffset) {
5969
- let offsetDir = normalize(dir.xyz + vec3<f32>(x, y, z));
5970
- var depth = textureSampleLevel(pointShadowMap, pointShadowMapSampler, offsetDir, light.castShadow, 0);
5971
- depth *= globalUniform.far;
5972
- if ((len - bias) > depth) {
5973
- shadow += 1.0 * dot(offsetDir, dir.xyz);
5974
- }
5975
- }
5976
- }
5977
- }
5978
- shadow = min(max(shadow / (samples * samples * samples), 0.0), 1.0);
5979
- #endif
5952
+ }
5953
+ visibility /= totalWeight;
5954
+ }
5955
+ #endif
5956
+ return vec4<f32>(visibility, isOutSideArea, varying_shadowUV);
5957
+ }
5958
+
5959
+ fn pointShadowMapCompare(shadowBias: f32){
5960
+ let worldPos = ORI_VertexVarying.vWorldPos.xyz;
5961
+ let offset = 0.1;
5980
5962
 
5981
- #if USE_SOFT_SHADOW
5982
- let vDis = length(globalUniform.CameraPos.xyz - worldPos.xyz);
5983
- let sampleRadies = globalUniform.shadowSoft;
5984
- let samples = 20;
5985
- for (var j:i32 = 0; j < samples; j += 1) {
5986
- let offsetDir = normalize(dir.xyz + sampleOffsetDir[j] * sampleRadies);
5987
- var depth = textureSampleLevel(pointShadowMap, pointShadowMapSampler, offsetDir, light.castShadow, 0);
5988
- depth *= globalUniform.far;
5989
- if ((len - bias) > depth) {
5990
- shadow += 1.0 * dot(offsetDir, dir.xyz);
5963
+ for (var i: i32 = 0; i < pointCount ; i = i + 1) {
5964
+ if( i >= globalUniform.nPointShadowStart && i < globalUniform.nPointShadowEnd ){
5965
+ let ldx = globalUniform.shadowLights[u32(i) / 4u][u32(i) % 4u];
5966
+ let light = lightBuffer[u32(ldx)] ;
5967
+
5968
+ #if USE_SHADOWMAPING
5969
+ let lightPos = light.position.xyz;
5970
+ var shadow = 0.0;
5971
+ let frgToLight = worldPos - lightPos.xyz;
5972
+ var dir: vec3<f32> = normalize(frgToLight);
5973
+ var len = length(frgToLight);
5974
+ var bias = max(shadowBias * globalUniform.far * (1.0 - dot(ORI_ShadingInput.Normal, dir)), 0.005);
5975
+
5976
+ #if USE_PCF_SHADOW
5977
+ let samples = 4.0;
5978
+ let sampleOffset = offset / (samples * 0.5);
5979
+ for (var x: f32 = -offset; x < offset; x += sampleOffset) {
5980
+ for (var y: f32 = -offset; y < offset; y += sampleOffset) {
5981
+ for (var z: f32 = -offset; z < offset; z += sampleOffset) {
5982
+ let compareZ = (len - bias) / globalUniform.far;
5983
+ var depth = textureSampleCompareLevel(pointShadowMap, pointShadowMapSampler, dir.xyz, light.castShadow, compareZ);
5984
+ if (depth < 0.5) {
5985
+ shadow = 1.0;
5991
5986
  }
5987
+ for (var j = 0; j < pointCount ; j+=1 ){
5988
+ if(i32(light.castShadow) == j){
5989
+ pointShadows[j] = 1.0 - shadow;
5990
+ }
5991
+ }
5992
+ }
5992
5993
  }
5993
- shadow = min(max(shadow / f32(samples), 0.0), 1.0);
5994
+ }
5995
+ shadow = min(max(shadow / (samples * samples * samples), 0.0), 1.0);
5994
5996
  #endif
5995
-
5996
- #if USE_HARD_SHADOW
5997
- var depth = textureSampleLevel(pointShadowMap, pointShadowMapSampler, dir.xyz, light.castShadow, 0);
5997
+
5998
+ #if USE_SOFT_SHADOW
5999
+ let vDis = length(globalUniform.CameraPos.xyz - worldPos.xyz);
6000
+ let sampleRadies = globalUniform.shadowSoft;
6001
+ let samples = 20;
6002
+ for (var j: i32 = 0; j < samples; j += 1) {
6003
+ let offsetDir = normalize(dir.xyz + sampleOffsetDir[j] * sampleRadies);
6004
+ var depth = textureSampleCompareLevel(pointShadowMap, pointShadowMapSampler, offsetDir, light.castShadow, 0);
5998
6005
  depth *= globalUniform.far;
5999
6006
  if ((len - bias) > depth) {
6000
- shadow = 1.0;
6001
- }
6002
- #endif
6003
- for (var j=0; j < pointCount; j+=1) {
6004
- if(i32(light.castShadow) == j){
6005
- pointShadows[j] = 1.0 - shadow;
6006
- }
6007
+ shadow += 1.0 * dot(offsetDir, dir.xyz);
6007
6008
  }
6008
- #endif
6009
- }
6009
+ }
6010
+ shadow = min(max(shadow / f32(samples), 0.0), 1.0);
6011
+ #endif
6012
+
6013
+ #if USE_HARD_SHADOW
6014
+ var depth = textureSampleCompareLevel(pointShadowMap, pointShadowMapSampler, dir.xyz, light.castShadow, 0);
6015
+ depth *= globalUniform.far;
6016
+ if ((len - bias) > depth) {
6017
+ shadow = 1.0;
6018
+ }
6019
+ #endif
6020
+ for (var j = 0; j < pointCount ; j+=1 ) {
6021
+ if(i32(light.castShadow) == j){
6022
+ pointShadows[j] = 1.0 - shadow ;
6023
+ }
6024
+ }
6025
+ #endif
6026
+ }
6010
6027
  }
6011
6028
  }
6012
6029
 
@@ -6019,7 +6036,8 @@ var<uniform> materialUniform: MaterialUniform;
6019
6036
  vec3<f32>(0.0, 1.0, 1.0), vec3<f32>(0.0, -1.0, 1.0), vec3<f32>(0.0, -1.0, -1.0), vec3<f32>(0.0, 1.0, -1.0),
6020
6037
  );
6021
6038
  #endif
6022
- `;
6039
+ `
6040
+ );
6023
6041
 
6024
6042
  let Irradiance_frag = `
6025
6043
  #include "IrradianceVolumeData_frag"
@@ -39287,483 +39305,483 @@ fn CsMain( @builtin(workgroup_id) workgroup_id : vec3<u32> , @builtin(global_inv
39287
39305
  }
39288
39306
  }
39289
39307
 
39290
- // DEFLATE is a complex format; to read this code, you should probably check the RFC first:
39291
- // https://tools.ietf.org/html/rfc1951
39292
- // You may also wish to take a look at the guide I made about this program:
39293
- // https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad
39294
- // Some of the following code is similar to that of UZIP.js:
39295
- // https://github.com/photopea/UZIP.js
39296
- // However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.
39297
- // Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint
39298
- // is better for memory in most engines (I *think*).
39299
-
39300
- // aliases for shorter compressed code (most minifers don't do this)
39301
- var u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array;
39302
- // fixed length extra bits
39303
- var fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);
39304
- // fixed distance extra bits
39305
- var fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);
39306
- // code length index map
39307
- var clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);
39308
- // get base, reverse index map from extra bits
39309
- var freb = function (eb, start) {
39310
- var b = new u16(31);
39311
- for (var i = 0; i < 31; ++i) {
39312
- b[i] = start += 1 << eb[i - 1];
39313
- }
39314
- // numbers here are at max 18 bits
39315
- var r = new i32(b[30]);
39316
- for (var i = 1; i < 30; ++i) {
39317
- for (var j = b[i]; j < b[i + 1]; ++j) {
39318
- r[j] = ((j - b[i]) << 5) | i;
39319
- }
39320
- }
39321
- return { b: b, r: r };
39322
- };
39323
- var _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;
39324
- // we can ignore the fact that the other numbers are wrong; they never happen anyway
39325
- fl[28] = 258, revfl[258] = 28;
39326
- var _b = freb(fdeb, 0), fd = _b.b;
39327
- // map of value to reverse (assuming 16 bits)
39328
- var rev = new u16(32768);
39329
- for (var i = 0; i < 32768; ++i) {
39330
- // reverse table algorithm from SO
39331
- var x = ((i & 0xAAAA) >> 1) | ((i & 0x5555) << 1);
39332
- x = ((x & 0xCCCC) >> 2) | ((x & 0x3333) << 2);
39333
- x = ((x & 0xF0F0) >> 4) | ((x & 0x0F0F) << 4);
39334
- rev[i] = (((x & 0xFF00) >> 8) | ((x & 0x00FF) << 8)) >> 1;
39335
- }
39336
- // create huffman tree from u8 "map": index -> code length for code index
39337
- // mb (max bits) must be at most 15
39338
- // TODO: optimize/split up?
39339
- var hMap = (function (cd, mb, r) {
39340
- var s = cd.length;
39341
- // index
39342
- var i = 0;
39343
- // u16 "map": index -> # of codes with bit length = index
39344
- var l = new u16(mb);
39345
- // length of cd must be 288 (total # of codes)
39346
- for (; i < s; ++i) {
39347
- if (cd[i])
39348
- ++l[cd[i] - 1];
39349
- }
39350
- // u16 "map": index -> minimum code for bit length = index
39351
- var le = new u16(mb);
39352
- for (i = 1; i < mb; ++i) {
39353
- le[i] = (le[i - 1] + l[i - 1]) << 1;
39354
- }
39355
- var co;
39356
- if (r) {
39357
- // u16 "map": index -> number of actual bits, symbol for code
39358
- co = new u16(1 << mb);
39359
- // bits to remove for reverser
39360
- var rvb = 15 - mb;
39361
- for (i = 0; i < s; ++i) {
39362
- // ignore 0 lengths
39363
- if (cd[i]) {
39364
- // num encoding both symbol and bits read
39365
- var sv = (i << 4) | cd[i];
39366
- // free bits
39367
- var r_1 = mb - cd[i];
39368
- // start value
39369
- var v = le[cd[i] - 1]++ << r_1;
39370
- // m is end value
39371
- for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {
39372
- // every 16 bit value starting with the code yields the same result
39373
- co[rev[v] >> rvb] = sv;
39374
- }
39375
- }
39376
- }
39377
- }
39378
- else {
39379
- co = new u16(s);
39380
- for (i = 0; i < s; ++i) {
39381
- if (cd[i]) {
39382
- co[i] = rev[le[cd[i] - 1]++] >> (15 - cd[i]);
39383
- }
39384
- }
39385
- }
39386
- return co;
39387
- });
39388
- // fixed length tree
39389
- var flt = new u8(288);
39390
- for (var i = 0; i < 144; ++i)
39391
- flt[i] = 8;
39392
- for (var i = 144; i < 256; ++i)
39393
- flt[i] = 9;
39394
- for (var i = 256; i < 280; ++i)
39395
- flt[i] = 7;
39396
- for (var i = 280; i < 288; ++i)
39397
- flt[i] = 8;
39398
- // fixed distance tree
39399
- var fdt = new u8(32);
39400
- for (var i = 0; i < 32; ++i)
39401
- fdt[i] = 5;
39402
- // fixed length map
39403
- var flrm = /*#__PURE__*/ hMap(flt, 9, 1);
39404
- // fixed distance map
39405
- var fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);
39406
- // find max of array
39407
- var max = function (a) {
39408
- var m = a[0];
39409
- for (var i = 1; i < a.length; ++i) {
39410
- if (a[i] > m)
39411
- m = a[i];
39412
- }
39413
- return m;
39414
- };
39415
- // read d, starting at bit p and mask with m
39416
- var bits = function (d, p, m) {
39417
- var o = (p / 8) | 0;
39418
- return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;
39419
- };
39420
- // read d, starting at bit p continuing for at least 16 bits
39421
- var bits16 = function (d, p) {
39422
- var o = (p / 8) | 0;
39423
- return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));
39424
- };
39425
- // get end of byte
39426
- var shft = function (p) { return ((p + 7) / 8) | 0; };
39427
- // typed array slice - allows garbage collector to free original reference,
39428
- // while being more compatible than .slice
39429
- var slc = function (v, s, e) {
39430
- if (s == null || s < 0)
39431
- s = 0;
39432
- if (e == null || e > v.length)
39433
- e = v.length;
39434
- // can't use .constructor in case user-supplied
39435
- return new u8(v.subarray(s, e));
39436
- };
39437
- // error codes
39438
- var ec = [
39439
- 'unexpected EOF',
39440
- 'invalid block type',
39441
- 'invalid length/literal',
39442
- 'invalid distance',
39443
- 'stream finished',
39444
- 'no stream handler',
39445
- ,
39446
- 'no callback',
39447
- 'invalid UTF-8 data',
39448
- 'extra field too long',
39449
- 'date not in range 1980-2099',
39450
- 'filename too long',
39451
- 'stream finishing',
39452
- 'invalid zip data'
39453
- // determined by unknown compression method
39454
- ];
39455
- var err = function (ind, msg, nt) {
39456
- var e = new Error(msg || ec[ind]);
39457
- e.code = ind;
39458
- if (Error.captureStackTrace)
39459
- Error.captureStackTrace(e, err);
39460
- if (!nt)
39461
- throw e;
39462
- return e;
39463
- };
39464
- // expands raw DEFLATE data
39465
- var inflt = function (dat, st, buf, dict) {
39466
- // source length dict length
39467
- var sl = dat.length, dl = dict ? dict.length : 0;
39468
- if (!sl || st.f && !st.l)
39469
- return buf || new u8(0);
39470
- var noBuf = !buf;
39471
- // have to estimate size
39472
- var resize = noBuf || st.i != 2;
39473
- // no state
39474
- var noSt = st.i;
39475
- // Assumes roughly 33% compression ratio average
39476
- if (noBuf)
39477
- buf = new u8(sl * 3);
39478
- // ensure buffer can fit at least l elements
39479
- var cbuf = function (l) {
39480
- var bl = buf.length;
39481
- // need to increase size to fit
39482
- if (l > bl) {
39483
- // Double or set to necessary, whichever is greater
39484
- var nbuf = new u8(Math.max(bl * 2, l));
39485
- nbuf.set(buf);
39486
- buf = nbuf;
39487
- }
39488
- };
39489
- // last chunk bitpos bytes
39490
- var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;
39491
- // total bits
39492
- var tbts = sl * 8;
39493
- do {
39494
- if (!lm) {
39495
- // BFINAL - this is only 1 when last chunk is next
39496
- final = bits(dat, pos, 1);
39497
- // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman
39498
- var type = bits(dat, pos + 1, 3);
39499
- pos += 3;
39500
- if (!type) {
39501
- // go to end of byte boundary
39502
- var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;
39503
- if (t > sl) {
39504
- if (noSt)
39505
- err(0);
39506
- break;
39507
- }
39508
- // ensure size
39509
- if (resize)
39510
- cbuf(bt + l);
39511
- // Copy over uncompressed data
39512
- buf.set(dat.subarray(s, t), bt);
39513
- // Get new bitpos, update byte count
39514
- st.b = bt += l, st.p = pos = t * 8, st.f = final;
39515
- continue;
39516
- }
39517
- else if (type == 1)
39518
- lm = flrm, dm = fdrm, lbt = 9, dbt = 5;
39519
- else if (type == 2) {
39520
- // literal lengths
39521
- var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;
39522
- var tl = hLit + bits(dat, pos + 5, 31) + 1;
39523
- pos += 14;
39524
- // length+distance tree
39525
- var ldt = new u8(tl);
39526
- // code length tree
39527
- var clt = new u8(19);
39528
- for (var i = 0; i < hcLen; ++i) {
39529
- // use index map to get real code
39530
- clt[clim[i]] = bits(dat, pos + i * 3, 7);
39531
- }
39532
- pos += hcLen * 3;
39533
- // code lengths bits
39534
- var clb = max(clt), clbmsk = (1 << clb) - 1;
39535
- // code lengths map
39536
- var clm = hMap(clt, clb, 1);
39537
- for (var i = 0; i < tl;) {
39538
- var r = clm[bits(dat, pos, clbmsk)];
39539
- // bits read
39540
- pos += r & 15;
39541
- // symbol
39542
- var s = r >> 4;
39543
- // code length to copy
39544
- if (s < 16) {
39545
- ldt[i++] = s;
39546
- }
39547
- else {
39548
- // copy count
39549
- var c = 0, n = 0;
39550
- if (s == 16)
39551
- n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];
39552
- else if (s == 17)
39553
- n = 3 + bits(dat, pos, 7), pos += 3;
39554
- else if (s == 18)
39555
- n = 11 + bits(dat, pos, 127), pos += 7;
39556
- while (n--)
39557
- ldt[i++] = c;
39558
- }
39559
- }
39560
- // length tree distance tree
39561
- var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);
39562
- // max length bits
39563
- lbt = max(lt);
39564
- // max dist bits
39565
- dbt = max(dt);
39566
- lm = hMap(lt, lbt, 1);
39567
- dm = hMap(dt, dbt, 1);
39568
- }
39569
- else
39570
- err(1);
39571
- if (pos > tbts) {
39572
- if (noSt)
39573
- err(0);
39574
- break;
39575
- }
39576
- }
39577
- // Make sure the buffer can hold this + the largest possible addition
39578
- // Maximum chunk size (practically, theoretically infinite) is 2^17
39579
- if (resize)
39580
- cbuf(bt + 131072);
39581
- var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;
39582
- var lpos = pos;
39583
- for (;; lpos = pos) {
39584
- // bits read, code
39585
- var c = lm[bits16(dat, pos) & lms], sym = c >> 4;
39586
- pos += c & 15;
39587
- if (pos > tbts) {
39588
- if (noSt)
39589
- err(0);
39590
- break;
39591
- }
39592
- if (!c)
39593
- err(2);
39594
- if (sym < 256)
39595
- buf[bt++] = sym;
39596
- else if (sym == 256) {
39597
- lpos = pos, lm = null;
39598
- break;
39599
- }
39600
- else {
39601
- var add = sym - 254;
39602
- // no extra bits needed if less
39603
- if (sym > 264) {
39604
- // index
39605
- var i = sym - 257, b = fleb[i];
39606
- add = bits(dat, pos, (1 << b) - 1) + fl[i];
39607
- pos += b;
39608
- }
39609
- // dist
39610
- var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;
39611
- if (!d)
39612
- err(3);
39613
- pos += d & 15;
39614
- var dt = fd[dsym];
39615
- if (dsym > 3) {
39616
- var b = fdeb[dsym];
39617
- dt += bits16(dat, pos) & (1 << b) - 1, pos += b;
39618
- }
39619
- if (pos > tbts) {
39620
- if (noSt)
39621
- err(0);
39622
- break;
39623
- }
39624
- if (resize)
39625
- cbuf(bt + 131072);
39626
- var end = bt + add;
39627
- if (bt < dt) {
39628
- var shift = dl - dt, dend = Math.min(dt, end);
39629
- if (shift + bt < 0)
39630
- err(3);
39631
- for (; bt < dend; ++bt)
39632
- buf[bt] = dict[shift + bt];
39633
- }
39634
- for (; bt < end; ++bt)
39635
- buf[bt] = buf[bt - dt];
39636
- }
39637
- }
39638
- st.l = lm, st.p = lpos, st.b = bt, st.f = final;
39639
- if (lm)
39640
- final = 1, st.m = lbt, st.d = dm, st.n = dbt;
39641
- } while (!final);
39642
- // don't reallocate for streams or user buffers
39643
- return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);
39644
- };
39645
- // empty
39646
- var et = /*#__PURE__*/ new u8(0);
39647
- // read 2 bytes
39648
- var b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };
39649
- // read 4 bytes
39650
- var b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };
39651
- var b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };
39652
- /**
39653
- * Expands DEFLATE data with no wrapper
39654
- * @param data The data to decompress
39655
- * @param opts The decompression options
39656
- * @returns The decompressed version of the data
39657
- */
39658
- function inflateSync(data, opts) {
39659
- return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);
39660
- }
39661
- // text decoder
39662
- var td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();
39663
- // text decoder stream
39664
- var tds = 0;
39665
- try {
39666
- td.decode(et, { stream: true });
39667
- tds = 1;
39668
- }
39669
- catch (e) { }
39670
- // decode UTF8
39671
- var dutf8 = function (d) {
39672
- for (var r = '', i = 0;;) {
39673
- var c = d[i++];
39674
- var eb = (c > 127) + (c > 223) + (c > 239);
39675
- if (i + eb > d.length)
39676
- return { s: r, r: slc(d, i - 1) };
39677
- if (!eb)
39678
- r += String.fromCharCode(c);
39679
- else if (eb == 3) {
39680
- c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,
39681
- r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));
39682
- }
39683
- else if (eb & 1)
39684
- r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));
39685
- else
39686
- r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));
39687
- }
39688
- };
39689
- /**
39690
- * Converts a Uint8Array to a string
39691
- * @param dat The data to decode to string
39692
- * @param latin1 Whether or not to interpret the data as Latin-1. This should
39693
- * not need to be true unless encoding to binary string.
39694
- * @returns The original UTF-8/Latin-1 string
39695
- */
39696
- function strFromU8(dat, latin1) {
39697
- if (latin1) {
39698
- var r = '';
39699
- for (var i = 0; i < dat.length; i += 16384)
39700
- r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));
39701
- return r;
39702
- }
39703
- else if (td) {
39704
- return td.decode(dat);
39705
- }
39706
- else {
39707
- var _a = dutf8(dat), s = _a.s, r = _a.r;
39708
- if (r.length)
39709
- err(8);
39710
- return s;
39711
- }
39712
- }
39713
- // skip local zip header
39714
- var slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };
39715
- // read zip header
39716
- var zh = function (d, b, z) {
39717
- var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl, bs = b4(d, b + 20);
39718
- var _a = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];
39719
- return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];
39720
- };
39721
- // read zip64 extra field
39722
- var z64e = function (d, b) {
39723
- for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))
39724
- ;
39725
- return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];
39726
- };
39727
- /**
39728
- * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better
39729
- * performance with more than one file.
39730
- * @param data The raw compressed ZIP file
39731
- * @param opts The ZIP extraction options
39732
- * @returns The decompressed files
39733
- */
39734
- function unzipSync(data, opts) {
39735
- var files = {};
39736
- var e = data.length - 22;
39737
- for (; b4(data, e) != 0x6054B50; --e) {
39738
- if (!e || data.length - e > 65558)
39739
- err(13);
39740
- }
39741
- var c = b2(data, e + 8);
39742
- if (!c)
39743
- return {};
39744
- var o = b4(data, e + 16);
39745
- var z = o == 4294967295 || c == 65535;
39746
- if (z) {
39747
- var ze = b4(data, e - 12);
39748
- z = b4(data, ze) == 0x6064B50;
39749
- if (z) {
39750
- c = b4(data, ze + 32);
39751
- o = b4(data, ze + 48);
39752
- }
39753
- }
39754
- for (var i = 0; i < c; ++i) {
39755
- var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);
39756
- o = no;
39757
- {
39758
- if (!c_2)
39759
- files[fn] = slc(data, b, b + sc);
39760
- else if (c_2 == 8)
39761
- files[fn] = inflateSync(data.subarray(b, b + sc), { out: new u8(su) });
39762
- else
39763
- err(14, 'unknown compression type ' + c_2);
39764
- }
39765
- }
39766
- return files;
39308
+ // DEFLATE is a complex format; to read this code, you should probably check the RFC first:
39309
+ // https://tools.ietf.org/html/rfc1951
39310
+ // You may also wish to take a look at the guide I made about this program:
39311
+ // https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad
39312
+ // Some of the following code is similar to that of UZIP.js:
39313
+ // https://github.com/photopea/UZIP.js
39314
+ // However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.
39315
+ // Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint
39316
+ // is better for memory in most engines (I *think*).
39317
+
39318
+ // aliases for shorter compressed code (most minifers don't do this)
39319
+ var u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array;
39320
+ // fixed length extra bits
39321
+ var fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);
39322
+ // fixed distance extra bits
39323
+ var fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);
39324
+ // code length index map
39325
+ var clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);
39326
+ // get base, reverse index map from extra bits
39327
+ var freb = function (eb, start) {
39328
+ var b = new u16(31);
39329
+ for (var i = 0; i < 31; ++i) {
39330
+ b[i] = start += 1 << eb[i - 1];
39331
+ }
39332
+ // numbers here are at max 18 bits
39333
+ var r = new i32(b[30]);
39334
+ for (var i = 1; i < 30; ++i) {
39335
+ for (var j = b[i]; j < b[i + 1]; ++j) {
39336
+ r[j] = ((j - b[i]) << 5) | i;
39337
+ }
39338
+ }
39339
+ return { b: b, r: r };
39340
+ };
39341
+ var _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;
39342
+ // we can ignore the fact that the other numbers are wrong; they never happen anyway
39343
+ fl[28] = 258, revfl[258] = 28;
39344
+ var _b = freb(fdeb, 0), fd = _b.b;
39345
+ // map of value to reverse (assuming 16 bits)
39346
+ var rev = new u16(32768);
39347
+ for (var i = 0; i < 32768; ++i) {
39348
+ // reverse table algorithm from SO
39349
+ var x = ((i & 0xAAAA) >> 1) | ((i & 0x5555) << 1);
39350
+ x = ((x & 0xCCCC) >> 2) | ((x & 0x3333) << 2);
39351
+ x = ((x & 0xF0F0) >> 4) | ((x & 0x0F0F) << 4);
39352
+ rev[i] = (((x & 0xFF00) >> 8) | ((x & 0x00FF) << 8)) >> 1;
39353
+ }
39354
+ // create huffman tree from u8 "map": index -> code length for code index
39355
+ // mb (max bits) must be at most 15
39356
+ // TODO: optimize/split up?
39357
+ var hMap = (function (cd, mb, r) {
39358
+ var s = cd.length;
39359
+ // index
39360
+ var i = 0;
39361
+ // u16 "map": index -> # of codes with bit length = index
39362
+ var l = new u16(mb);
39363
+ // length of cd must be 288 (total # of codes)
39364
+ for (; i < s; ++i) {
39365
+ if (cd[i])
39366
+ ++l[cd[i] - 1];
39367
+ }
39368
+ // u16 "map": index -> minimum code for bit length = index
39369
+ var le = new u16(mb);
39370
+ for (i = 1; i < mb; ++i) {
39371
+ le[i] = (le[i - 1] + l[i - 1]) << 1;
39372
+ }
39373
+ var co;
39374
+ if (r) {
39375
+ // u16 "map": index -> number of actual bits, symbol for code
39376
+ co = new u16(1 << mb);
39377
+ // bits to remove for reverser
39378
+ var rvb = 15 - mb;
39379
+ for (i = 0; i < s; ++i) {
39380
+ // ignore 0 lengths
39381
+ if (cd[i]) {
39382
+ // num encoding both symbol and bits read
39383
+ var sv = (i << 4) | cd[i];
39384
+ // free bits
39385
+ var r_1 = mb - cd[i];
39386
+ // start value
39387
+ var v = le[cd[i] - 1]++ << r_1;
39388
+ // m is end value
39389
+ for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {
39390
+ // every 16 bit value starting with the code yields the same result
39391
+ co[rev[v] >> rvb] = sv;
39392
+ }
39393
+ }
39394
+ }
39395
+ }
39396
+ else {
39397
+ co = new u16(s);
39398
+ for (i = 0; i < s; ++i) {
39399
+ if (cd[i]) {
39400
+ co[i] = rev[le[cd[i] - 1]++] >> (15 - cd[i]);
39401
+ }
39402
+ }
39403
+ }
39404
+ return co;
39405
+ });
39406
+ // fixed length tree
39407
+ var flt = new u8(288);
39408
+ for (var i = 0; i < 144; ++i)
39409
+ flt[i] = 8;
39410
+ for (var i = 144; i < 256; ++i)
39411
+ flt[i] = 9;
39412
+ for (var i = 256; i < 280; ++i)
39413
+ flt[i] = 7;
39414
+ for (var i = 280; i < 288; ++i)
39415
+ flt[i] = 8;
39416
+ // fixed distance tree
39417
+ var fdt = new u8(32);
39418
+ for (var i = 0; i < 32; ++i)
39419
+ fdt[i] = 5;
39420
+ // fixed length map
39421
+ var flrm = /*#__PURE__*/ hMap(flt, 9, 1);
39422
+ // fixed distance map
39423
+ var fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);
39424
+ // find max of array
39425
+ var max = function (a) {
39426
+ var m = a[0];
39427
+ for (var i = 1; i < a.length; ++i) {
39428
+ if (a[i] > m)
39429
+ m = a[i];
39430
+ }
39431
+ return m;
39432
+ };
39433
+ // read d, starting at bit p and mask with m
39434
+ var bits = function (d, p, m) {
39435
+ var o = (p / 8) | 0;
39436
+ return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;
39437
+ };
39438
+ // read d, starting at bit p continuing for at least 16 bits
39439
+ var bits16 = function (d, p) {
39440
+ var o = (p / 8) | 0;
39441
+ return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));
39442
+ };
39443
+ // get end of byte
39444
+ var shft = function (p) { return ((p + 7) / 8) | 0; };
39445
+ // typed array slice - allows garbage collector to free original reference,
39446
+ // while being more compatible than .slice
39447
+ var slc = function (v, s, e) {
39448
+ if (s == null || s < 0)
39449
+ s = 0;
39450
+ if (e == null || e > v.length)
39451
+ e = v.length;
39452
+ // can't use .constructor in case user-supplied
39453
+ return new u8(v.subarray(s, e));
39454
+ };
39455
+ // error codes
39456
+ var ec = [
39457
+ 'unexpected EOF',
39458
+ 'invalid block type',
39459
+ 'invalid length/literal',
39460
+ 'invalid distance',
39461
+ 'stream finished',
39462
+ 'no stream handler',
39463
+ ,
39464
+ 'no callback',
39465
+ 'invalid UTF-8 data',
39466
+ 'extra field too long',
39467
+ 'date not in range 1980-2099',
39468
+ 'filename too long',
39469
+ 'stream finishing',
39470
+ 'invalid zip data'
39471
+ // determined by unknown compression method
39472
+ ];
39473
+ var err = function (ind, msg, nt) {
39474
+ var e = new Error(msg || ec[ind]);
39475
+ e.code = ind;
39476
+ if (Error.captureStackTrace)
39477
+ Error.captureStackTrace(e, err);
39478
+ if (!nt)
39479
+ throw e;
39480
+ return e;
39481
+ };
39482
+ // expands raw DEFLATE data
39483
+ var inflt = function (dat, st, buf, dict) {
39484
+ // source length dict length
39485
+ var sl = dat.length, dl = dict ? dict.length : 0;
39486
+ if (!sl || st.f && !st.l)
39487
+ return buf || new u8(0);
39488
+ var noBuf = !buf;
39489
+ // have to estimate size
39490
+ var resize = noBuf || st.i != 2;
39491
+ // no state
39492
+ var noSt = st.i;
39493
+ // Assumes roughly 33% compression ratio average
39494
+ if (noBuf)
39495
+ buf = new u8(sl * 3);
39496
+ // ensure buffer can fit at least l elements
39497
+ var cbuf = function (l) {
39498
+ var bl = buf.length;
39499
+ // need to increase size to fit
39500
+ if (l > bl) {
39501
+ // Double or set to necessary, whichever is greater
39502
+ var nbuf = new u8(Math.max(bl * 2, l));
39503
+ nbuf.set(buf);
39504
+ buf = nbuf;
39505
+ }
39506
+ };
39507
+ // last chunk bitpos bytes
39508
+ var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;
39509
+ // total bits
39510
+ var tbts = sl * 8;
39511
+ do {
39512
+ if (!lm) {
39513
+ // BFINAL - this is only 1 when last chunk is next
39514
+ final = bits(dat, pos, 1);
39515
+ // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman
39516
+ var type = bits(dat, pos + 1, 3);
39517
+ pos += 3;
39518
+ if (!type) {
39519
+ // go to end of byte boundary
39520
+ var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;
39521
+ if (t > sl) {
39522
+ if (noSt)
39523
+ err(0);
39524
+ break;
39525
+ }
39526
+ // ensure size
39527
+ if (resize)
39528
+ cbuf(bt + l);
39529
+ // Copy over uncompressed data
39530
+ buf.set(dat.subarray(s, t), bt);
39531
+ // Get new bitpos, update byte count
39532
+ st.b = bt += l, st.p = pos = t * 8, st.f = final;
39533
+ continue;
39534
+ }
39535
+ else if (type == 1)
39536
+ lm = flrm, dm = fdrm, lbt = 9, dbt = 5;
39537
+ else if (type == 2) {
39538
+ // literal lengths
39539
+ var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;
39540
+ var tl = hLit + bits(dat, pos + 5, 31) + 1;
39541
+ pos += 14;
39542
+ // length+distance tree
39543
+ var ldt = new u8(tl);
39544
+ // code length tree
39545
+ var clt = new u8(19);
39546
+ for (var i = 0; i < hcLen; ++i) {
39547
+ // use index map to get real code
39548
+ clt[clim[i]] = bits(dat, pos + i * 3, 7);
39549
+ }
39550
+ pos += hcLen * 3;
39551
+ // code lengths bits
39552
+ var clb = max(clt), clbmsk = (1 << clb) - 1;
39553
+ // code lengths map
39554
+ var clm = hMap(clt, clb, 1);
39555
+ for (var i = 0; i < tl;) {
39556
+ var r = clm[bits(dat, pos, clbmsk)];
39557
+ // bits read
39558
+ pos += r & 15;
39559
+ // symbol
39560
+ var s = r >> 4;
39561
+ // code length to copy
39562
+ if (s < 16) {
39563
+ ldt[i++] = s;
39564
+ }
39565
+ else {
39566
+ // copy count
39567
+ var c = 0, n = 0;
39568
+ if (s == 16)
39569
+ n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];
39570
+ else if (s == 17)
39571
+ n = 3 + bits(dat, pos, 7), pos += 3;
39572
+ else if (s == 18)
39573
+ n = 11 + bits(dat, pos, 127), pos += 7;
39574
+ while (n--)
39575
+ ldt[i++] = c;
39576
+ }
39577
+ }
39578
+ // length tree distance tree
39579
+ var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);
39580
+ // max length bits
39581
+ lbt = max(lt);
39582
+ // max dist bits
39583
+ dbt = max(dt);
39584
+ lm = hMap(lt, lbt, 1);
39585
+ dm = hMap(dt, dbt, 1);
39586
+ }
39587
+ else
39588
+ err(1);
39589
+ if (pos > tbts) {
39590
+ if (noSt)
39591
+ err(0);
39592
+ break;
39593
+ }
39594
+ }
39595
+ // Make sure the buffer can hold this + the largest possible addition
39596
+ // Maximum chunk size (practically, theoretically infinite) is 2^17
39597
+ if (resize)
39598
+ cbuf(bt + 131072);
39599
+ var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;
39600
+ var lpos = pos;
39601
+ for (;; lpos = pos) {
39602
+ // bits read, code
39603
+ var c = lm[bits16(dat, pos) & lms], sym = c >> 4;
39604
+ pos += c & 15;
39605
+ if (pos > tbts) {
39606
+ if (noSt)
39607
+ err(0);
39608
+ break;
39609
+ }
39610
+ if (!c)
39611
+ err(2);
39612
+ if (sym < 256)
39613
+ buf[bt++] = sym;
39614
+ else if (sym == 256) {
39615
+ lpos = pos, lm = null;
39616
+ break;
39617
+ }
39618
+ else {
39619
+ var add = sym - 254;
39620
+ // no extra bits needed if less
39621
+ if (sym > 264) {
39622
+ // index
39623
+ var i = sym - 257, b = fleb[i];
39624
+ add = bits(dat, pos, (1 << b) - 1) + fl[i];
39625
+ pos += b;
39626
+ }
39627
+ // dist
39628
+ var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;
39629
+ if (!d)
39630
+ err(3);
39631
+ pos += d & 15;
39632
+ var dt = fd[dsym];
39633
+ if (dsym > 3) {
39634
+ var b = fdeb[dsym];
39635
+ dt += bits16(dat, pos) & (1 << b) - 1, pos += b;
39636
+ }
39637
+ if (pos > tbts) {
39638
+ if (noSt)
39639
+ err(0);
39640
+ break;
39641
+ }
39642
+ if (resize)
39643
+ cbuf(bt + 131072);
39644
+ var end = bt + add;
39645
+ if (bt < dt) {
39646
+ var shift = dl - dt, dend = Math.min(dt, end);
39647
+ if (shift + bt < 0)
39648
+ err(3);
39649
+ for (; bt < dend; ++bt)
39650
+ buf[bt] = dict[shift + bt];
39651
+ }
39652
+ for (; bt < end; ++bt)
39653
+ buf[bt] = buf[bt - dt];
39654
+ }
39655
+ }
39656
+ st.l = lm, st.p = lpos, st.b = bt, st.f = final;
39657
+ if (lm)
39658
+ final = 1, st.m = lbt, st.d = dm, st.n = dbt;
39659
+ } while (!final);
39660
+ // don't reallocate for streams or user buffers
39661
+ return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);
39662
+ };
39663
+ // empty
39664
+ var et = /*#__PURE__*/ new u8(0);
39665
+ // read 2 bytes
39666
+ var b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };
39667
+ // read 4 bytes
39668
+ var b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };
39669
+ var b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };
39670
+ /**
39671
+ * Expands DEFLATE data with no wrapper
39672
+ * @param data The data to decompress
39673
+ * @param opts The decompression options
39674
+ * @returns The decompressed version of the data
39675
+ */
39676
+ function inflateSync(data, opts) {
39677
+ return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);
39678
+ }
39679
+ // text decoder
39680
+ var td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();
39681
+ // text decoder stream
39682
+ var tds = 0;
39683
+ try {
39684
+ td.decode(et, { stream: true });
39685
+ tds = 1;
39686
+ }
39687
+ catch (e) { }
39688
+ // decode UTF8
39689
+ var dutf8 = function (d) {
39690
+ for (var r = '', i = 0;;) {
39691
+ var c = d[i++];
39692
+ var eb = (c > 127) + (c > 223) + (c > 239);
39693
+ if (i + eb > d.length)
39694
+ return { s: r, r: slc(d, i - 1) };
39695
+ if (!eb)
39696
+ r += String.fromCharCode(c);
39697
+ else if (eb == 3) {
39698
+ c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,
39699
+ r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));
39700
+ }
39701
+ else if (eb & 1)
39702
+ r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));
39703
+ else
39704
+ r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));
39705
+ }
39706
+ };
39707
+ /**
39708
+ * Converts a Uint8Array to a string
39709
+ * @param dat The data to decode to string
39710
+ * @param latin1 Whether or not to interpret the data as Latin-1. This should
39711
+ * not need to be true unless encoding to binary string.
39712
+ * @returns The original UTF-8/Latin-1 string
39713
+ */
39714
+ function strFromU8(dat, latin1) {
39715
+ if (latin1) {
39716
+ var r = '';
39717
+ for (var i = 0; i < dat.length; i += 16384)
39718
+ r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));
39719
+ return r;
39720
+ }
39721
+ else if (td) {
39722
+ return td.decode(dat);
39723
+ }
39724
+ else {
39725
+ var _a = dutf8(dat), s = _a.s, r = _a.r;
39726
+ if (r.length)
39727
+ err(8);
39728
+ return s;
39729
+ }
39730
+ }
39731
+ // skip local zip header
39732
+ var slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };
39733
+ // read zip header
39734
+ var zh = function (d, b, z) {
39735
+ var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl, bs = b4(d, b + 20);
39736
+ var _a = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];
39737
+ return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];
39738
+ };
39739
+ // read zip64 extra field
39740
+ var z64e = function (d, b) {
39741
+ for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))
39742
+ ;
39743
+ return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];
39744
+ };
39745
+ /**
39746
+ * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better
39747
+ * performance with more than one file.
39748
+ * @param data The raw compressed ZIP file
39749
+ * @param opts The ZIP extraction options
39750
+ * @returns The decompressed files
39751
+ */
39752
+ function unzipSync(data, opts) {
39753
+ var files = {};
39754
+ var e = data.length - 22;
39755
+ for (; b4(data, e) != 0x6054B50; --e) {
39756
+ if (!e || data.length - e > 65558)
39757
+ err(13);
39758
+ }
39759
+ var c = b2(data, e + 8);
39760
+ if (!c)
39761
+ return {};
39762
+ var o = b4(data, e + 16);
39763
+ var z = o == 4294967295 || c == 65535;
39764
+ if (z) {
39765
+ var ze = b4(data, e - 12);
39766
+ z = b4(data, ze) == 0x6064B50;
39767
+ if (z) {
39768
+ c = b4(data, ze + 32);
39769
+ o = b4(data, ze + 48);
39770
+ }
39771
+ }
39772
+ for (var i = 0; i < c; ++i) {
39773
+ var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);
39774
+ o = no;
39775
+ {
39776
+ if (!c_2)
39777
+ files[fn] = slc(data, b, b + sc);
39778
+ else if (c_2 == 8)
39779
+ files[fn] = inflateSync(data.subarray(b, b + sc), { out: new u8(su) });
39780
+ else
39781
+ err(14, 'unknown compression type ' + c_2);
39782
+ }
39783
+ }
39784
+ return files;
39767
39785
  }
39768
39786
 
39769
39787
  class UnLitMaterial extends Material {
@@ -40534,7 +40552,7 @@ fn CsMain( @builtin(workgroup_id) workgroup_id : vec3<u32> , @builtin(global_inv
40534
40552
  }
40535
40553
  }
40536
40554
 
40537
- const version = "1.0.10";
40555
+ const version = "1.0.11";
40538
40556
 
40539
40557
  class Engine3D {
40540
40558
  /**