@rings-webgpu/core 1.0.11 → 1.0.13
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.
- package/dist/rings.es.js +519 -337
- package/dist/rings.es.js.map +3 -3
- package/dist/rings.es.max.js +1837 -1078
- package/dist/rings.umd.js +503 -321
- package/dist/rings.umd.js.map +3 -3
- package/dist/rings.umd.max.js +1842 -1077
- package/dist/types/assets/shader/core/base/Common_frag.d.ts +3 -0
- package/dist/types/assets/shader/core/struct/VertexAttributes.d.ts +3 -0
- package/dist/types/assets/shader/lines/FatLineShader.d.ts +5 -0
- package/dist/types/components/renderer/FatLineRenderer.d.ts +38 -0
- package/dist/types/components/renderer/GSplatRenderer.d.ts +16 -5
- package/dist/types/core/geometry/FatLineGeometry.d.ts +48 -0
- package/dist/types/gfx/renderJob/jobs/RendererJob.d.ts +2 -1
- package/dist/types/index.d.ts +9 -1
- package/dist/types/loader/parser/prefab/mats/shader/FatLineShader.d.ts +11 -0
- package/dist/types/loader/parser/prefab/mats/shader/GSplatShader.d.ts +12 -0
- package/dist/types/materials/FatLineMaterial.d.ts +57 -0
- package/dist/types/materials/GSplatMaterial.d.ts +9 -2
- package/dist/types/shape/GSplatGeometry.d.ts +13 -0
- package/dist/types/textures/R32UintTexture.d.ts +11 -0
- package/package.json +1 -1
- /package/dist/types/assets/shader/{materials → gsplat}/GSplatShader.d.ts +0 -0
package/dist/rings.es.max.js
CHANGED
|
@@ -2113,7 +2113,7 @@ function GetShader(name) {
|
|
|
2113
2113
|
}
|
|
2114
2114
|
|
|
2115
2115
|
var __defProp$2 = Object.defineProperty;
|
|
2116
|
-
var __decorateClass$
|
|
2116
|
+
var __decorateClass$m = (decorators, target, key, kind) => {
|
|
2117
2117
|
var result = void 0 ;
|
|
2118
2118
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
2119
2119
|
if (decorator = decorators[i])
|
|
@@ -2216,10 +2216,10 @@ const _Struct = class _Struct {
|
|
|
2216
2216
|
return struct.__size;
|
|
2217
2217
|
}
|
|
2218
2218
|
};
|
|
2219
|
-
__decorateClass$
|
|
2219
|
+
__decorateClass$m([
|
|
2220
2220
|
NonSerialize
|
|
2221
2221
|
], _Struct.prototype, "__refection");
|
|
2222
|
-
__decorateClass$
|
|
2222
|
+
__decorateClass$m([
|
|
2223
2223
|
NonSerialize
|
|
2224
2224
|
], _Struct.prototype, "__size");
|
|
2225
2225
|
let Struct = _Struct;
|
|
@@ -5025,18 +5025,20 @@ class SkeletonAnimation_shader {
|
|
|
5025
5025
|
}
|
|
5026
5026
|
}
|
|
5027
5027
|
|
|
5028
|
-
let VertexAttributes_vert =
|
|
5028
|
+
let VertexAttributes_vert = (
|
|
5029
|
+
/*wgsl*/
|
|
5030
|
+
`
|
|
5029
5031
|
var<private> PI: f32 = 3.14159265359;
|
|
5030
5032
|
#if USE_METAHUMAN
|
|
5031
5033
|
${MorphTarget_shader.getMorphTargetShaderBinding(3, 0)}
|
|
5032
|
-
${SkeletonAnimation_shader.groupBindingAndFunctions(3, 2)}
|
|
5034
|
+
${SkeletonAnimation_shader.groupBindingAndFunctions(3, 2)}
|
|
5033
5035
|
#else
|
|
5034
5036
|
#if USE_MORPHTARGETS
|
|
5035
5037
|
${MorphTarget_shader.getMorphTargetShaderBinding(3, 0)}
|
|
5036
5038
|
#endif
|
|
5037
5039
|
|
|
5038
5040
|
#if USE_SKELETON
|
|
5039
|
-
${SkeletonAnimation_shader.groupBindingAndFunctions(3, 0)}
|
|
5041
|
+
${SkeletonAnimation_shader.groupBindingAndFunctions(3, 0)}
|
|
5040
5042
|
#endif
|
|
5041
5043
|
#endif
|
|
5042
5044
|
|
|
@@ -5071,6 +5073,10 @@ let VertexAttributes_vert = `
|
|
|
5071
5073
|
#endif
|
|
5072
5074
|
#endif
|
|
5073
5075
|
#else
|
|
5076
|
+
#if USE_TANGENT
|
|
5077
|
+
@location(auto) TANGENT: vec4<f32>,
|
|
5078
|
+
#endif
|
|
5079
|
+
|
|
5074
5080
|
#if USE_SKELETON
|
|
5075
5081
|
#if USE_TANGENT
|
|
5076
5082
|
@location(auto) joints0: vec4<f32>,
|
|
@@ -5117,6 +5123,7 @@ let VertexAttributes_vert = `
|
|
|
5117
5123
|
#if USE_TANGENT
|
|
5118
5124
|
@location(auto) varying_Tangent: vec4<f32>,
|
|
5119
5125
|
#endif
|
|
5126
|
+
|
|
5120
5127
|
|
|
5121
5128
|
@builtin(position) member: vec4<f32>
|
|
5122
5129
|
};
|
|
@@ -5166,23 +5173,24 @@ let VertexAttributes_vert = `
|
|
|
5166
5173
|
clipPosition.z = log2Depth(clipPosition.w, globalUniform.near, globalUniform.far);
|
|
5167
5174
|
#endif
|
|
5168
5175
|
|
|
5169
|
-
ORI_CameraWorldDir = normalize(ORI_CAMERAMATRIX[3].xyz - worldPos.xyz);
|
|
5176
|
+
ORI_CameraWorldDir = normalize(ORI_CAMERAMATRIX[3].xyz - worldPos.xyz) ;
|
|
5170
5177
|
|
|
5171
|
-
ORI_VertexOut.index = f32(vertex.index);
|
|
5178
|
+
ORI_VertexOut.index = f32(vertex.index) ;
|
|
5172
5179
|
|
|
5173
|
-
ORI_VertexOut.varying_UV0 = vertex.uv.xy;
|
|
5180
|
+
ORI_VertexOut.varying_UV0 = vertex.uv.xy ;
|
|
5174
5181
|
|
|
5175
5182
|
ORI_VertexOut.varying_UV1 = vertex.TEXCOORD_1.xy;
|
|
5176
5183
|
|
|
5177
|
-
ORI_VertexOut.varying_ViewPos = viewPosition;
|
|
5178
|
-
ORI_VertexOut.varying_Clip = clipPosition;
|
|
5179
|
-
ORI_VertexOut.varying_WPos = worldPos;
|
|
5184
|
+
ORI_VertexOut.varying_ViewPos = viewPosition ;
|
|
5185
|
+
ORI_VertexOut.varying_Clip = clipPosition ;
|
|
5186
|
+
ORI_VertexOut.varying_WPos = worldPos ;
|
|
5180
5187
|
ORI_VertexOut.varying_WPos.w = f32(vertex.index);
|
|
5181
|
-
ORI_VertexOut.varying_WNormal = normalize(ORI_NORMALMATRIX * vertexNormal.xyz);
|
|
5188
|
+
ORI_VertexOut.varying_WNormal = normalize(ORI_NORMALMATRIX * vertexNormal.xyz) ;
|
|
5182
5189
|
|
|
5183
|
-
ORI_VertexOut.member = clipPosition;
|
|
5190
|
+
ORI_VertexOut.member = clipPosition ;
|
|
5184
5191
|
}
|
|
5185
|
-
|
|
5192
|
+
`
|
|
5193
|
+
);
|
|
5186
5194
|
|
|
5187
5195
|
let VideoUniform_frag = `
|
|
5188
5196
|
struct MaterialUniform {
|
|
@@ -5301,68 +5309,90 @@ let Inline_vert = (
|
|
|
5301
5309
|
`
|
|
5302
5310
|
);
|
|
5303
5311
|
|
|
5304
|
-
let Common_frag =
|
|
5305
|
-
|
|
5306
|
-
|
|
5307
|
-
|
|
5308
|
-
|
|
5309
|
-
|
|
5310
|
-
|
|
5311
|
-
|
|
5312
|
-
|
|
5313
|
-
var<private> ORI_VertexVarying: FragmentVarying;
|
|
5314
|
-
var<private> ORI_ShadingInput: ShadingInput;
|
|
5315
|
-
var<private> viewDir:vec3<f32>;
|
|
5316
|
-
var<private> modelIndex:u32;
|
|
5312
|
+
let Common_frag = (
|
|
5313
|
+
/*wgsl*/
|
|
5314
|
+
`
|
|
5315
|
+
#include "GlobalUniform"
|
|
5316
|
+
#include "FragmentVarying"
|
|
5317
|
+
#include "FragmentOutput"
|
|
5318
|
+
#include "ShadingInput"
|
|
5319
|
+
#include "ColorUtil_frag"
|
|
5320
|
+
#include "BitUtil"
|
|
5317
5321
|
|
|
5318
|
-
|
|
5319
|
-
|
|
5320
|
-
|
|
5321
|
-
|
|
5322
|
-
|
|
5322
|
+
var<private> ORI_FragmentOutput: FragmentOutput;
|
|
5323
|
+
var<private> ORI_VertexVarying: FragmentVarying;
|
|
5324
|
+
var<private> ORI_ShadingInput: ShadingInput;
|
|
5325
|
+
var<private> viewDir:vec3<f32>;
|
|
5326
|
+
var<private> modelIndex:u32;
|
|
5327
|
+
|
|
5328
|
+
@fragment
|
|
5329
|
+
fn FragMain( vertex_varying:FragmentVarying ) -> FragmentOutput {
|
|
5323
5330
|
ORI_FragmentOutput.color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
|
|
5324
|
-
|
|
5325
|
-
|
|
5331
|
+
ORI_VertexVarying = vertex_varying;
|
|
5332
|
+
ORI_VertexVarying.vWorldNormal = normalize(vertex_varying.vWorldNormal);
|
|
5333
|
+
ORI_FragmentOutput.color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
|
|
5334
|
+
viewDir = normalize(globalUniform.CameraPos.xyz - ORI_VertexVarying.vWorldPos.xyz) ;
|
|
5326
5335
|
|
|
5327
|
-
|
|
5328
|
-
|
|
5329
|
-
|
|
5336
|
+
frag();
|
|
5337
|
+
|
|
5338
|
+
#if USE_DEBUG
|
|
5339
|
+
debugFragmentOut();
|
|
5340
|
+
#endif
|
|
5330
5341
|
|
|
5331
|
-
|
|
5332
|
-
|
|
5333
|
-
|
|
5334
|
-
|
|
5335
|
-
|
|
5336
|
-
|
|
5337
|
-
|
|
5342
|
+
#if USE_DEFAULTFRAGOUT
|
|
5343
|
+
// let finalMatrix = globalUniform.projMat * globalUniform.viewMat ;
|
|
5344
|
+
// let nMat = mat3x3<f32>(finalMatrix[0].xyz,finalMatrix[1].xyz,finalMatrix[2].xyz) ;
|
|
5345
|
+
// let ORI_NORMALMATRIX = transpose(inverse( nMat ));
|
|
5346
|
+
// var vNormal = normalize(ORI_NORMALMATRIX * (ORI_VertexVarying.vWorldNormal));
|
|
5347
|
+
|
|
5348
|
+
// let gBuffer = packNHMDGBuffer(
|
|
5349
|
+
// ORI_VertexVarying.fragCoord.z,
|
|
5350
|
+
// ORI_ShadingInput.BaseColor.rgb,
|
|
5351
|
+
// ORI_ShadingInput.BaseColor.rgb,
|
|
5352
|
+
// vec3f(ORI_ShadingInput.Roughness,ORI_ShadingInput.Metallic,ORI_ShadingInput.AmbientOcclusion),
|
|
5353
|
+
// ORI_ShadingInput.Normal,
|
|
5354
|
+
// ORI_ShadingInput.Opacity
|
|
5355
|
+
// ) ;
|
|
5356
|
+
#endif
|
|
5338
5357
|
|
|
5339
|
-
|
|
5340
|
-
|
|
5358
|
+
#if USE_OUTDEPTH
|
|
5359
|
+
#if USE_LOGDEPTH
|
|
5360
|
+
ORI_FragmentOutput.out_depth = log2DepthFixPersp(ORI_VertexVarying.fragPosition.w, globalUniform.near, globalUniform.far);
|
|
5361
|
+
#else
|
|
5362
|
+
ORI_FragmentOutput.out_depth = ORI_ShadingInput.FragDepth ;
|
|
5363
|
+
#endif
|
|
5364
|
+
#endif
|
|
5341
5365
|
|
|
5342
|
-
|
|
5343
|
-
|
|
5344
|
-
var octUVNormal = (octEncode(normalize( (normal) )) + 1.0) * 0.5;
|
|
5345
|
-
var yc = f32(r11g11b9_to_float(vec3f(octUVNormal,rmao.r)));
|
|
5346
|
-
#if USE_CASTREFLECTION
|
|
5347
|
-
var rgbm = EncodeRGBM(hdrLighting);
|
|
5348
|
-
var zc = f32(pack4x8unorm(vec4f(rgbm.rgb,0.0))) ;
|
|
5349
|
-
var wc = f32(pack4x8unorm(vec4f(rmao.rg,rgbm.a,0.0)));
|
|
5350
|
-
#else
|
|
5351
|
-
var zc = f32(vec4fToFloat_7bits(vec4f(albedo.rgb,alpha)));
|
|
5352
|
-
var wc = f32(r22g8_to_float(vec2f(f32(modelIndex)/f_r22g8.r,rmao.g)));
|
|
5353
|
-
#endif
|
|
5366
|
+
return ORI_FragmentOutput ;
|
|
5367
|
+
}
|
|
5354
5368
|
|
|
5355
|
-
gBuffer.x = depth ;
|
|
5356
|
-
gBuffer.y = yc;
|
|
5357
|
-
gBuffer.z = zc;
|
|
5358
|
-
gBuffer.w = wc;
|
|
5359
|
-
return gBuffer;
|
|
5360
|
-
}
|
|
5361
5369
|
|
|
5362
|
-
|
|
5363
|
-
|
|
5364
|
-
|
|
5365
|
-
|
|
5370
|
+
fn packNHMDGBuffer(depth:f32, albedo:vec3f,hdrLighting:vec3f,rmao:vec3f,normal:vec3f,alpha:f32) -> vec4f {
|
|
5371
|
+
var gBuffer : vec4f ;
|
|
5372
|
+
var octUVNormal = (octEncode(normalize( (normal) )) + 1.0) * 0.5 ;
|
|
5373
|
+
var yc = f32(r11g11b9_to_float(vec3f(octUVNormal,rmao.r))) ;
|
|
5374
|
+
#if USE_CASTREFLECTION
|
|
5375
|
+
var rgbm = EncodeRGBM(hdrLighting);
|
|
5376
|
+
var zc = f32(pack4x8unorm(vec4f(rgbm.rgb,0.0))) ;
|
|
5377
|
+
var wc = f32(pack4x8unorm(vec4f(rmao.rg,rgbm.a,0.0)));
|
|
5378
|
+
#else
|
|
5379
|
+
var zc = f32(vec4fToFloat_7bits(vec4f(albedo.rgb,alpha)));
|
|
5380
|
+
var wc = f32(r22g8_to_float(vec2f(f32(modelIndex)/f_r22g8.r,rmao.g)));
|
|
5381
|
+
#endif
|
|
5382
|
+
|
|
5383
|
+
gBuffer.x = depth ;
|
|
5384
|
+
gBuffer.y = yc ;
|
|
5385
|
+
gBuffer.z = zc ;
|
|
5386
|
+
gBuffer.w = wc ;
|
|
5387
|
+
return gBuffer ;
|
|
5388
|
+
}
|
|
5389
|
+
|
|
5390
|
+
fn transformUV( uv:vec2f , offsetScale:vec4f ) -> vec2f{
|
|
5391
|
+
return uv * offsetScale.zw + offsetScale.xy ;
|
|
5392
|
+
}
|
|
5393
|
+
|
|
5394
|
+
`
|
|
5395
|
+
);
|
|
5366
5396
|
|
|
5367
5397
|
let Common_vert = (
|
|
5368
5398
|
/*wgsl*/
|
|
@@ -5732,6 +5762,7 @@ let FragmentVarying = `
|
|
|
5732
5762
|
let FragmentOutput = `
|
|
5733
5763
|
#if USE_CASTREFLECTION
|
|
5734
5764
|
struct FragmentOutput {
|
|
5765
|
+
@location(auto) color: vec4<f32>,
|
|
5735
5766
|
@location(auto) gBuffer: vec4<f32>,
|
|
5736
5767
|
#if USE_OUTDEPTH
|
|
5737
5768
|
@builtin(frag_depth) out_depth: f32
|
|
@@ -9525,6 +9556,186 @@ fn SH9(dir: vec3<f32>, coefficients: array<vec4f, 9>) -> vec4<f32> {
|
|
|
9525
9556
|
}
|
|
9526
9557
|
`;
|
|
9527
9558
|
|
|
9559
|
+
const FatLine_VS = (
|
|
9560
|
+
/* wgsl */
|
|
9561
|
+
`
|
|
9562
|
+
#include "GlobalUniform"
|
|
9563
|
+
|
|
9564
|
+
// Instance attributes stored in storage buffer
|
|
9565
|
+
// Extended with prevDir and nextDir for Line Join support
|
|
9566
|
+
struct InstanceData {
|
|
9567
|
+
start: vec3<f32>,
|
|
9568
|
+
_padding1: f32,
|
|
9569
|
+
end: vec3<f32>,
|
|
9570
|
+
_padding2: f32,
|
|
9571
|
+
colorStart: vec3<f32>,
|
|
9572
|
+
_padding3: f32,
|
|
9573
|
+
colorEnd: vec3<f32>,
|
|
9574
|
+
_padding4: f32,
|
|
9575
|
+
};
|
|
9576
|
+
|
|
9577
|
+
struct VertexInput {
|
|
9578
|
+
@builtin(instance_index) instanceIndex: u32,
|
|
9579
|
+
@location(0) position: vec3<f32>, // Quad vertices
|
|
9580
|
+
@location(1) uv: vec2<f32>, // UV coordinates
|
|
9581
|
+
};
|
|
9582
|
+
|
|
9583
|
+
struct VertexOutput {
|
|
9584
|
+
@builtin(position) position: vec4<f32>,
|
|
9585
|
+
@location(0) vUv: vec2<f32>,
|
|
9586
|
+
@location(1) vColor: vec3<f32>,
|
|
9587
|
+
};
|
|
9588
|
+
|
|
9589
|
+
struct MaterialUniform {
|
|
9590
|
+
baseColor: vec4<f32>,
|
|
9591
|
+
lineWidth: f32,
|
|
9592
|
+
opacity: f32,
|
|
9593
|
+
resolution: vec2<f32>,
|
|
9594
|
+
modelMatrix: mat4x4<f32>,
|
|
9595
|
+
};
|
|
9596
|
+
|
|
9597
|
+
@group(1) @binding(0) var<uniform> materialUniform: MaterialUniform;
|
|
9598
|
+
@group(1) @binding(1) var<storage, read> instances: array<InstanceData>;
|
|
9599
|
+
|
|
9600
|
+
@vertex
|
|
9601
|
+
fn VertMain(input: VertexInput) -> VertexOutput {
|
|
9602
|
+
var output: VertexOutput;
|
|
9603
|
+
|
|
9604
|
+
let instance = instances[input.instanceIndex];
|
|
9605
|
+
|
|
9606
|
+
// Transform from local space to world space, then to view space
|
|
9607
|
+
let start_world = materialUniform.modelMatrix * vec4<f32>(instance.start, 1.0);
|
|
9608
|
+
let end_world = materialUniform.modelMatrix * vec4<f32>(instance.end, 1.0);
|
|
9609
|
+
|
|
9610
|
+
let start_view = globalUniform.viewMat * start_world;
|
|
9611
|
+
let end_view = globalUniform.viewMat * end_world;
|
|
9612
|
+
|
|
9613
|
+
// Project to clip space
|
|
9614
|
+
var clip_start = globalUniform.projMat * start_view;
|
|
9615
|
+
var clip_end = globalUniform.projMat * end_view;
|
|
9616
|
+
|
|
9617
|
+
// Perspective division to NDC space
|
|
9618
|
+
let ndc_start = clip_start.xyz / clip_start.w;
|
|
9619
|
+
let ndc_end = clip_end.xyz / clip_end.w;
|
|
9620
|
+
|
|
9621
|
+
// Calculate screen-space direction
|
|
9622
|
+
var dir = ndc_end.xy - ndc_start.xy;
|
|
9623
|
+
|
|
9624
|
+
// Account for aspect ratio
|
|
9625
|
+
let aspect = materialUniform.resolution.x / materialUniform.resolution.y;
|
|
9626
|
+
dir.x *= aspect;
|
|
9627
|
+
dir = normalize(dir);
|
|
9628
|
+
|
|
9629
|
+
// Calculate perpendicular offset
|
|
9630
|
+
var offset = vec2<f32>(dir.y, -dir.x);
|
|
9631
|
+
|
|
9632
|
+
// Undo aspect ratio adjustment for both dir and offset
|
|
9633
|
+
dir.x /= aspect;
|
|
9634
|
+
offset.x /= aspect;
|
|
9635
|
+
|
|
9636
|
+
// Flip offset direction based on position.x
|
|
9637
|
+
if (input.position.x < 0.0) {
|
|
9638
|
+
offset *= -1.0;
|
|
9639
|
+
}
|
|
9640
|
+
|
|
9641
|
+
// Handle endcaps
|
|
9642
|
+
if (input.position.y < 0.0) {
|
|
9643
|
+
offset += -dir;
|
|
9644
|
+
} else if (input.position.y > 1.0) {
|
|
9645
|
+
offset += dir;
|
|
9646
|
+
}
|
|
9647
|
+
|
|
9648
|
+
// Apply line width
|
|
9649
|
+
offset *= materialUniform.lineWidth;
|
|
9650
|
+
offset /= materialUniform.resolution.y; // Convert to clip space
|
|
9651
|
+
|
|
9652
|
+
// Select start or end point
|
|
9653
|
+
var clip = select(clip_end, clip_start, input.position.y < 0.5);
|
|
9654
|
+
|
|
9655
|
+
// Shift the depth of the projected points so the line segments
|
|
9656
|
+
// overlap neatly and face the camera properly (billboard effect)
|
|
9657
|
+
let clipPose = select(ndc_end, ndc_start, input.position.y < 0.5);
|
|
9658
|
+
clip.z = clipPose.z * clip.w;
|
|
9659
|
+
|
|
9660
|
+
// Perspective correction
|
|
9661
|
+
offset *= clip.w;
|
|
9662
|
+
clip.x += offset.x;
|
|
9663
|
+
clip.y += offset.y;
|
|
9664
|
+
|
|
9665
|
+
output.position = clip;
|
|
9666
|
+
output.vUv = input.uv;
|
|
9667
|
+
output.vColor = select(instance.colorEnd, instance.colorStart, input.position.y < 0.5);
|
|
9668
|
+
|
|
9669
|
+
return output;
|
|
9670
|
+
}
|
|
9671
|
+
`
|
|
9672
|
+
);
|
|
9673
|
+
const FatLine_FS = (
|
|
9674
|
+
/* wgsl */
|
|
9675
|
+
`
|
|
9676
|
+
struct FragmentOutput {
|
|
9677
|
+
@location(0) color: vec4<f32>,
|
|
9678
|
+
@location(1) gBuffer: vec4<f32>,
|
|
9679
|
+
};
|
|
9680
|
+
|
|
9681
|
+
struct VertexOutput {
|
|
9682
|
+
@builtin(position) position: vec4<f32>,
|
|
9683
|
+
@location(0) vUv: vec2<f32>,
|
|
9684
|
+
@location(1) vColor: vec3<f32>,
|
|
9685
|
+
};
|
|
9686
|
+
|
|
9687
|
+
struct MaterialUniform {
|
|
9688
|
+
baseColor: vec4<f32>,
|
|
9689
|
+
lineWidth: f32,
|
|
9690
|
+
opacity: f32,
|
|
9691
|
+
resolution: vec2<f32>,
|
|
9692
|
+
modelMatrix: mat4x4<f32>,
|
|
9693
|
+
};
|
|
9694
|
+
|
|
9695
|
+
@group(1) @binding(0) var<uniform> materialUniform: MaterialUniform;
|
|
9696
|
+
|
|
9697
|
+
@fragment
|
|
9698
|
+
fn FragMain(input: VertexOutput) -> FragmentOutput {
|
|
9699
|
+
var output: FragmentOutput;
|
|
9700
|
+
|
|
9701
|
+
var alpha = materialUniform.opacity;
|
|
9702
|
+
|
|
9703
|
+
// Round endcap rendering with anti-aliasing
|
|
9704
|
+
let a = input.vUv.x;
|
|
9705
|
+
let b = select(input.vUv.y - 1.0, input.vUv.y + 1.0, input.vUv.y > 0.0);
|
|
9706
|
+
let len2 = a * a + b * b;
|
|
9707
|
+
|
|
9708
|
+
// Calculate derivative (must be in uniform control flow)
|
|
9709
|
+
let dlen = fwidth(len2);
|
|
9710
|
+
|
|
9711
|
+
// Round endcap rendering - simple approach
|
|
9712
|
+
if (abs(input.vUv.y) > 1.0) {
|
|
9713
|
+
// Determine circle center: (0, 1) for top, (0, -1) for bottom
|
|
9714
|
+
var basePoint = select(
|
|
9715
|
+
vec2<f32>(0.0, -1.0), // Bottom endcap
|
|
9716
|
+
vec2<f32>(0.0, 1.0), // Top endcap
|
|
9717
|
+
input.vUv.y > 0.0
|
|
9718
|
+
);
|
|
9719
|
+
|
|
9720
|
+
// Distance from UV to circle center
|
|
9721
|
+
// var dist = length(input.vUv - basePoint);
|
|
9722
|
+
var dist2 = (input.vUv.x - basePoint.x) * (input.vUv.x - basePoint.x) + (input.vUv.y - basePoint.y) * (input.vUv.y - basePoint.y);
|
|
9723
|
+
|
|
9724
|
+
// Discard pixels outside circle (radius = 1.0)
|
|
9725
|
+
if (dist2 > 1.0) {
|
|
9726
|
+
discard;
|
|
9727
|
+
}
|
|
9728
|
+
}
|
|
9729
|
+
|
|
9730
|
+
let color = input.vColor * materialUniform.baseColor.rgb;
|
|
9731
|
+
output.color = vec4<f32>(color, alpha);
|
|
9732
|
+
output.gBuffer = vec4<f32>(0.0, 0.0, 0.0, 0.0); // No GBuffer data for lines
|
|
9733
|
+
|
|
9734
|
+
return output;
|
|
9735
|
+
}
|
|
9736
|
+
`
|
|
9737
|
+
);
|
|
9738
|
+
|
|
9528
9739
|
class ShaderLib {
|
|
9529
9740
|
static init() {
|
|
9530
9741
|
ShaderLib.register("MathShader", MathShader);
|
|
@@ -9594,6 +9805,8 @@ class ShaderLib {
|
|
|
9594
9805
|
);
|
|
9595
9806
|
ShaderLib.register("ZPass_shader_vs", ZPassShader_vs);
|
|
9596
9807
|
ShaderLib.register("ZPass_shader_fs", ZPassShader_fs);
|
|
9808
|
+
ShaderLib.register("FatLine_VS", FatLine_VS);
|
|
9809
|
+
ShaderLib.register("FatLine_FS", FatLine_FS);
|
|
9597
9810
|
}
|
|
9598
9811
|
static register(keyName, code) {
|
|
9599
9812
|
if (!ShaderLib[keyName.toLowerCase()]) {
|
|
@@ -21680,9 +21893,9 @@ class OctreeEntity {
|
|
|
21680
21893
|
}
|
|
21681
21894
|
|
|
21682
21895
|
var __defProp$1 = Object.defineProperty;
|
|
21683
|
-
var __getOwnPropDesc$
|
|
21684
|
-
var __decorateClass$
|
|
21685
|
-
var result = __getOwnPropDesc$
|
|
21896
|
+
var __getOwnPropDesc$l = Object.getOwnPropertyDescriptor;
|
|
21897
|
+
var __decorateClass$l = (decorators, target, key, kind) => {
|
|
21898
|
+
var result = __getOwnPropDesc$l(target, key) ;
|
|
21686
21899
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
21687
21900
|
if (decorator = decorators[i])
|
|
21688
21901
|
result = (decorator(target, key, result) ) || result;
|
|
@@ -22267,221 +22480,16 @@ class RenderNode extends ComponentBase {
|
|
|
22267
22480
|
this._combineShaderRefection = void 0;
|
|
22268
22481
|
}
|
|
22269
22482
|
}
|
|
22270
|
-
__decorateClass$
|
|
22483
|
+
__decorateClass$l([
|
|
22271
22484
|
EditorInspector
|
|
22272
22485
|
], RenderNode.prototype, "materials");
|
|
22273
|
-
__decorateClass$
|
|
22486
|
+
__decorateClass$l([
|
|
22274
22487
|
EditorInspector
|
|
22275
22488
|
], RenderNode.prototype, "castShadow");
|
|
22276
|
-
__decorateClass$
|
|
22489
|
+
__decorateClass$l([
|
|
22277
22490
|
EditorInspector
|
|
22278
22491
|
], RenderNode.prototype, "castGI");
|
|
22279
22492
|
|
|
22280
|
-
class Shader {
|
|
22281
|
-
computes;
|
|
22282
|
-
passShader;
|
|
22283
|
-
constructor() {
|
|
22284
|
-
this.computes = [];
|
|
22285
|
-
this.passShader = /* @__PURE__ */ new Map();
|
|
22286
|
-
}
|
|
22287
|
-
addRenderPass(renderShader, index = -1) {
|
|
22288
|
-
let subShader = this.passShader.get(renderShader.passType) || [];
|
|
22289
|
-
if (index == -1) {
|
|
22290
|
-
subShader.push(renderShader);
|
|
22291
|
-
} else {
|
|
22292
|
-
subShader.splice(index, -1, renderShader);
|
|
22293
|
-
}
|
|
22294
|
-
this.passShader.set(renderShader.passType, subShader);
|
|
22295
|
-
}
|
|
22296
|
-
removeShader(renderShader, index = -1) {
|
|
22297
|
-
let subShader = this.passShader.get(
|
|
22298
|
-
renderShader.passType
|
|
22299
|
-
);
|
|
22300
|
-
if (subShader) {
|
|
22301
|
-
if (index == -1) {
|
|
22302
|
-
let index2 = subShader.indexOf(renderShader);
|
|
22303
|
-
if (index2 != -1) {
|
|
22304
|
-
subShader.splice(index2);
|
|
22305
|
-
}
|
|
22306
|
-
} else {
|
|
22307
|
-
subShader.splice(index, 1);
|
|
22308
|
-
}
|
|
22309
|
-
}
|
|
22310
|
-
}
|
|
22311
|
-
removeShaderByIndex(passType, index = -1) {
|
|
22312
|
-
let subShader = this.passShader.get(passType);
|
|
22313
|
-
if (subShader) {
|
|
22314
|
-
if (index == -1) {
|
|
22315
|
-
this.passShader.delete(passType);
|
|
22316
|
-
} else {
|
|
22317
|
-
subShader.splice(index, 1);
|
|
22318
|
-
}
|
|
22319
|
-
}
|
|
22320
|
-
}
|
|
22321
|
-
getSubShaders(passType) {
|
|
22322
|
-
return this.passShader.get(passType) || [];
|
|
22323
|
-
}
|
|
22324
|
-
hasSubShaders(passType) {
|
|
22325
|
-
let subs = this.passShader.get(passType);
|
|
22326
|
-
return subs.length > 0;
|
|
22327
|
-
}
|
|
22328
|
-
getDefaultShaders() {
|
|
22329
|
-
return this.passShader.get(PassType.COLOR);
|
|
22330
|
-
}
|
|
22331
|
-
getDefaultColorShader() {
|
|
22332
|
-
return this.passShader.get(PassType.COLOR)[0];
|
|
22333
|
-
}
|
|
22334
|
-
setDefine(arg0, arg1) {
|
|
22335
|
-
for (const pass of this.passShader) {
|
|
22336
|
-
for (const rd of pass[1]) {
|
|
22337
|
-
rd.setDefine(arg0, arg1);
|
|
22338
|
-
}
|
|
22339
|
-
}
|
|
22340
|
-
}
|
|
22341
|
-
hasDefine(arg0) {
|
|
22342
|
-
for (const pass of this.passShader) {
|
|
22343
|
-
for (const rd of pass[1]) {
|
|
22344
|
-
let has = rd.hasDefine(arg0);
|
|
22345
|
-
if (has) return has;
|
|
22346
|
-
}
|
|
22347
|
-
}
|
|
22348
|
-
return false;
|
|
22349
|
-
}
|
|
22350
|
-
deleteDefine(arg0) {
|
|
22351
|
-
for (const pass of this.passShader) {
|
|
22352
|
-
for (const rd of pass[1]) {
|
|
22353
|
-
rd.deleteDefine(arg0);
|
|
22354
|
-
}
|
|
22355
|
-
}
|
|
22356
|
-
}
|
|
22357
|
-
setUniform(arg0, arg1) {
|
|
22358
|
-
for (const pass of this.passShader) {
|
|
22359
|
-
for (const rd of pass[1]) {
|
|
22360
|
-
rd.setUniform(arg0, arg1);
|
|
22361
|
-
}
|
|
22362
|
-
}
|
|
22363
|
-
}
|
|
22364
|
-
setUniformFloat(arg0, arg1) {
|
|
22365
|
-
for (const pass of this.passShader) {
|
|
22366
|
-
for (const rd of pass[1]) {
|
|
22367
|
-
rd.setUniformFloat(arg0, arg1);
|
|
22368
|
-
}
|
|
22369
|
-
}
|
|
22370
|
-
}
|
|
22371
|
-
setUniformVector2(arg0, arg1) {
|
|
22372
|
-
for (const pass of this.passShader) {
|
|
22373
|
-
for (const rd of pass[1]) {
|
|
22374
|
-
rd.setUniformVector2(arg0, arg1);
|
|
22375
|
-
}
|
|
22376
|
-
}
|
|
22377
|
-
}
|
|
22378
|
-
setUniformVector3(arg0, arg1) {
|
|
22379
|
-
for (const pass of this.passShader) {
|
|
22380
|
-
for (const rd of pass[1]) {
|
|
22381
|
-
rd.setUniformVector3(arg0, arg1);
|
|
22382
|
-
}
|
|
22383
|
-
}
|
|
22384
|
-
}
|
|
22385
|
-
setUniformVector4(arg0, arg1) {
|
|
22386
|
-
for (const pass of this.passShader) {
|
|
22387
|
-
for (const rd of pass[1]) {
|
|
22388
|
-
rd.setUniformVector4(arg0, arg1);
|
|
22389
|
-
}
|
|
22390
|
-
}
|
|
22391
|
-
}
|
|
22392
|
-
setUniformColor(arg0, arg1) {
|
|
22393
|
-
for (const pass of this.passShader) {
|
|
22394
|
-
for (const rd of pass[1]) {
|
|
22395
|
-
rd.setUniformColor(arg0, arg1);
|
|
22396
|
-
}
|
|
22397
|
-
}
|
|
22398
|
-
}
|
|
22399
|
-
getUniform(arg0) {
|
|
22400
|
-
return this.getDefaultColorShader().getUniform(arg0);
|
|
22401
|
-
}
|
|
22402
|
-
getUniformFloat(arg0) {
|
|
22403
|
-
return this.getDefaultColorShader().getUniformFloat(arg0);
|
|
22404
|
-
}
|
|
22405
|
-
getUniformVector2(arg0) {
|
|
22406
|
-
return this.getDefaultColorShader().getUniformVector2(arg0);
|
|
22407
|
-
}
|
|
22408
|
-
getUniformVector3(arg0) {
|
|
22409
|
-
return this.getDefaultColorShader().getUniformVector3(arg0);
|
|
22410
|
-
}
|
|
22411
|
-
getUniformVector4(arg0) {
|
|
22412
|
-
return this.getDefaultColorShader().getUniformVector4(arg0);
|
|
22413
|
-
}
|
|
22414
|
-
getUniformColor(arg0) {
|
|
22415
|
-
return this.getDefaultColorShader().getUniformColor(arg0);
|
|
22416
|
-
}
|
|
22417
|
-
setTexture(arg0, arg1) {
|
|
22418
|
-
for (const pass of this.passShader) {
|
|
22419
|
-
for (const rd of pass[1]) {
|
|
22420
|
-
rd.setTexture(arg0, arg1);
|
|
22421
|
-
}
|
|
22422
|
-
}
|
|
22423
|
-
this.setDefine(`USE_${arg0.toLocaleUpperCase()}`, true);
|
|
22424
|
-
}
|
|
22425
|
-
getTexture(arg0) {
|
|
22426
|
-
return this.getDefaultColorShader().textures[arg0];
|
|
22427
|
-
}
|
|
22428
|
-
setUniformBuffer(arg0, arg1) {
|
|
22429
|
-
for (const pass of this.passShader) {
|
|
22430
|
-
for (const rd of pass[1]) {
|
|
22431
|
-
rd.setUniformBuffer(arg0, arg1);
|
|
22432
|
-
}
|
|
22433
|
-
}
|
|
22434
|
-
}
|
|
22435
|
-
getUniformBuffer(arg0) {
|
|
22436
|
-
return this.getDefaultColorShader().getBuffer(arg0);
|
|
22437
|
-
}
|
|
22438
|
-
setStorageBuffer(arg0, arg1) {
|
|
22439
|
-
for (const pass of this.passShader) {
|
|
22440
|
-
for (const rd of pass[1]) {
|
|
22441
|
-
rd.setStorageBuffer(arg0, arg1);
|
|
22442
|
-
}
|
|
22443
|
-
}
|
|
22444
|
-
}
|
|
22445
|
-
getStorageBuffer(arg0) {
|
|
22446
|
-
return this.getDefaultColorShader().getBuffer(arg0);
|
|
22447
|
-
}
|
|
22448
|
-
setStructStorageBuffer(arg0, arg1) {
|
|
22449
|
-
for (const pass of this.passShader) {
|
|
22450
|
-
for (const rd of pass[1]) {
|
|
22451
|
-
rd.setStructStorageBuffer(arg0, arg1);
|
|
22452
|
-
}
|
|
22453
|
-
}
|
|
22454
|
-
}
|
|
22455
|
-
getStructStorageBuffer(arg0) {
|
|
22456
|
-
return this.getDefaultColorShader().getBuffer(arg0);
|
|
22457
|
-
}
|
|
22458
|
-
noticeValueChange() {
|
|
22459
|
-
for (const pass of this.passShader) {
|
|
22460
|
-
for (const rd of pass[1]) {
|
|
22461
|
-
rd.noticeValueChange();
|
|
22462
|
-
}
|
|
22463
|
-
}
|
|
22464
|
-
}
|
|
22465
|
-
destroy() {
|
|
22466
|
-
this.getDefaultColorShader().destroy();
|
|
22467
|
-
}
|
|
22468
|
-
clone() {
|
|
22469
|
-
let newShader = new Shader();
|
|
22470
|
-
let sourceShaderPassList = this.getDefaultShaders();
|
|
22471
|
-
for (const shadePass of sourceShaderPassList) {
|
|
22472
|
-
newShader.addRenderPass(shadePass);
|
|
22473
|
-
}
|
|
22474
|
-
return newShader;
|
|
22475
|
-
}
|
|
22476
|
-
applyUniform() {
|
|
22477
|
-
for (const pass of this.passShader) {
|
|
22478
|
-
for (const rd of pass[1]) {
|
|
22479
|
-
rd.applyUniform();
|
|
22480
|
-
}
|
|
22481
|
-
}
|
|
22482
|
-
}
|
|
22483
|
-
}
|
|
22484
|
-
|
|
22485
22493
|
class Material {
|
|
22486
22494
|
instanceID;
|
|
22487
22495
|
name;
|
|
@@ -22670,61 +22678,35 @@ const GSplat_VS = (
|
|
|
22670
22678
|
/* wgsl */
|
|
22671
22679
|
`
|
|
22672
22680
|
#include "GlobalUniform"
|
|
22673
|
-
|
|
22674
|
-
struct VSOut {
|
|
22675
|
-
@location(auto) vColor : vec4f,
|
|
22676
|
-
@location(auto) vTexCoord : vec2f,
|
|
22677
|
-
@builtin(position) member : vec4f
|
|
22678
|
-
};
|
|
22679
|
-
|
|
22680
|
-
// ===== SPLAT CORE VS (from PlayCanvas shader-generator-gsplat.js) =====
|
|
22681
|
-
|
|
22682
|
-
// Uniforms (mapped to WebGPU bindings)
|
|
22683
|
-
// matrix_model, matrix_view, matrix_projection -> GlobalUniform + MaterialUniform
|
|
22684
|
-
// viewport -> calculated from globalUniform.windowWidth/Height
|
|
22685
|
-
// tex_params -> materialUniform.tex_params
|
|
22686
|
-
|
|
22687
|
-
@group(1) @binding(0) var splatColor : texture_2d<f32>;
|
|
22688
|
-
@group(1) @binding(1) var transformA : texture_2d<u32>;
|
|
22689
|
-
@group(1) @binding(2) var transformB : texture_2d<f32>;
|
|
22690
|
-
@group(1) @binding(4) var splatOrder : texture_2d<u32>;
|
|
22691
22681
|
|
|
22692
22682
|
struct MaterialUniform {
|
|
22693
|
-
tex_params: vec4f, // numSplats, textureWidth, validCount, visBoost
|
|
22694
22683
|
modelMatrix: mat4x4<f32>,
|
|
22695
|
-
|
|
22684
|
+
tex_params: vec4<f32>, // [numSplats, texWidth, validCount, visBoost]
|
|
22685
|
+
pixelCull: vec4<f32>, // [minPixels, maxPixels, maxPixelCullDistance, batchSize]
|
|
22696
22686
|
};
|
|
22697
|
-
@group(1) @binding(
|
|
22687
|
+
@group(1) @binding(0) var<uniform> materialUniform: MaterialUniform;
|
|
22698
22688
|
|
|
22699
|
-
|
|
22700
|
-
|
|
22701
|
-
|
|
22689
|
+
struct VSOut {
|
|
22690
|
+
@builtin(position) member: vec4<f32>,
|
|
22691
|
+
@location(0) vColor: vec4<f32>,
|
|
22692
|
+
@location(1) vTexCoord: vec2<f32>,
|
|
22693
|
+
};
|
|
22694
|
+
|
|
22695
|
+
// Textures (like PlayCanvas)
|
|
22696
|
+
@group(1) @binding(1) var splatColor: texture_2d<f32>;
|
|
22697
|
+
@group(1) @binding(2) var transformA: texture_2d<u32>;
|
|
22698
|
+
@group(1) @binding(3) var transformB: texture_2d<f32>;
|
|
22699
|
+
@group(1) @binding(4) var splatOrder: texture_2d<u32>;
|
|
22700
|
+
|
|
22701
|
+
// Global variables for texture lookups
|
|
22702
22702
|
var<private> splatUV: vec2<i32>;
|
|
22703
|
+
var<private> splatId: u32;
|
|
22703
22704
|
var<private> tA: vec4<u32>;
|
|
22704
22705
|
|
|
22705
|
-
// Helper: decode 16-bit half float
|
|
22706
|
-
fn unpackHalf(h: u32) -> f32 {
|
|
22707
|
-
let s = (h >> 15u) & 0x1u;
|
|
22708
|
-
let e = (h >> 10u) & 0x1fu;
|
|
22709
|
-
let m = h & 0x3ffu;
|
|
22710
|
-
let sign = select(1.0, -1.0, s == 1u);
|
|
22711
|
-
if (e == 0u) {
|
|
22712
|
-
if (m == 0u) { return 0.0; }
|
|
22713
|
-
return sign * (f32(m) * exp2(-24.0));
|
|
22714
|
-
} else if (e == 31u) {
|
|
22715
|
-
return sign * 65504.0;
|
|
22716
|
-
} else {
|
|
22717
|
-
return sign * (1.0 + f32(m) / 1024.0) * exp2(f32(i32(e) - 15));
|
|
22718
|
-
}
|
|
22719
|
-
}
|
|
22720
|
-
|
|
22721
22706
|
// === calcSplatUV() - returns bool ===
|
|
22722
|
-
fn calcSplatUV(
|
|
22723
|
-
let numSplats = u32(materialUniform.tex_params.x);
|
|
22707
|
+
fn calcSplatUV(orderId: u32) -> bool {
|
|
22724
22708
|
let textureWidth = u32(materialUniform.tex_params.y);
|
|
22725
|
-
|
|
22726
|
-
// calculate splat index
|
|
22727
|
-
orderId = instance_id;
|
|
22709
|
+
let numSplats = u32(materialUniform.tex_params.x);
|
|
22728
22710
|
|
|
22729
22711
|
if (orderId >= numSplats) {
|
|
22730
22712
|
return false;
|
|
@@ -22771,6 +22753,19 @@ const GSplat_VS = (
|
|
|
22771
22753
|
return result;
|
|
22772
22754
|
}
|
|
22773
22755
|
|
|
22756
|
+
// === getRotationMatrix() - returns mat3x3 ===
|
|
22757
|
+
fn getRotationMatrix() -> mat3x3f {
|
|
22758
|
+
let cov_data = getCovariance();
|
|
22759
|
+
let covA = cov_data.covA;
|
|
22760
|
+
let covB = cov_data.covB;
|
|
22761
|
+
|
|
22762
|
+
return mat3x3f(
|
|
22763
|
+
vec3f(1.0 - 2.0 * (covA.z * covA.z + covB.x * covB.x), 2.0 * (covA.y * covA.z + covB.y * covB.x), 2.0 * (covA.y * covB.x - covB.y * covA.z)),
|
|
22764
|
+
vec3f(2.0 * (covA.y * covA.z - covB.y * covB.x), 1.0 - 2.0 * (covA.y * covA.y + covB.x * covB.x), 2.0 * (covA.z * covB.x + covA.y * covB.y)),
|
|
22765
|
+
vec3f(2.0 * (covA.y * covB.x + covB.y * covA.z), 2.0 * (covA.z * covB.x - covA.y * covB.y), 1.0 - 2.0 * (covA.y * covA.y + covA.z * covA.z))
|
|
22766
|
+
);
|
|
22767
|
+
}
|
|
22768
|
+
|
|
22774
22769
|
// === calcV1V2() - returns vec4 ===
|
|
22775
22770
|
fn calcV1V2(splat_cam: vec3f, covA: vec3f, covB: vec3f, W: mat3x3f, viewport: vec2f, projMat: mat4x4f) -> vec4f {
|
|
22776
22771
|
let Vrk = mat3x3f(
|
|
@@ -22814,22 +22809,25 @@ const GSplat_VS = (
|
|
|
22814
22809
|
@vertex
|
|
22815
22810
|
fn VertMain(
|
|
22816
22811
|
@builtin(vertex_index) vid : u32,
|
|
22817
|
-
@builtin(instance_index) iid : u32
|
|
22812
|
+
@builtin(instance_index) iid : u32,
|
|
22813
|
+
@location(0) position: vec3<f32> // vertex_position from mesh (x, y, local_index)
|
|
22818
22814
|
) -> VSOut {
|
|
22819
22815
|
var o: VSOut;
|
|
22820
22816
|
let discardVec = vec4f(0.0, 0.0, 2.0, 1.0);
|
|
22821
22817
|
|
|
22822
|
-
//
|
|
22823
|
-
|
|
22824
|
-
|
|
22825
|
-
|
|
22826
|
-
|
|
22827
|
-
|
|
22828
|
-
|
|
22829
|
-
|
|
22818
|
+
// Calculate splat ID
|
|
22819
|
+
// orderId = vertex_id_attrib + uint(vertex_position.z)
|
|
22820
|
+
// In our case: vertex_id_attrib = iid * batchSize
|
|
22821
|
+
let batchSize = u32(materialUniform.pixelCull.w);
|
|
22822
|
+
let base_splat_index = iid * batchSize;
|
|
22823
|
+
let local_splat_index = u32(position.z);
|
|
22824
|
+
let orderId = base_splat_index + local_splat_index;
|
|
22825
|
+
|
|
22826
|
+
// Use vertex position from mesh
|
|
22827
|
+
let vertex_pos = position.xy;
|
|
22830
22828
|
|
|
22831
22829
|
// calculate splat uv
|
|
22832
|
-
if (!calcSplatUV(
|
|
22830
|
+
if (!calcSplatUV(orderId)) {
|
|
22833
22831
|
o.member = discardVec;
|
|
22834
22832
|
o.vColor = vec4f(0.0);
|
|
22835
22833
|
o.vTexCoord = vec2f(0.0);
|
|
@@ -22857,9 +22855,8 @@ const GSplat_VS = (
|
|
|
22857
22855
|
}
|
|
22858
22856
|
|
|
22859
22857
|
// Frustum culling: cull splats outside screen bounds
|
|
22860
|
-
// Add margin for splat radius (conservative: ~2x max splat size)
|
|
22861
22858
|
let ndc = splat_proj.xyz / splat_proj.w;
|
|
22862
|
-
let margin = 0.
|
|
22859
|
+
let margin = 0.0;
|
|
22863
22860
|
if (ndc.x < -1.0 - margin || ndc.x > 1.0 + margin ||
|
|
22864
22861
|
ndc.y < -1.0 - margin || ndc.y > 1.0 + margin ||
|
|
22865
22862
|
ndc.z < 0.0 || ndc.z > 1.0) {
|
|
@@ -22877,6 +22874,12 @@ const GSplat_VS = (
|
|
|
22877
22874
|
|
|
22878
22875
|
// get color
|
|
22879
22876
|
let color = textureLoad(splatColor, splatUV, 0);
|
|
22877
|
+
if (color.a < 1.0 / 255.0) {
|
|
22878
|
+
o.member = discardVec;
|
|
22879
|
+
o.vColor = vec4f(0.0);
|
|
22880
|
+
o.vTexCoord = vec2f(0.0);
|
|
22881
|
+
return o;
|
|
22882
|
+
}
|
|
22880
22883
|
|
|
22881
22884
|
// calculate scale based on alpha
|
|
22882
22885
|
let scale = min(1.0, sqrt(-log(1.0 / 255.0 / color.a)) / 2.0);
|
|
@@ -22885,7 +22888,7 @@ const GSplat_VS = (
|
|
|
22885
22888
|
let visBoost = materialUniform.tex_params.w;
|
|
22886
22889
|
var v1v2_scaled = v1v2 * scale * visBoost;
|
|
22887
22890
|
|
|
22888
|
-
// Pixel coverage culling
|
|
22891
|
+
// Pixel coverage culling
|
|
22889
22892
|
let v1_len_sq = dot(v1v2_scaled.xy, v1v2_scaled.xy);
|
|
22890
22893
|
let v2_len_sq = dot(v1v2_scaled.zw, v1v2_scaled.zw);
|
|
22891
22894
|
|
|
@@ -22893,7 +22896,7 @@ const GSplat_VS = (
|
|
|
22893
22896
|
let maxPixels = materialUniform.pixelCull.y;
|
|
22894
22897
|
let maxPixelCullDistance = materialUniform.pixelCull.z;
|
|
22895
22898
|
|
|
22896
|
-
// Early out tiny splats
|
|
22899
|
+
// Early out tiny splats
|
|
22897
22900
|
if (v1_len_sq < minPixels && v2_len_sq < minPixels) {
|
|
22898
22901
|
o.member = discardVec;
|
|
22899
22902
|
o.vColor = vec4f(0.0);
|
|
@@ -22901,13 +22904,9 @@ const GSplat_VS = (
|
|
|
22901
22904
|
return o;
|
|
22902
22905
|
}
|
|
22903
22906
|
|
|
22904
|
-
// Cull oversized splats
|
|
22905
|
-
// Only apply to splats close to camera (distance-based condition)
|
|
22907
|
+
// Cull oversized splats
|
|
22906
22908
|
if (maxPixels > 0.0) {
|
|
22907
|
-
// Calculate distance from splat to camera
|
|
22908
22909
|
let splatDistance = length(splat_cam.xyz);
|
|
22909
|
-
|
|
22910
|
-
// Only cull oversized splats if they are close to camera
|
|
22911
22910
|
if (maxPixelCullDistance <= 0.0 || splatDistance < maxPixelCullDistance) {
|
|
22912
22911
|
let maxAxisSq = maxPixels * maxPixels;
|
|
22913
22912
|
if (v1_len_sq > maxAxisSq || v2_len_sq > maxAxisSq) {
|
|
@@ -22919,12 +22918,9 @@ const GSplat_VS = (
|
|
|
22919
22918
|
}
|
|
22920
22919
|
}
|
|
22921
22920
|
|
|
22922
|
-
//
|
|
22921
|
+
// Final position
|
|
22923
22922
|
o.member = splat_proj + vec4f((vertex_pos.x * v1v2_scaled.xy + vertex_pos.y * v1v2_scaled.zw) / viewport * splat_proj.w, 0.0, 0.0);
|
|
22924
|
-
|
|
22925
|
-
// texCoord = vertex_position.xy * scale / 2.0;
|
|
22926
22923
|
o.vTexCoord = vertex_pos * scale / 2.0;
|
|
22927
|
-
|
|
22928
22924
|
o.vColor = color;
|
|
22929
22925
|
|
|
22930
22926
|
return o;
|
|
@@ -22939,49 +22935,279 @@ const GSplat_FS = (
|
|
|
22939
22935
|
// === evalSplat() - like PlayCanvas splatCoreFS ===
|
|
22940
22936
|
fn evalSplat(texCoord: vec2f, color: vec4f) -> vec4f {
|
|
22941
22937
|
let A = dot(texCoord, texCoord);
|
|
22938
|
+
var B = exp(-A * 4.0) * color.a;
|
|
22942
22939
|
if (A > 1.0) {
|
|
22943
|
-
|
|
22940
|
+
B = 0.0;
|
|
22944
22941
|
}
|
|
22945
22942
|
|
|
22946
|
-
let B = exp(-A * 4.0) * color.a;
|
|
22947
22943
|
if (B < 1.0 / 255.0) {
|
|
22948
|
-
|
|
22944
|
+
B = 0.0;
|
|
22949
22945
|
}
|
|
22950
22946
|
|
|
22951
|
-
// TONEMAP_ENABLED branch not implemented (would call toneMap() and gammaCorrectOutput())
|
|
22952
22947
|
return vec4f(color.rgb, B);
|
|
22953
22948
|
}
|
|
22954
|
-
|
|
22955
|
-
// === main() - like PlayCanvas splatMainFS ===
|
|
22949
|
+
|
|
22956
22950
|
@fragment
|
|
22957
|
-
fn FragMain(
|
|
22958
|
-
|
|
22959
|
-
|
|
22951
|
+
fn FragMain(
|
|
22952
|
+
@location(0) vColor: vec4<f32>,
|
|
22953
|
+
@location(1) vTexCoord: vec2<f32>
|
|
22954
|
+
) -> FragmentOutput {
|
|
22960
22955
|
var o: FragmentOutput;
|
|
22961
|
-
o.color =
|
|
22962
|
-
o.gBuffer = vec4f(0.0);
|
|
22956
|
+
o.color = evalSplat(vTexCoord, vColor);
|
|
22963
22957
|
return o;
|
|
22964
22958
|
}
|
|
22965
22959
|
`
|
|
22966
22960
|
);
|
|
22967
22961
|
|
|
22968
|
-
class
|
|
22962
|
+
class Shader {
|
|
22963
|
+
computes;
|
|
22964
|
+
passShader;
|
|
22965
|
+
constructor() {
|
|
22966
|
+
this.computes = [];
|
|
22967
|
+
this.passShader = /* @__PURE__ */ new Map();
|
|
22968
|
+
}
|
|
22969
|
+
addRenderPass(renderShader, index = -1) {
|
|
22970
|
+
let subShader = this.passShader.get(renderShader.passType) || [];
|
|
22971
|
+
if (index == -1) {
|
|
22972
|
+
subShader.push(renderShader);
|
|
22973
|
+
} else {
|
|
22974
|
+
subShader.splice(index, -1, renderShader);
|
|
22975
|
+
}
|
|
22976
|
+
this.passShader.set(renderShader.passType, subShader);
|
|
22977
|
+
}
|
|
22978
|
+
removeShader(renderShader, index = -1) {
|
|
22979
|
+
let subShader = this.passShader.get(
|
|
22980
|
+
renderShader.passType
|
|
22981
|
+
);
|
|
22982
|
+
if (subShader) {
|
|
22983
|
+
if (index == -1) {
|
|
22984
|
+
let index2 = subShader.indexOf(renderShader);
|
|
22985
|
+
if (index2 != -1) {
|
|
22986
|
+
subShader.splice(index2);
|
|
22987
|
+
}
|
|
22988
|
+
} else {
|
|
22989
|
+
subShader.splice(index, 1);
|
|
22990
|
+
}
|
|
22991
|
+
}
|
|
22992
|
+
}
|
|
22993
|
+
removeShaderByIndex(passType, index = -1) {
|
|
22994
|
+
let subShader = this.passShader.get(passType);
|
|
22995
|
+
if (subShader) {
|
|
22996
|
+
if (index == -1) {
|
|
22997
|
+
this.passShader.delete(passType);
|
|
22998
|
+
} else {
|
|
22999
|
+
subShader.splice(index, 1);
|
|
23000
|
+
}
|
|
23001
|
+
}
|
|
23002
|
+
}
|
|
23003
|
+
getSubShaders(passType) {
|
|
23004
|
+
return this.passShader.get(passType) || [];
|
|
23005
|
+
}
|
|
23006
|
+
hasSubShaders(passType) {
|
|
23007
|
+
let subs = this.passShader.get(passType);
|
|
23008
|
+
return subs.length > 0;
|
|
23009
|
+
}
|
|
23010
|
+
getDefaultShaders() {
|
|
23011
|
+
return this.passShader.get(PassType.COLOR);
|
|
23012
|
+
}
|
|
23013
|
+
getDefaultColorShader() {
|
|
23014
|
+
return this.passShader.get(PassType.COLOR)[0];
|
|
23015
|
+
}
|
|
23016
|
+
setDefine(arg0, arg1) {
|
|
23017
|
+
for (const pass of this.passShader) {
|
|
23018
|
+
for (const rd of pass[1]) {
|
|
23019
|
+
rd.setDefine(arg0, arg1);
|
|
23020
|
+
}
|
|
23021
|
+
}
|
|
23022
|
+
}
|
|
23023
|
+
hasDefine(arg0) {
|
|
23024
|
+
for (const pass of this.passShader) {
|
|
23025
|
+
for (const rd of pass[1]) {
|
|
23026
|
+
let has = rd.hasDefine(arg0);
|
|
23027
|
+
if (has) return has;
|
|
23028
|
+
}
|
|
23029
|
+
}
|
|
23030
|
+
return false;
|
|
23031
|
+
}
|
|
23032
|
+
deleteDefine(arg0) {
|
|
23033
|
+
for (const pass of this.passShader) {
|
|
23034
|
+
for (const rd of pass[1]) {
|
|
23035
|
+
rd.deleteDefine(arg0);
|
|
23036
|
+
}
|
|
23037
|
+
}
|
|
23038
|
+
}
|
|
23039
|
+
setUniform(arg0, arg1) {
|
|
23040
|
+
for (const pass of this.passShader) {
|
|
23041
|
+
for (const rd of pass[1]) {
|
|
23042
|
+
rd.setUniform(arg0, arg1);
|
|
23043
|
+
}
|
|
23044
|
+
}
|
|
23045
|
+
}
|
|
23046
|
+
setUniformFloat(arg0, arg1) {
|
|
23047
|
+
for (const pass of this.passShader) {
|
|
23048
|
+
for (const rd of pass[1]) {
|
|
23049
|
+
rd.setUniformFloat(arg0, arg1);
|
|
23050
|
+
}
|
|
23051
|
+
}
|
|
23052
|
+
}
|
|
23053
|
+
setUniformVector2(arg0, arg1) {
|
|
23054
|
+
for (const pass of this.passShader) {
|
|
23055
|
+
for (const rd of pass[1]) {
|
|
23056
|
+
rd.setUniformVector2(arg0, arg1);
|
|
23057
|
+
}
|
|
23058
|
+
}
|
|
23059
|
+
}
|
|
23060
|
+
setUniformVector3(arg0, arg1) {
|
|
23061
|
+
for (const pass of this.passShader) {
|
|
23062
|
+
for (const rd of pass[1]) {
|
|
23063
|
+
rd.setUniformVector3(arg0, arg1);
|
|
23064
|
+
}
|
|
23065
|
+
}
|
|
23066
|
+
}
|
|
23067
|
+
setUniformVector4(arg0, arg1) {
|
|
23068
|
+
for (const pass of this.passShader) {
|
|
23069
|
+
for (const rd of pass[1]) {
|
|
23070
|
+
rd.setUniformVector4(arg0, arg1);
|
|
23071
|
+
}
|
|
23072
|
+
}
|
|
23073
|
+
}
|
|
23074
|
+
setUniformColor(arg0, arg1) {
|
|
23075
|
+
for (const pass of this.passShader) {
|
|
23076
|
+
for (const rd of pass[1]) {
|
|
23077
|
+
rd.setUniformColor(arg0, arg1);
|
|
23078
|
+
}
|
|
23079
|
+
}
|
|
23080
|
+
}
|
|
23081
|
+
getUniform(arg0) {
|
|
23082
|
+
return this.getDefaultColorShader().getUniform(arg0);
|
|
23083
|
+
}
|
|
23084
|
+
getUniformFloat(arg0) {
|
|
23085
|
+
return this.getDefaultColorShader().getUniformFloat(arg0);
|
|
23086
|
+
}
|
|
23087
|
+
getUniformVector2(arg0) {
|
|
23088
|
+
return this.getDefaultColorShader().getUniformVector2(arg0);
|
|
23089
|
+
}
|
|
23090
|
+
getUniformVector3(arg0) {
|
|
23091
|
+
return this.getDefaultColorShader().getUniformVector3(arg0);
|
|
23092
|
+
}
|
|
23093
|
+
getUniformVector4(arg0) {
|
|
23094
|
+
return this.getDefaultColorShader().getUniformVector4(arg0);
|
|
23095
|
+
}
|
|
23096
|
+
getUniformColor(arg0) {
|
|
23097
|
+
return this.getDefaultColorShader().getUniformColor(arg0);
|
|
23098
|
+
}
|
|
23099
|
+
setTexture(arg0, arg1) {
|
|
23100
|
+
for (const pass of this.passShader) {
|
|
23101
|
+
for (const rd of pass[1]) {
|
|
23102
|
+
rd.setTexture(arg0, arg1);
|
|
23103
|
+
}
|
|
23104
|
+
}
|
|
23105
|
+
this.setDefine(`USE_${arg0.toLocaleUpperCase()}`, true);
|
|
23106
|
+
}
|
|
23107
|
+
getTexture(arg0) {
|
|
23108
|
+
return this.getDefaultColorShader().textures[arg0];
|
|
23109
|
+
}
|
|
23110
|
+
setUniformBuffer(arg0, arg1) {
|
|
23111
|
+
for (const pass of this.passShader) {
|
|
23112
|
+
for (const rd of pass[1]) {
|
|
23113
|
+
rd.setUniformBuffer(arg0, arg1);
|
|
23114
|
+
}
|
|
23115
|
+
}
|
|
23116
|
+
}
|
|
23117
|
+
getUniformBuffer(arg0) {
|
|
23118
|
+
return this.getDefaultColorShader().getBuffer(arg0);
|
|
23119
|
+
}
|
|
23120
|
+
setStorageBuffer(arg0, arg1) {
|
|
23121
|
+
for (const pass of this.passShader) {
|
|
23122
|
+
for (const rd of pass[1]) {
|
|
23123
|
+
rd.setStorageBuffer(arg0, arg1);
|
|
23124
|
+
}
|
|
23125
|
+
}
|
|
23126
|
+
}
|
|
23127
|
+
getStorageBuffer(arg0) {
|
|
23128
|
+
return this.getDefaultColorShader().getBuffer(arg0);
|
|
23129
|
+
}
|
|
23130
|
+
setStructStorageBuffer(arg0, arg1) {
|
|
23131
|
+
for (const pass of this.passShader) {
|
|
23132
|
+
for (const rd of pass[1]) {
|
|
23133
|
+
rd.setStructStorageBuffer(arg0, arg1);
|
|
23134
|
+
}
|
|
23135
|
+
}
|
|
23136
|
+
}
|
|
23137
|
+
getStructStorageBuffer(arg0) {
|
|
23138
|
+
return this.getDefaultColorShader().getBuffer(arg0);
|
|
23139
|
+
}
|
|
23140
|
+
noticeValueChange() {
|
|
23141
|
+
for (const pass of this.passShader) {
|
|
23142
|
+
for (const rd of pass[1]) {
|
|
23143
|
+
rd.noticeValueChange();
|
|
23144
|
+
}
|
|
23145
|
+
}
|
|
23146
|
+
}
|
|
23147
|
+
destroy() {
|
|
23148
|
+
this.getDefaultColorShader().destroy();
|
|
23149
|
+
}
|
|
23150
|
+
clone() {
|
|
23151
|
+
let newShader = new Shader();
|
|
23152
|
+
let sourceShaderPassList = this.getDefaultShaders();
|
|
23153
|
+
for (const shadePass of sourceShaderPassList) {
|
|
23154
|
+
newShader.addRenderPass(shadePass);
|
|
23155
|
+
}
|
|
23156
|
+
return newShader;
|
|
23157
|
+
}
|
|
23158
|
+
applyUniform() {
|
|
23159
|
+
for (const pass of this.passShader) {
|
|
23160
|
+
for (const rd of pass[1]) {
|
|
23161
|
+
rd.applyUniform();
|
|
23162
|
+
}
|
|
23163
|
+
}
|
|
23164
|
+
}
|
|
23165
|
+
}
|
|
23166
|
+
|
|
23167
|
+
var __getOwnPropDesc$k = Object.getOwnPropertyDescriptor;
|
|
23168
|
+
var __decorateClass$k = (decorators, target, key, kind) => {
|
|
23169
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$k(target, key) : target;
|
|
23170
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
23171
|
+
if (decorator = decorators[i])
|
|
23172
|
+
result = (decorator(result)) || result;
|
|
23173
|
+
return result;
|
|
23174
|
+
};
|
|
23175
|
+
let GSplatShader = class extends Shader {
|
|
22969
23176
|
constructor() {
|
|
22970
23177
|
super();
|
|
22971
|
-
ShaderLib.register("gsplat_vs_dc", GSplat_VS);
|
|
22972
|
-
ShaderLib.register("gsplat_fs_dc", GSplat_FS);
|
|
22973
23178
|
const pass = new RenderShaderPass("gsplat_vs_dc", "gsplat_fs_dc");
|
|
22974
23179
|
pass.passType = PassType.COLOR;
|
|
22975
23180
|
pass.setShaderEntry("VertMain", "FragMain");
|
|
22976
|
-
pass.topology = GPUPrimitiveTopology.
|
|
23181
|
+
pass.topology = GPUPrimitiveTopology.triangle_list;
|
|
22977
23182
|
pass.depthWriteEnabled = false;
|
|
22978
|
-
pass.cullMode =
|
|
23183
|
+
pass.cullMode = GPUCullMode.none;
|
|
22979
23184
|
pass.shaderState.transparent = true;
|
|
22980
23185
|
pass.shaderState.blendMode = BlendMode.NORMAL;
|
|
22981
23186
|
pass.shaderState.writeMasks = [15, 15];
|
|
22982
|
-
|
|
22983
|
-
|
|
22984
|
-
|
|
23187
|
+
this.addRenderPass(pass);
|
|
23188
|
+
this.setDefault();
|
|
23189
|
+
}
|
|
23190
|
+
/**
|
|
23191
|
+
* Set default uniform values
|
|
23192
|
+
*/
|
|
23193
|
+
setDefault() {
|
|
23194
|
+
const pass = this.getDefaultColorShader();
|
|
23195
|
+
const identityMatrix = new Matrix4();
|
|
23196
|
+
pass.setUniform("modelMatrix", identityMatrix.rawData);
|
|
23197
|
+
pass.setUniform("pixelCull", new Float32Array([2, 0, 0, 0]));
|
|
23198
|
+
}
|
|
23199
|
+
};
|
|
23200
|
+
GSplatShader = __decorateClass$k([
|
|
23201
|
+
RegisterShader(GSplatShader, "GSplatShader")
|
|
23202
|
+
], GSplatShader);
|
|
23203
|
+
|
|
23204
|
+
class GSplatMaterial extends Material {
|
|
23205
|
+
_pixelCullArray = new Float32Array(4);
|
|
23206
|
+
constructor() {
|
|
23207
|
+
super();
|
|
23208
|
+
ShaderLib.register("gsplat_vs_dc", GSplat_VS);
|
|
23209
|
+
ShaderLib.register("gsplat_fs_dc", GSplat_FS);
|
|
23210
|
+
this.shader = new GSplatShader();
|
|
22985
23211
|
}
|
|
22986
23212
|
setSplatTextures(splatColor, transformA, transformB, texParams, splatOrder) {
|
|
22987
23213
|
const pass = this.shader.getDefaultColorShader();
|
|
@@ -22992,6 +23218,7 @@ class GSplatMaterial extends Material {
|
|
|
22992
23218
|
if (splatOrder) {
|
|
22993
23219
|
pass.setTexture("splatOrder", splatOrder);
|
|
22994
23220
|
}
|
|
23221
|
+
pass.shaderState.depthCompare = GPUCompareFunction.less;
|
|
22995
23222
|
}
|
|
22996
23223
|
/**
|
|
22997
23224
|
* Set the model matrix for transforming splats to world space
|
|
@@ -23006,9 +23233,13 @@ class GSplatMaterial extends Material {
|
|
|
23006
23233
|
* @param maxPixels Maximum pixel coverage (cull oversized splats), default: 0 (disabled)
|
|
23007
23234
|
* @param maxPixelCullDistance Only cull oversized splats within this distance, 0 = always cull
|
|
23008
23235
|
*/
|
|
23009
|
-
setPixelCulling(minPixels, maxPixels, maxPixelCullDistance = 0) {
|
|
23236
|
+
setPixelCulling(minPixels, maxPixels, maxPixelCullDistance = 0, batchSize = 128) {
|
|
23237
|
+
this._pixelCullArray[0] = minPixels;
|
|
23238
|
+
this._pixelCullArray[1] = maxPixels;
|
|
23239
|
+
this._pixelCullArray[2] = maxPixelCullDistance;
|
|
23240
|
+
this._pixelCullArray[3] = batchSize;
|
|
23010
23241
|
const pass = this.shader.getDefaultColorShader();
|
|
23011
|
-
pass.setUniform("pixelCull",
|
|
23242
|
+
pass.setUniform("pixelCull", this._pixelCullArray);
|
|
23012
23243
|
}
|
|
23013
23244
|
}
|
|
23014
23245
|
|
|
@@ -23666,108 +23897,47 @@ class GeometryBase {
|
|
|
23666
23897
|
}
|
|
23667
23898
|
}
|
|
23668
23899
|
|
|
23669
|
-
class
|
|
23670
|
-
|
|
23671
|
-
|
|
23672
|
-
segmentW;
|
|
23673
|
-
segmentH;
|
|
23674
|
-
up;
|
|
23675
|
-
constructor(width, height, segmentW = 1, segmentH = 1, up = Vector3.Y_AXIS) {
|
|
23900
|
+
class GSplatGeometry extends GeometryBase {
|
|
23901
|
+
batchSize;
|
|
23902
|
+
constructor(batchSize = 128) {
|
|
23676
23903
|
super();
|
|
23677
|
-
this.
|
|
23678
|
-
|
|
23679
|
-
|
|
23680
|
-
|
|
23681
|
-
|
|
23682
|
-
|
|
23683
|
-
|
|
23684
|
-
|
|
23685
|
-
|
|
23686
|
-
|
|
23687
|
-
|
|
23688
|
-
|
|
23689
|
-
|
|
23690
|
-
|
|
23691
|
-
|
|
23692
|
-
|
|
23693
|
-
|
|
23694
|
-
|
|
23695
|
-
|
|
23696
|
-
let
|
|
23697
|
-
|
|
23698
|
-
|
|
23699
|
-
|
|
23700
|
-
|
|
23701
|
-
|
|
23702
|
-
|
|
23703
|
-
|
|
23704
|
-
|
|
23705
|
-
|
|
23706
|
-
|
|
23707
|
-
|
|
23708
|
-
|
|
23709
|
-
var indexU = 0;
|
|
23710
|
-
for (var yi = 0; yi <= this.segmentH; ++yi) {
|
|
23711
|
-
for (var xi = 0; xi <= this.segmentW; ++xi) {
|
|
23712
|
-
x = (xi / this.segmentW - 0.5) * this.width;
|
|
23713
|
-
y = (yi / this.segmentH - 0.5) * this.height;
|
|
23714
|
-
switch (axis) {
|
|
23715
|
-
case Vector3.Y_AXIS:
|
|
23716
|
-
position_arr[indexP++] = x;
|
|
23717
|
-
position_arr[indexP++] = 0;
|
|
23718
|
-
position_arr[indexP++] = y;
|
|
23719
|
-
normal_arr[indexN++] = 0;
|
|
23720
|
-
normal_arr[indexN++] = 1;
|
|
23721
|
-
normal_arr[indexN++] = 0;
|
|
23722
|
-
break;
|
|
23723
|
-
case Vector3.Z_AXIS:
|
|
23724
|
-
position_arr[indexP++] = x;
|
|
23725
|
-
position_arr[indexP++] = -y;
|
|
23726
|
-
position_arr[indexP++] = 0;
|
|
23727
|
-
normal_arr[indexN++] = 0;
|
|
23728
|
-
normal_arr[indexN++] = 0;
|
|
23729
|
-
normal_arr[indexN++] = 1;
|
|
23730
|
-
break;
|
|
23731
|
-
case Vector3.X_AXIS:
|
|
23732
|
-
position_arr[indexP++] = 0;
|
|
23733
|
-
position_arr[indexP++] = x;
|
|
23734
|
-
position_arr[indexP++] = y;
|
|
23735
|
-
normal_arr[indexN++] = 1;
|
|
23736
|
-
normal_arr[indexN++] = 0;
|
|
23737
|
-
normal_arr[indexN++] = 0;
|
|
23738
|
-
break;
|
|
23739
|
-
default:
|
|
23740
|
-
position_arr[indexP++] = x;
|
|
23741
|
-
position_arr[indexP++] = 0;
|
|
23742
|
-
position_arr[indexP++] = y;
|
|
23743
|
-
normal_arr[indexN++] = 0;
|
|
23744
|
-
normal_arr[indexN++] = 1;
|
|
23745
|
-
normal_arr[indexN++] = 0;
|
|
23746
|
-
break;
|
|
23747
|
-
}
|
|
23748
|
-
uv_arr[indexU++] = xi / this.segmentW;
|
|
23749
|
-
uv_arr[indexU++] = yi / this.segmentH;
|
|
23750
|
-
if (xi != this.segmentW && yi != this.segmentH) {
|
|
23751
|
-
base = xi + yi * tw;
|
|
23752
|
-
indices_arr[numIndices++] = base + 1;
|
|
23753
|
-
indices_arr[numIndices++] = base;
|
|
23754
|
-
indices_arr[numIndices++] = base + tw;
|
|
23755
|
-
indices_arr[numIndices++] = base + 1;
|
|
23756
|
-
indices_arr[numIndices++] = base + tw;
|
|
23757
|
-
indices_arr[numIndices++] = base + tw + 1;
|
|
23758
|
-
}
|
|
23759
|
-
}
|
|
23760
|
-
}
|
|
23761
|
-
this.setIndices(indices_arr);
|
|
23762
|
-
this.setAttribute(VertexAttributeName.position, position_arr);
|
|
23763
|
-
this.setAttribute(VertexAttributeName.normal, normal_arr);
|
|
23764
|
-
this.setAttribute(VertexAttributeName.uv, uv_arr);
|
|
23765
|
-
this.setAttribute(VertexAttributeName.TEXCOORD_1, uv_arr);
|
|
23904
|
+
this.batchSize = batchSize;
|
|
23905
|
+
const meshPositions = new Float32Array(12 * batchSize);
|
|
23906
|
+
for (let i = 0; i < batchSize; ++i) {
|
|
23907
|
+
meshPositions.set([
|
|
23908
|
+
-2,
|
|
23909
|
+
-2,
|
|
23910
|
+
i,
|
|
23911
|
+
2,
|
|
23912
|
+
-2,
|
|
23913
|
+
i,
|
|
23914
|
+
2,
|
|
23915
|
+
2,
|
|
23916
|
+
i,
|
|
23917
|
+
-2,
|
|
23918
|
+
2,
|
|
23919
|
+
i
|
|
23920
|
+
], i * 12);
|
|
23921
|
+
}
|
|
23922
|
+
const meshIndices = new Uint32Array(6 * batchSize);
|
|
23923
|
+
for (let i = 0; i < batchSize; ++i) {
|
|
23924
|
+
const b = i * 4;
|
|
23925
|
+
meshIndices.set([
|
|
23926
|
+
0 + b,
|
|
23927
|
+
1 + b,
|
|
23928
|
+
2 + b,
|
|
23929
|
+
0 + b,
|
|
23930
|
+
2 + b,
|
|
23931
|
+
3 + b
|
|
23932
|
+
], i * 6);
|
|
23933
|
+
}
|
|
23934
|
+
this.setAttribute(VertexAttributeName.position, meshPositions);
|
|
23935
|
+
this.setIndices(meshIndices);
|
|
23766
23936
|
this.addSubGeometry({
|
|
23767
23937
|
indexStart: 0,
|
|
23768
|
-
indexCount:
|
|
23938
|
+
indexCount: meshIndices.length,
|
|
23769
23939
|
vertexStart: 0,
|
|
23770
|
-
vertexCount:
|
|
23940
|
+
vertexCount: meshPositions.length / 3,
|
|
23771
23941
|
firstStart: 0,
|
|
23772
23942
|
index: 0,
|
|
23773
23943
|
topology: 0
|
|
@@ -23871,18 +24041,49 @@ class Uint32ArrayTexture extends Texture {
|
|
|
23871
24041
|
updateTexture(width, height, data) {
|
|
23872
24042
|
let device = webGPUContext.device;
|
|
23873
24043
|
const bytesPerRow = width * 4 * 4;
|
|
23874
|
-
|
|
24044
|
+
device.queue.writeTexture(
|
|
24045
|
+
{ texture: this.getGPUTexture() },
|
|
24046
|
+
data.buffer,
|
|
24047
|
+
{ bytesPerRow },
|
|
24048
|
+
{ width, height, depthOrArrayLayers: 1 }
|
|
24049
|
+
);
|
|
24050
|
+
}
|
|
24051
|
+
}
|
|
24052
|
+
|
|
24053
|
+
class R32UintTexture extends Texture {
|
|
24054
|
+
_dataBuffer;
|
|
24055
|
+
create(width, height, data) {
|
|
24056
|
+
let device = webGPUContext.device;
|
|
24057
|
+
const bytesPerRow = width * 4;
|
|
24058
|
+
this.format = GPUTextureFormat.r32uint;
|
|
24059
|
+
const mipmapCount = 1;
|
|
24060
|
+
this.createTextureDescriptor(width, height, mipmapCount, this.format);
|
|
24061
|
+
const textureDataBuffer = this._dataBuffer = device.createBuffer({
|
|
23875
24062
|
size: data.byteLength,
|
|
23876
24063
|
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC
|
|
23877
24064
|
});
|
|
23878
|
-
device.queue.writeBuffer(
|
|
24065
|
+
device.queue.writeBuffer(textureDataBuffer, 0, data.buffer);
|
|
23879
24066
|
const encoder = device.createCommandEncoder();
|
|
23880
24067
|
encoder.copyBufferToTexture(
|
|
23881
|
-
{ buffer:
|
|
24068
|
+
{ buffer: textureDataBuffer, bytesPerRow },
|
|
23882
24069
|
{ texture: this.getGPUTexture() },
|
|
23883
24070
|
{ width, height, depthOrArrayLayers: 1 }
|
|
23884
24071
|
);
|
|
23885
24072
|
device.queue.submit([encoder.finish()]);
|
|
24073
|
+
this.samplerBindingLayout.type = `non-filtering`;
|
|
24074
|
+
this.textureBindingLayout.sampleType = `uint`;
|
|
24075
|
+
this.gpuSampler = device.createSampler({});
|
|
24076
|
+
return this;
|
|
24077
|
+
}
|
|
24078
|
+
updateTexture(width, height, data) {
|
|
24079
|
+
let device = webGPUContext.device;
|
|
24080
|
+
const bytesPerRow = width * 4;
|
|
24081
|
+
device.queue.writeTexture(
|
|
24082
|
+
{ texture: this.getGPUTexture() },
|
|
24083
|
+
data.buffer,
|
|
24084
|
+
{ bytesPerRow },
|
|
24085
|
+
{ width, height, depthOrArrayLayers: 1 }
|
|
24086
|
+
);
|
|
23886
24087
|
}
|
|
23887
24088
|
}
|
|
23888
24089
|
|
|
@@ -23990,9 +24191,9 @@ class Float16ArrayTexture extends Texture {
|
|
|
23990
24191
|
}
|
|
23991
24192
|
}
|
|
23992
24193
|
|
|
23993
|
-
var __getOwnPropDesc$
|
|
23994
|
-
var __decorateClass$
|
|
23995
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$
|
|
24194
|
+
var __getOwnPropDesc$j = Object.getOwnPropertyDescriptor;
|
|
24195
|
+
var __decorateClass$j = (decorators, target, key, kind) => {
|
|
24196
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$j(target, key) : target;
|
|
23996
24197
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
23997
24198
|
if (decorator = decorators[i])
|
|
23998
24199
|
result = (decorator(result)) || result;
|
|
@@ -24024,14 +24225,15 @@ let GSplatRenderer = class extends RenderNode {
|
|
|
24024
24225
|
// Web Worker for sorting
|
|
24025
24226
|
_sortWorker;
|
|
24026
24227
|
_lastSentTime = 0;
|
|
24027
|
-
_minIntervalMs =
|
|
24028
|
-
// No throttle for immediate sorting
|
|
24228
|
+
_minIntervalMs = 16;
|
|
24029
24229
|
_centersSent = false;
|
|
24030
24230
|
_lastViewMatrixHash = 0;
|
|
24031
24231
|
// Adaptive sorting optimization
|
|
24032
24232
|
_lastCameraSpeed = 0;
|
|
24033
24233
|
_adaptiveSorting = true;
|
|
24034
24234
|
// Enable adaptive sorting by default
|
|
24235
|
+
_lastPixelCullParams = "";
|
|
24236
|
+
_texturesInitialized = false;
|
|
24035
24237
|
// LOD (Level of Detail) system
|
|
24036
24238
|
_lodEnabled = false;
|
|
24037
24239
|
_lodDistances = [5, 10, 20, 40];
|
|
@@ -24053,6 +24255,11 @@ let GSplatRenderer = class extends RenderNode {
|
|
|
24053
24255
|
get fullCount() {
|
|
24054
24256
|
return this._fullCount;
|
|
24055
24257
|
}
|
|
24258
|
+
// Batched rendering
|
|
24259
|
+
_batchSize = 128;
|
|
24260
|
+
// Splats per draw call
|
|
24261
|
+
instanceCount = 0;
|
|
24262
|
+
// For InstanceDrawComponent compatibility
|
|
24056
24263
|
constructor() {
|
|
24057
24264
|
super();
|
|
24058
24265
|
}
|
|
@@ -24068,24 +24275,20 @@ let GSplatRenderer = class extends RenderNode {
|
|
|
24068
24275
|
this.texParams = new Float32Array([this.count, this.size.x, this.count, 1]);
|
|
24069
24276
|
this._positions = asset.position;
|
|
24070
24277
|
const total = this.size.x * this.size.y;
|
|
24071
|
-
this._orderData = new Uint32Array(total
|
|
24278
|
+
this._orderData = new Uint32Array(total);
|
|
24072
24279
|
for (let i = 0; i < total; i++) {
|
|
24073
|
-
|
|
24074
|
-
|
|
24075
|
-
|
|
24076
|
-
this._orderData[base + 1] = 0;
|
|
24077
|
-
this._orderData[base + 2] = 0;
|
|
24078
|
-
this._orderData[base + 3] = 0;
|
|
24079
|
-
}
|
|
24080
|
-
this.splatOrder = new Uint32ArrayTexture().create(this.size.x, this.size.y, this._orderData);
|
|
24280
|
+
this._orderData[i] = i < this.count ? i : this.count > 0 ? this.count - 1 : 0;
|
|
24281
|
+
}
|
|
24282
|
+
this.splatOrder = new R32UintTexture().create(this.size.x, this.size.y, this._orderData);
|
|
24081
24283
|
this.splatOrder.name = "splatOrder";
|
|
24082
24284
|
this.splatOrder.minFilter = "nearest";
|
|
24083
24285
|
this.splatOrder.magFilter = "nearest";
|
|
24084
24286
|
this.splatOrder.addressModeU = "clamp-to-edge";
|
|
24085
24287
|
this.splatOrder.addressModeV = "clamp-to-edge";
|
|
24086
24288
|
this.gsplatMaterial = new GSplatMaterial();
|
|
24087
|
-
this.geometry = new
|
|
24289
|
+
this.geometry = new GSplatGeometry(this._batchSize);
|
|
24088
24290
|
this.materials = [this.gsplatMaterial];
|
|
24291
|
+
this.instanceCount = 0;
|
|
24089
24292
|
}
|
|
24090
24293
|
/**
|
|
24091
24294
|
* Update splat sorting before rendering
|
|
@@ -24162,12 +24365,7 @@ let GSplatRenderer = class extends RenderNode {
|
|
|
24162
24365
|
this.texParams[2] = Math.min(this.texParams[0], this.count);
|
|
24163
24366
|
const total = this.size.x * this.size.y;
|
|
24164
24367
|
for (let i = 0; i < total; i++) {
|
|
24165
|
-
|
|
24166
|
-
const base = i * 4;
|
|
24167
|
-
this._orderData[base + 0] = src;
|
|
24168
|
-
this._orderData[base + 1] = 0;
|
|
24169
|
-
this._orderData[base + 2] = 0;
|
|
24170
|
-
this._orderData[base + 3] = 0;
|
|
24368
|
+
this._orderData[i] = i < this.count ? i : this.count > 0 ? this.count - 1 : 0;
|
|
24171
24369
|
}
|
|
24172
24370
|
this.splatOrder.updateTexture(this.size.x, this.size.y, this._orderData);
|
|
24173
24371
|
if (this._sortWorker) {
|
|
@@ -24194,6 +24392,7 @@ let GSplatRenderer = class extends RenderNode {
|
|
|
24194
24392
|
} else {
|
|
24195
24393
|
this._centersSent = false;
|
|
24196
24394
|
}
|
|
24395
|
+
this.instanceCount = 0;
|
|
24197
24396
|
}
|
|
24198
24397
|
/**
|
|
24199
24398
|
* Set visibility boost factor (material uniform tex_params.w)
|
|
@@ -24257,6 +24456,18 @@ let GSplatRenderer = class extends RenderNode {
|
|
|
24257
24456
|
distanceEnabled: this._maxPixelCullDistance > 0
|
|
24258
24457
|
};
|
|
24259
24458
|
}
|
|
24459
|
+
/**
|
|
24460
|
+
* Get batching statistics
|
|
24461
|
+
*/
|
|
24462
|
+
getBatchingStats() {
|
|
24463
|
+
return {
|
|
24464
|
+
enabled: true,
|
|
24465
|
+
batchSize: this._batchSize,
|
|
24466
|
+
instanceCount: this.instanceCount,
|
|
24467
|
+
splatCount: this.count,
|
|
24468
|
+
reduction: this.count > 0 ? (1 - this.instanceCount / this.count) * 100 : 0
|
|
24469
|
+
};
|
|
24470
|
+
}
|
|
24260
24471
|
/**
|
|
24261
24472
|
* Calculate texture size for given splat count
|
|
24262
24473
|
*/
|
|
@@ -24479,18 +24690,20 @@ let GSplatRenderer = class extends RenderNode {
|
|
|
24479
24690
|
const indices = new Uint32Array(newOrder);
|
|
24480
24691
|
const total = this.size.x * this.size.y;
|
|
24481
24692
|
const count = this.count;
|
|
24482
|
-
this._orderData
|
|
24483
|
-
|
|
24484
|
-
|
|
24485
|
-
|
|
24486
|
-
|
|
24487
|
-
|
|
24488
|
-
|
|
24489
|
-
this._orderData
|
|
24693
|
+
if (!this._orderData || this._orderData.length !== total) {
|
|
24694
|
+
this._orderData = new Uint32Array(total);
|
|
24695
|
+
}
|
|
24696
|
+
const validCount = Math.min(count, indices.length);
|
|
24697
|
+
this._orderData.set(indices.subarray(0, validCount), 0);
|
|
24698
|
+
if (validCount < total) {
|
|
24699
|
+
const lastIndex = count > 0 ? count - 1 : 0;
|
|
24700
|
+
this._orderData.fill(lastIndex, validCount, total);
|
|
24490
24701
|
}
|
|
24491
24702
|
this.splatOrder.updateTexture(this.size.x, this.size.y, this._orderData);
|
|
24492
24703
|
const valid = Math.max(0, Math.min(this.count, ev.data.count | 0));
|
|
24493
24704
|
this.texParams[2] = valid;
|
|
24705
|
+
const newInstanceCount = Math.ceil(valid / this._batchSize);
|
|
24706
|
+
this.instanceCount = newInstanceCount;
|
|
24494
24707
|
};
|
|
24495
24708
|
const worldPos = this._worldPositions || this._positions;
|
|
24496
24709
|
const centers = this._mapping ? new Float32Array(this._mapping.length * 3) : new Float32Array(worldPos);
|
|
@@ -24693,30 +24906,22 @@ let GSplatRenderer = class extends RenderNode {
|
|
|
24693
24906
|
nodeUpdate(view, passType, renderPassState, clusterLightingBuffer) {
|
|
24694
24907
|
const worldMatrix = this.object3D.transform.worldMatrix;
|
|
24695
24908
|
this.gsplatMaterial.setTransformMatrix(worldMatrix);
|
|
24696
|
-
this.
|
|
24697
|
-
this.
|
|
24698
|
-
this.
|
|
24699
|
-
this.
|
|
24700
|
-
|
|
24701
|
-
|
|
24702
|
-
this.
|
|
24703
|
-
|
|
24704
|
-
|
|
24705
|
-
|
|
24706
|
-
|
|
24707
|
-
|
|
24708
|
-
|
|
24709
|
-
|
|
24710
|
-
for (let mat of this.materials) {
|
|
24711
|
-
const passes = mat.getPass(passType);
|
|
24712
|
-
if (!passes || passes.length === 0) continue;
|
|
24713
|
-
for (const pass of passes) {
|
|
24714
|
-
if (!pass.pipeline) continue;
|
|
24715
|
-
pass.apply(this.geometry, rendererPassState);
|
|
24716
|
-
GPUContext.bindPipeline(encoder, pass);
|
|
24717
|
-
GPUContext.draw(encoder, 4, this.count, 0, 0);
|
|
24718
|
-
}
|
|
24909
|
+
const currentParams = `${this._minPixelCoverage},${this._maxPixelCoverage},${this._maxPixelCullDistance},${this._batchSize}`;
|
|
24910
|
+
if (currentParams !== this._lastPixelCullParams) {
|
|
24911
|
+
this.gsplatMaterial.setPixelCulling(this._minPixelCoverage, this._maxPixelCoverage, this._maxPixelCullDistance, this._batchSize);
|
|
24912
|
+
this._lastPixelCullParams = currentParams;
|
|
24913
|
+
}
|
|
24914
|
+
if (!this._texturesInitialized) {
|
|
24915
|
+
this.gsplatMaterial.setSplatTextures(
|
|
24916
|
+
this.splatColor,
|
|
24917
|
+
this.transformA,
|
|
24918
|
+
this.transformB,
|
|
24919
|
+
this.texParams,
|
|
24920
|
+
this.splatOrder
|
|
24921
|
+
);
|
|
24922
|
+
this._texturesInitialized = true;
|
|
24719
24923
|
}
|
|
24924
|
+
super.nodeUpdate(view, passType, renderPassState, clusterLightingBuffer);
|
|
24720
24925
|
}
|
|
24721
24926
|
/**
|
|
24722
24927
|
* Render pass (fallback)
|
|
@@ -24730,7 +24935,28 @@ let GSplatRenderer = class extends RenderNode {
|
|
|
24730
24935
|
if (!pass.pipeline) continue;
|
|
24731
24936
|
pass.apply(this.geometry, renderContext.rendererPassState || renderContext);
|
|
24732
24937
|
GPUContext.bindPipeline(encoder, pass);
|
|
24733
|
-
GPUContext.
|
|
24938
|
+
GPUContext.bindGeometryBuffer(encoder, this.geometry);
|
|
24939
|
+
const subGeometry = this.geometry.subGeometries[0];
|
|
24940
|
+
const lodInfo = subGeometry.lodLevels[0];
|
|
24941
|
+
if (this.instanceCount > 0) {
|
|
24942
|
+
GPUContext.drawIndexed(
|
|
24943
|
+
encoder,
|
|
24944
|
+
lodInfo.indexCount,
|
|
24945
|
+
this.instanceCount,
|
|
24946
|
+
lodInfo.indexStart,
|
|
24947
|
+
0,
|
|
24948
|
+
0
|
|
24949
|
+
);
|
|
24950
|
+
} else {
|
|
24951
|
+
GPUContext.drawIndexed(
|
|
24952
|
+
encoder,
|
|
24953
|
+
lodInfo.indexCount,
|
|
24954
|
+
1,
|
|
24955
|
+
lodInfo.indexStart,
|
|
24956
|
+
0,
|
|
24957
|
+
0
|
|
24958
|
+
);
|
|
24959
|
+
}
|
|
24734
24960
|
}
|
|
24735
24961
|
}
|
|
24736
24962
|
}
|
|
@@ -24745,7 +24971,7 @@ let GSplatRenderer = class extends RenderNode {
|
|
|
24745
24971
|
super.destroy(force);
|
|
24746
24972
|
}
|
|
24747
24973
|
};
|
|
24748
|
-
GSplatRenderer = __decorateClass$
|
|
24974
|
+
GSplatRenderer = __decorateClass$j([
|
|
24749
24975
|
RegisterComponent(GSplatRenderer, "GSplatRenderer")
|
|
24750
24976
|
], GSplatRenderer);
|
|
24751
24977
|
|
|
@@ -25056,9 +25282,9 @@ class Entity extends CEventDispatcher {
|
|
|
25056
25282
|
}
|
|
25057
25283
|
}
|
|
25058
25284
|
|
|
25059
|
-
var __getOwnPropDesc$
|
|
25060
|
-
var __decorateClass$
|
|
25061
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$
|
|
25285
|
+
var __getOwnPropDesc$i = Object.getOwnPropertyDescriptor;
|
|
25286
|
+
var __decorateClass$i = (decorators, target, key, kind) => {
|
|
25287
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$i(target, key) : target;
|
|
25062
25288
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
25063
25289
|
if (decorator = decorators[i])
|
|
25064
25290
|
result = (decorator(result)) || result;
|
|
@@ -25323,7 +25549,7 @@ let Object3D = class extends Entity {
|
|
|
25323
25549
|
super.destroy(force);
|
|
25324
25550
|
}
|
|
25325
25551
|
};
|
|
25326
|
-
Object3D = __decorateClass$
|
|
25552
|
+
Object3D = __decorateClass$i([
|
|
25327
25553
|
DecorateObject3D
|
|
25328
25554
|
], Object3D);
|
|
25329
25555
|
function DecorateObject3D(ctor, _) {
|
|
@@ -26652,9 +26878,9 @@ class MorphTargetData {
|
|
|
26652
26878
|
}
|
|
26653
26879
|
|
|
26654
26880
|
var __defProp = Object.defineProperty;
|
|
26655
|
-
var __getOwnPropDesc$
|
|
26656
|
-
var __decorateClass$
|
|
26657
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$
|
|
26881
|
+
var __getOwnPropDesc$h = Object.getOwnPropertyDescriptor;
|
|
26882
|
+
var __decorateClass$h = (decorators, target, key, kind) => {
|
|
26883
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$h(target, key) : target;
|
|
26658
26884
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
26659
26885
|
if (decorator = decorators[i])
|
|
26660
26886
|
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
@@ -26763,13 +26989,13 @@ let MeshRenderer = class extends RenderNode {
|
|
|
26763
26989
|
super.destroy(force);
|
|
26764
26990
|
}
|
|
26765
26991
|
};
|
|
26766
|
-
__decorateClass$
|
|
26992
|
+
__decorateClass$h([
|
|
26767
26993
|
EditorInspector
|
|
26768
26994
|
], MeshRenderer.prototype, "geometry", 1);
|
|
26769
|
-
__decorateClass$
|
|
26995
|
+
__decorateClass$h([
|
|
26770
26996
|
EditorInspector
|
|
26771
26997
|
], MeshRenderer.prototype, "material", 1);
|
|
26772
|
-
MeshRenderer = __decorateClass$
|
|
26998
|
+
MeshRenderer = __decorateClass$h([
|
|
26773
26999
|
RegisterComponent(MeshRenderer, "MeshRenderer")
|
|
26774
27000
|
], MeshRenderer);
|
|
26775
27001
|
|
|
@@ -27266,9 +27492,118 @@ class WebGPUDescriptorCreator {
|
|
|
27266
27492
|
}
|
|
27267
27493
|
}
|
|
27268
27494
|
|
|
27269
|
-
|
|
27270
|
-
|
|
27271
|
-
|
|
27495
|
+
class PlaneGeometry extends GeometryBase {
|
|
27496
|
+
width;
|
|
27497
|
+
height;
|
|
27498
|
+
segmentW;
|
|
27499
|
+
segmentH;
|
|
27500
|
+
up;
|
|
27501
|
+
constructor(width, height, segmentW = 1, segmentH = 1, up = Vector3.Y_AXIS) {
|
|
27502
|
+
super();
|
|
27503
|
+
this.width = width;
|
|
27504
|
+
this.height = height;
|
|
27505
|
+
this.segmentW = segmentW;
|
|
27506
|
+
this.segmentH = segmentH;
|
|
27507
|
+
this.up = up;
|
|
27508
|
+
this.buildGeometry(this.up);
|
|
27509
|
+
}
|
|
27510
|
+
buildGeometry(axis) {
|
|
27511
|
+
var x, y;
|
|
27512
|
+
var numIndices;
|
|
27513
|
+
var base;
|
|
27514
|
+
var tw = this.segmentW + 1;
|
|
27515
|
+
(this.segmentH + 1) * tw;
|
|
27516
|
+
this.bounds = new BoundingBox(
|
|
27517
|
+
Vector3.ZERO.clone(),
|
|
27518
|
+
new Vector3(this.width, 1, this.height)
|
|
27519
|
+
);
|
|
27520
|
+
numIndices = this.segmentH * this.segmentW * 6;
|
|
27521
|
+
let vertexCount = (this.segmentW + 1) * (this.segmentH + 1);
|
|
27522
|
+
let position_arr = new Float32Array(vertexCount * 3);
|
|
27523
|
+
let normal_arr = new Float32Array(vertexCount * 3);
|
|
27524
|
+
let uv_arr = new Float32Array(vertexCount * 2);
|
|
27525
|
+
let indices_arr;
|
|
27526
|
+
let totalIndexCount = this.segmentW * this.segmentH * 2 * 3;
|
|
27527
|
+
if (totalIndexCount >= Uint16Array.length) {
|
|
27528
|
+
indices_arr = new Uint32Array(this.segmentW * this.segmentH * 2 * 3);
|
|
27529
|
+
} else {
|
|
27530
|
+
indices_arr = new Uint16Array(this.segmentW * this.segmentH * 2 * 3);
|
|
27531
|
+
}
|
|
27532
|
+
numIndices = 0;
|
|
27533
|
+
var indexP = 0;
|
|
27534
|
+
var indexN = 0;
|
|
27535
|
+
var indexU = 0;
|
|
27536
|
+
for (var yi = 0; yi <= this.segmentH; ++yi) {
|
|
27537
|
+
for (var xi = 0; xi <= this.segmentW; ++xi) {
|
|
27538
|
+
x = (xi / this.segmentW - 0.5) * this.width;
|
|
27539
|
+
y = (yi / this.segmentH - 0.5) * this.height;
|
|
27540
|
+
switch (axis) {
|
|
27541
|
+
case Vector3.Y_AXIS:
|
|
27542
|
+
position_arr[indexP++] = x;
|
|
27543
|
+
position_arr[indexP++] = 0;
|
|
27544
|
+
position_arr[indexP++] = y;
|
|
27545
|
+
normal_arr[indexN++] = 0;
|
|
27546
|
+
normal_arr[indexN++] = 1;
|
|
27547
|
+
normal_arr[indexN++] = 0;
|
|
27548
|
+
break;
|
|
27549
|
+
case Vector3.Z_AXIS:
|
|
27550
|
+
position_arr[indexP++] = x;
|
|
27551
|
+
position_arr[indexP++] = -y;
|
|
27552
|
+
position_arr[indexP++] = 0;
|
|
27553
|
+
normal_arr[indexN++] = 0;
|
|
27554
|
+
normal_arr[indexN++] = 0;
|
|
27555
|
+
normal_arr[indexN++] = 1;
|
|
27556
|
+
break;
|
|
27557
|
+
case Vector3.X_AXIS:
|
|
27558
|
+
position_arr[indexP++] = 0;
|
|
27559
|
+
position_arr[indexP++] = x;
|
|
27560
|
+
position_arr[indexP++] = y;
|
|
27561
|
+
normal_arr[indexN++] = 1;
|
|
27562
|
+
normal_arr[indexN++] = 0;
|
|
27563
|
+
normal_arr[indexN++] = 0;
|
|
27564
|
+
break;
|
|
27565
|
+
default:
|
|
27566
|
+
position_arr[indexP++] = x;
|
|
27567
|
+
position_arr[indexP++] = 0;
|
|
27568
|
+
position_arr[indexP++] = y;
|
|
27569
|
+
normal_arr[indexN++] = 0;
|
|
27570
|
+
normal_arr[indexN++] = 1;
|
|
27571
|
+
normal_arr[indexN++] = 0;
|
|
27572
|
+
break;
|
|
27573
|
+
}
|
|
27574
|
+
uv_arr[indexU++] = xi / this.segmentW;
|
|
27575
|
+
uv_arr[indexU++] = yi / this.segmentH;
|
|
27576
|
+
if (xi != this.segmentW && yi != this.segmentH) {
|
|
27577
|
+
base = xi + yi * tw;
|
|
27578
|
+
indices_arr[numIndices++] = base + 1;
|
|
27579
|
+
indices_arr[numIndices++] = base;
|
|
27580
|
+
indices_arr[numIndices++] = base + tw;
|
|
27581
|
+
indices_arr[numIndices++] = base + 1;
|
|
27582
|
+
indices_arr[numIndices++] = base + tw;
|
|
27583
|
+
indices_arr[numIndices++] = base + tw + 1;
|
|
27584
|
+
}
|
|
27585
|
+
}
|
|
27586
|
+
}
|
|
27587
|
+
this.setIndices(indices_arr);
|
|
27588
|
+
this.setAttribute(VertexAttributeName.position, position_arr);
|
|
27589
|
+
this.setAttribute(VertexAttributeName.normal, normal_arr);
|
|
27590
|
+
this.setAttribute(VertexAttributeName.uv, uv_arr);
|
|
27591
|
+
this.setAttribute(VertexAttributeName.TEXCOORD_1, uv_arr);
|
|
27592
|
+
this.addSubGeometry({
|
|
27593
|
+
indexStart: 0,
|
|
27594
|
+
indexCount: indices_arr.length,
|
|
27595
|
+
vertexStart: 0,
|
|
27596
|
+
vertexCount: 0,
|
|
27597
|
+
firstStart: 0,
|
|
27598
|
+
index: 0,
|
|
27599
|
+
topology: 0
|
|
27600
|
+
});
|
|
27601
|
+
}
|
|
27602
|
+
}
|
|
27603
|
+
|
|
27604
|
+
var __getOwnPropDesc$g = Object.getOwnPropertyDescriptor;
|
|
27605
|
+
var __decorateClass$g = (decorators, target, key, kind) => {
|
|
27606
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$g(target, key) : target;
|
|
27272
27607
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
27273
27608
|
if (decorator = decorators[i])
|
|
27274
27609
|
result = (decorator(result)) || result;
|
|
@@ -27292,7 +27627,7 @@ let QuadShader = class extends Shader {
|
|
|
27292
27627
|
this.setUniformFloat(`height`, 100);
|
|
27293
27628
|
}
|
|
27294
27629
|
};
|
|
27295
|
-
QuadShader = __decorateClass$
|
|
27630
|
+
QuadShader = __decorateClass$g([
|
|
27296
27631
|
RegisterShader(QuadShader, "QuadShader")
|
|
27297
27632
|
], QuadShader);
|
|
27298
27633
|
|
|
@@ -30240,7 +30575,15 @@ class RendererJob {
|
|
|
30240
30575
|
shadowMapPassRenderer;
|
|
30241
30576
|
pointLightShadowRenderer;
|
|
30242
30577
|
ddgiProbeRenderer;
|
|
30243
|
-
|
|
30578
|
+
_postRenderer;
|
|
30579
|
+
get postRenderer() {
|
|
30580
|
+
if (!this._postRenderer) {
|
|
30581
|
+
let gbufferFrame = GBufferFrame.getGBufferFrame("ColorPassGBuffer");
|
|
30582
|
+
this._postRenderer = this.addRenderer(PostRenderer);
|
|
30583
|
+
this._postRenderer.setRenderStates(gbufferFrame);
|
|
30584
|
+
}
|
|
30585
|
+
return this._postRenderer;
|
|
30586
|
+
}
|
|
30244
30587
|
clusterLightingRender;
|
|
30245
30588
|
reflectionRenderer;
|
|
30246
30589
|
occlusionSystem;
|
|
@@ -30264,7 +30607,9 @@ class RendererJob {
|
|
|
30264
30607
|
}
|
|
30265
30608
|
this.shadowMapPassRenderer = new ShadowMapPassRenderer();
|
|
30266
30609
|
this.pointLightShadowRenderer = new PointLightShadowRenderer();
|
|
30267
|
-
|
|
30610
|
+
if (Engine3D.setting.render.postProcessing.fxaa.enable) {
|
|
30611
|
+
this.addPost(new FXAAPost());
|
|
30612
|
+
}
|
|
30268
30613
|
}
|
|
30269
30614
|
addRenderer(c, param) {
|
|
30270
30615
|
let renderer;
|
|
@@ -30294,11 +30639,6 @@ class RendererJob {
|
|
|
30294
30639
|
this.pauseRender = false;
|
|
30295
30640
|
}
|
|
30296
30641
|
addPost(post) {
|
|
30297
|
-
if (!this.postRenderer) {
|
|
30298
|
-
let gbufferFrame = GBufferFrame.getGBufferFrame("ColorPassGBuffer");
|
|
30299
|
-
this.postRenderer = this.addRenderer(PostRenderer);
|
|
30300
|
-
this.postRenderer.setRenderStates(gbufferFrame);
|
|
30301
|
-
}
|
|
30302
30642
|
if (post instanceof PostBase) {
|
|
30303
30643
|
this.postRenderer.attachPost(this.view, post);
|
|
30304
30644
|
}
|
|
@@ -30316,15 +30656,21 @@ class RendererJob {
|
|
|
30316
30656
|
renderFrame() {
|
|
30317
30657
|
let view = this._view;
|
|
30318
30658
|
ProfilerUtil.startView(view);
|
|
30319
|
-
|
|
30320
|
-
|
|
30321
|
-
|
|
30322
|
-
|
|
30323
|
-
if (this.
|
|
30659
|
+
if (this.clusterLightingRender) {
|
|
30660
|
+
GlobalBindGroup.getLightEntries(view.scene).update(view);
|
|
30661
|
+
GlobalBindGroup.getReflectionEntries(view.scene).update(view);
|
|
30662
|
+
}
|
|
30663
|
+
if (Engine3D.setting.occlusionQuery.enable && this.occlusionSystem) {
|
|
30664
|
+
this.occlusionSystem.update(view.camera, view.scene);
|
|
30665
|
+
}
|
|
30666
|
+
if (this.clusterLightingRender) {
|
|
30667
|
+
this.clusterLightingRender.render(view, this.occlusionSystem);
|
|
30668
|
+
}
|
|
30669
|
+
if (Engine3D.setting.shadow.enable && this.shadowMapPassRenderer) {
|
|
30324
30670
|
ShadowLightsCollect.update(view);
|
|
30325
30671
|
this.shadowMapPassRenderer.render(view, this.occlusionSystem);
|
|
30326
30672
|
}
|
|
30327
|
-
if (this.pointLightShadowRenderer) {
|
|
30673
|
+
if (Engine3D.setting.shadow.enable && this.pointLightShadowRenderer) {
|
|
30328
30674
|
this.pointLightShadowRenderer.render(view, this.occlusionSystem);
|
|
30329
30675
|
}
|
|
30330
30676
|
if (this.depthPassRenderer) {
|
|
@@ -34566,9 +34912,9 @@ class LightBase extends ComponentBase {
|
|
|
34566
34912
|
}
|
|
34567
34913
|
}
|
|
34568
34914
|
|
|
34569
|
-
var __getOwnPropDesc$
|
|
34570
|
-
var __decorateClass$
|
|
34571
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$
|
|
34915
|
+
var __getOwnPropDesc$f = Object.getOwnPropertyDescriptor;
|
|
34916
|
+
var __decorateClass$f = (decorators, target, key, kind) => {
|
|
34917
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$f(target, key) : target;
|
|
34572
34918
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
34573
34919
|
if (decorator = decorators[i])
|
|
34574
34920
|
result = (decorator(result)) || result;
|
|
@@ -34610,13 +34956,13 @@ let DirectLight = class extends LightBase {
|
|
|
34610
34956
|
debug() {
|
|
34611
34957
|
}
|
|
34612
34958
|
};
|
|
34613
|
-
DirectLight = __decorateClass$
|
|
34959
|
+
DirectLight = __decorateClass$f([
|
|
34614
34960
|
RegisterComponent(DirectLight, "DirectLight")
|
|
34615
34961
|
], DirectLight);
|
|
34616
34962
|
|
|
34617
|
-
var __getOwnPropDesc$
|
|
34618
|
-
var __decorateClass$
|
|
34619
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$
|
|
34963
|
+
var __getOwnPropDesc$e = Object.getOwnPropertyDescriptor;
|
|
34964
|
+
var __decorateClass$e = (decorators, target, key, kind) => {
|
|
34965
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$e(target, key) : target;
|
|
34620
34966
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
34621
34967
|
if (decorator = decorators[i])
|
|
34622
34968
|
result = (decorator(result)) || result;
|
|
@@ -34674,13 +35020,13 @@ let PointLight = class extends LightBase {
|
|
|
34674
35020
|
debugDraw(show) {
|
|
34675
35021
|
}
|
|
34676
35022
|
};
|
|
34677
|
-
PointLight = __decorateClass$
|
|
35023
|
+
PointLight = __decorateClass$e([
|
|
34678
35024
|
RegisterComponent(PointLight, "PointLight")
|
|
34679
35025
|
], PointLight);
|
|
34680
35026
|
|
|
34681
|
-
var __getOwnPropDesc$
|
|
34682
|
-
var __decorateClass$
|
|
34683
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$
|
|
35027
|
+
var __getOwnPropDesc$d = Object.getOwnPropertyDescriptor;
|
|
35028
|
+
var __decorateClass$d = (decorators, target, key, kind) => {
|
|
35029
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$d(target, key) : target;
|
|
34684
35030
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
34685
35031
|
if (decorator = decorators[i])
|
|
34686
35032
|
result = (decorator(result)) || result;
|
|
@@ -34745,7 +35091,7 @@ let SpotLight = class extends LightBase {
|
|
|
34745
35091
|
debugDraw(show) {
|
|
34746
35092
|
}
|
|
34747
35093
|
};
|
|
34748
|
-
SpotLight = __decorateClass$
|
|
35094
|
+
SpotLight = __decorateClass$d([
|
|
34749
35095
|
RegisterComponent(SpotLight, "SpotLight")
|
|
34750
35096
|
], SpotLight);
|
|
34751
35097
|
|
|
@@ -39298,483 +39644,483 @@ class AtlasParser extends ParserBase {
|
|
|
39298
39644
|
}
|
|
39299
39645
|
}
|
|
39300
39646
|
|
|
39301
|
-
// DEFLATE is a complex format; to read this code, you should probably check the RFC first:
|
|
39302
|
-
// https://tools.ietf.org/html/rfc1951
|
|
39303
|
-
// You may also wish to take a look at the guide I made about this program:
|
|
39304
|
-
// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad
|
|
39305
|
-
// Some of the following code is similar to that of UZIP.js:
|
|
39306
|
-
// https://github.com/photopea/UZIP.js
|
|
39307
|
-
// However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.
|
|
39308
|
-
// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint
|
|
39309
|
-
// is better for memory in most engines (I *think*).
|
|
39310
|
-
|
|
39311
|
-
// aliases for shorter compressed code (most minifers don't do this)
|
|
39312
|
-
var u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array;
|
|
39313
|
-
// fixed length extra bits
|
|
39314
|
-
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]);
|
|
39315
|
-
// fixed distance extra bits
|
|
39316
|
-
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]);
|
|
39317
|
-
// code length index map
|
|
39318
|
-
var clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);
|
|
39319
|
-
// get base, reverse index map from extra bits
|
|
39320
|
-
var freb = function (eb, start) {
|
|
39321
|
-
var b = new u16(31);
|
|
39322
|
-
for (var i = 0; i < 31; ++i) {
|
|
39323
|
-
b[i] = start += 1 << eb[i - 1];
|
|
39324
|
-
}
|
|
39325
|
-
// numbers here are at max 18 bits
|
|
39326
|
-
var r = new i32(b[30]);
|
|
39327
|
-
for (var i = 1; i < 30; ++i) {
|
|
39328
|
-
for (var j = b[i]; j < b[i + 1]; ++j) {
|
|
39329
|
-
r[j] = ((j - b[i]) << 5) | i;
|
|
39330
|
-
}
|
|
39331
|
-
}
|
|
39332
|
-
return { b: b, r: r };
|
|
39333
|
-
};
|
|
39334
|
-
var _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;
|
|
39335
|
-
// we can ignore the fact that the other numbers are wrong; they never happen anyway
|
|
39336
|
-
fl[28] = 258, revfl[258] = 28;
|
|
39337
|
-
var _b = freb(fdeb, 0), fd = _b.b;
|
|
39338
|
-
// map of value to reverse (assuming 16 bits)
|
|
39339
|
-
var rev = new u16(32768);
|
|
39340
|
-
for (var i = 0; i < 32768; ++i) {
|
|
39341
|
-
// reverse table algorithm from SO
|
|
39342
|
-
var x = ((i & 0xAAAA) >> 1) | ((i & 0x5555) << 1);
|
|
39343
|
-
x = ((x & 0xCCCC) >> 2) | ((x & 0x3333) << 2);
|
|
39344
|
-
x = ((x & 0xF0F0) >> 4) | ((x & 0x0F0F) << 4);
|
|
39345
|
-
rev[i] = (((x & 0xFF00) >> 8) | ((x & 0x00FF) << 8)) >> 1;
|
|
39346
|
-
}
|
|
39347
|
-
// create huffman tree from u8 "map": index -> code length for code index
|
|
39348
|
-
// mb (max bits) must be at most 15
|
|
39349
|
-
// TODO: optimize/split up?
|
|
39350
|
-
var hMap = (function (cd, mb, r) {
|
|
39351
|
-
var s = cd.length;
|
|
39352
|
-
// index
|
|
39353
|
-
var i = 0;
|
|
39354
|
-
// u16 "map": index -> # of codes with bit length = index
|
|
39355
|
-
var l = new u16(mb);
|
|
39356
|
-
// length of cd must be 288 (total # of codes)
|
|
39357
|
-
for (; i < s; ++i) {
|
|
39358
|
-
if (cd[i])
|
|
39359
|
-
++l[cd[i] - 1];
|
|
39360
|
-
}
|
|
39361
|
-
// u16 "map": index -> minimum code for bit length = index
|
|
39362
|
-
var le = new u16(mb);
|
|
39363
|
-
for (i = 1; i < mb; ++i) {
|
|
39364
|
-
le[i] = (le[i - 1] + l[i - 1]) << 1;
|
|
39365
|
-
}
|
|
39366
|
-
var co;
|
|
39367
|
-
if (r) {
|
|
39368
|
-
// u16 "map": index -> number of actual bits, symbol for code
|
|
39369
|
-
co = new u16(1 << mb);
|
|
39370
|
-
// bits to remove for reverser
|
|
39371
|
-
var rvb = 15 - mb;
|
|
39372
|
-
for (i = 0; i < s; ++i) {
|
|
39373
|
-
// ignore 0 lengths
|
|
39374
|
-
if (cd[i]) {
|
|
39375
|
-
// num encoding both symbol and bits read
|
|
39376
|
-
var sv = (i << 4) | cd[i];
|
|
39377
|
-
// free bits
|
|
39378
|
-
var r_1 = mb - cd[i];
|
|
39379
|
-
// start value
|
|
39380
|
-
var v = le[cd[i] - 1]++ << r_1;
|
|
39381
|
-
// m is end value
|
|
39382
|
-
for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {
|
|
39383
|
-
// every 16 bit value starting with the code yields the same result
|
|
39384
|
-
co[rev[v] >> rvb] = sv;
|
|
39385
|
-
}
|
|
39386
|
-
}
|
|
39387
|
-
}
|
|
39388
|
-
}
|
|
39389
|
-
else {
|
|
39390
|
-
co = new u16(s);
|
|
39391
|
-
for (i = 0; i < s; ++i) {
|
|
39392
|
-
if (cd[i]) {
|
|
39393
|
-
co[i] = rev[le[cd[i] - 1]++] >> (15 - cd[i]);
|
|
39394
|
-
}
|
|
39395
|
-
}
|
|
39396
|
-
}
|
|
39397
|
-
return co;
|
|
39398
|
-
});
|
|
39399
|
-
// fixed length tree
|
|
39400
|
-
var flt = new u8(288);
|
|
39401
|
-
for (var i = 0; i < 144; ++i)
|
|
39402
|
-
flt[i] = 8;
|
|
39403
|
-
for (var i = 144; i < 256; ++i)
|
|
39404
|
-
flt[i] = 9;
|
|
39405
|
-
for (var i = 256; i < 280; ++i)
|
|
39406
|
-
flt[i] = 7;
|
|
39407
|
-
for (var i = 280; i < 288; ++i)
|
|
39408
|
-
flt[i] = 8;
|
|
39409
|
-
// fixed distance tree
|
|
39410
|
-
var fdt = new u8(32);
|
|
39411
|
-
for (var i = 0; i < 32; ++i)
|
|
39412
|
-
fdt[i] = 5;
|
|
39413
|
-
// fixed length map
|
|
39414
|
-
var flrm = /*#__PURE__*/ hMap(flt, 9, 1);
|
|
39415
|
-
// fixed distance map
|
|
39416
|
-
var fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);
|
|
39417
|
-
// find max of array
|
|
39418
|
-
var max = function (a) {
|
|
39419
|
-
var m = a[0];
|
|
39420
|
-
for (var i = 1; i < a.length; ++i) {
|
|
39421
|
-
if (a[i] > m)
|
|
39422
|
-
m = a[i];
|
|
39423
|
-
}
|
|
39424
|
-
return m;
|
|
39425
|
-
};
|
|
39426
|
-
// read d, starting at bit p and mask with m
|
|
39427
|
-
var bits = function (d, p, m) {
|
|
39428
|
-
var o = (p / 8) | 0;
|
|
39429
|
-
return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;
|
|
39430
|
-
};
|
|
39431
|
-
// read d, starting at bit p continuing for at least 16 bits
|
|
39432
|
-
var bits16 = function (d, p) {
|
|
39433
|
-
var o = (p / 8) | 0;
|
|
39434
|
-
return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));
|
|
39435
|
-
};
|
|
39436
|
-
// get end of byte
|
|
39437
|
-
var shft = function (p) { return ((p + 7) / 8) | 0; };
|
|
39438
|
-
// typed array slice - allows garbage collector to free original reference,
|
|
39439
|
-
// while being more compatible than .slice
|
|
39440
|
-
var slc = function (v, s, e) {
|
|
39441
|
-
if (s == null || s < 0)
|
|
39442
|
-
s = 0;
|
|
39443
|
-
if (e == null || e > v.length)
|
|
39444
|
-
e = v.length;
|
|
39445
|
-
// can't use .constructor in case user-supplied
|
|
39446
|
-
return new u8(v.subarray(s, e));
|
|
39447
|
-
};
|
|
39448
|
-
// error codes
|
|
39449
|
-
var ec = [
|
|
39450
|
-
'unexpected EOF',
|
|
39451
|
-
'invalid block type',
|
|
39452
|
-
'invalid length/literal',
|
|
39453
|
-
'invalid distance',
|
|
39454
|
-
'stream finished',
|
|
39455
|
-
'no stream handler',
|
|
39456
|
-
,
|
|
39457
|
-
'no callback',
|
|
39458
|
-
'invalid UTF-8 data',
|
|
39459
|
-
'extra field too long',
|
|
39460
|
-
'date not in range 1980-2099',
|
|
39461
|
-
'filename too long',
|
|
39462
|
-
'stream finishing',
|
|
39463
|
-
'invalid zip data'
|
|
39464
|
-
// determined by unknown compression method
|
|
39465
|
-
];
|
|
39466
|
-
var err = function (ind, msg, nt) {
|
|
39467
|
-
var e = new Error(msg || ec[ind]);
|
|
39468
|
-
e.code = ind;
|
|
39469
|
-
if (Error.captureStackTrace)
|
|
39470
|
-
Error.captureStackTrace(e, err);
|
|
39471
|
-
if (!nt)
|
|
39472
|
-
throw e;
|
|
39473
|
-
return e;
|
|
39474
|
-
};
|
|
39475
|
-
// expands raw DEFLATE data
|
|
39476
|
-
var inflt = function (dat, st, buf, dict) {
|
|
39477
|
-
// source length dict length
|
|
39478
|
-
var sl = dat.length, dl = dict ? dict.length : 0;
|
|
39479
|
-
if (!sl || st.f && !st.l)
|
|
39480
|
-
return buf || new u8(0);
|
|
39481
|
-
var noBuf = !buf;
|
|
39482
|
-
// have to estimate size
|
|
39483
|
-
var resize = noBuf || st.i != 2;
|
|
39484
|
-
// no state
|
|
39485
|
-
var noSt = st.i;
|
|
39486
|
-
// Assumes roughly 33% compression ratio average
|
|
39487
|
-
if (noBuf)
|
|
39488
|
-
buf = new u8(sl * 3);
|
|
39489
|
-
// ensure buffer can fit at least l elements
|
|
39490
|
-
var cbuf = function (l) {
|
|
39491
|
-
var bl = buf.length;
|
|
39492
|
-
// need to increase size to fit
|
|
39493
|
-
if (l > bl) {
|
|
39494
|
-
// Double or set to necessary, whichever is greater
|
|
39495
|
-
var nbuf = new u8(Math.max(bl * 2, l));
|
|
39496
|
-
nbuf.set(buf);
|
|
39497
|
-
buf = nbuf;
|
|
39498
|
-
}
|
|
39499
|
-
};
|
|
39500
|
-
// last chunk bitpos bytes
|
|
39501
|
-
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;
|
|
39502
|
-
// total bits
|
|
39503
|
-
var tbts = sl * 8;
|
|
39504
|
-
do {
|
|
39505
|
-
if (!lm) {
|
|
39506
|
-
// BFINAL - this is only 1 when last chunk is next
|
|
39507
|
-
final = bits(dat, pos, 1);
|
|
39508
|
-
// type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman
|
|
39509
|
-
var type = bits(dat, pos + 1, 3);
|
|
39510
|
-
pos += 3;
|
|
39511
|
-
if (!type) {
|
|
39512
|
-
// go to end of byte boundary
|
|
39513
|
-
var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;
|
|
39514
|
-
if (t > sl) {
|
|
39515
|
-
if (noSt)
|
|
39516
|
-
err(0);
|
|
39517
|
-
break;
|
|
39518
|
-
}
|
|
39519
|
-
// ensure size
|
|
39520
|
-
if (resize)
|
|
39521
|
-
cbuf(bt + l);
|
|
39522
|
-
// Copy over uncompressed data
|
|
39523
|
-
buf.set(dat.subarray(s, t), bt);
|
|
39524
|
-
// Get new bitpos, update byte count
|
|
39525
|
-
st.b = bt += l, st.p = pos = t * 8, st.f = final;
|
|
39526
|
-
continue;
|
|
39527
|
-
}
|
|
39528
|
-
else if (type == 1)
|
|
39529
|
-
lm = flrm, dm = fdrm, lbt = 9, dbt = 5;
|
|
39530
|
-
else if (type == 2) {
|
|
39531
|
-
// literal lengths
|
|
39532
|
-
var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;
|
|
39533
|
-
var tl = hLit + bits(dat, pos + 5, 31) + 1;
|
|
39534
|
-
pos += 14;
|
|
39535
|
-
// length+distance tree
|
|
39536
|
-
var ldt = new u8(tl);
|
|
39537
|
-
// code length tree
|
|
39538
|
-
var clt = new u8(19);
|
|
39539
|
-
for (var i = 0; i < hcLen; ++i) {
|
|
39540
|
-
// use index map to get real code
|
|
39541
|
-
clt[clim[i]] = bits(dat, pos + i * 3, 7);
|
|
39542
|
-
}
|
|
39543
|
-
pos += hcLen * 3;
|
|
39544
|
-
// code lengths bits
|
|
39545
|
-
var clb = max(clt), clbmsk = (1 << clb) - 1;
|
|
39546
|
-
// code lengths map
|
|
39547
|
-
var clm = hMap(clt, clb, 1);
|
|
39548
|
-
for (var i = 0; i < tl;) {
|
|
39549
|
-
var r = clm[bits(dat, pos, clbmsk)];
|
|
39550
|
-
// bits read
|
|
39551
|
-
pos += r & 15;
|
|
39552
|
-
// symbol
|
|
39553
|
-
var s = r >> 4;
|
|
39554
|
-
// code length to copy
|
|
39555
|
-
if (s < 16) {
|
|
39556
|
-
ldt[i++] = s;
|
|
39557
|
-
}
|
|
39558
|
-
else {
|
|
39559
|
-
// copy count
|
|
39560
|
-
var c = 0, n = 0;
|
|
39561
|
-
if (s == 16)
|
|
39562
|
-
n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];
|
|
39563
|
-
else if (s == 17)
|
|
39564
|
-
n = 3 + bits(dat, pos, 7), pos += 3;
|
|
39565
|
-
else if (s == 18)
|
|
39566
|
-
n = 11 + bits(dat, pos, 127), pos += 7;
|
|
39567
|
-
while (n--)
|
|
39568
|
-
ldt[i++] = c;
|
|
39569
|
-
}
|
|
39570
|
-
}
|
|
39571
|
-
// length tree distance tree
|
|
39572
|
-
var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);
|
|
39573
|
-
// max length bits
|
|
39574
|
-
lbt = max(lt);
|
|
39575
|
-
// max dist bits
|
|
39576
|
-
dbt = max(dt);
|
|
39577
|
-
lm = hMap(lt, lbt, 1);
|
|
39578
|
-
dm = hMap(dt, dbt, 1);
|
|
39579
|
-
}
|
|
39580
|
-
else
|
|
39581
|
-
err(1);
|
|
39582
|
-
if (pos > tbts) {
|
|
39583
|
-
if (noSt)
|
|
39584
|
-
err(0);
|
|
39585
|
-
break;
|
|
39586
|
-
}
|
|
39587
|
-
}
|
|
39588
|
-
// Make sure the buffer can hold this + the largest possible addition
|
|
39589
|
-
// Maximum chunk size (practically, theoretically infinite) is 2^17
|
|
39590
|
-
if (resize)
|
|
39591
|
-
cbuf(bt + 131072);
|
|
39592
|
-
var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;
|
|
39593
|
-
var lpos = pos;
|
|
39594
|
-
for (;; lpos = pos) {
|
|
39595
|
-
// bits read, code
|
|
39596
|
-
var c = lm[bits16(dat, pos) & lms], sym = c >> 4;
|
|
39597
|
-
pos += c & 15;
|
|
39598
|
-
if (pos > tbts) {
|
|
39599
|
-
if (noSt)
|
|
39600
|
-
err(0);
|
|
39601
|
-
break;
|
|
39602
|
-
}
|
|
39603
|
-
if (!c)
|
|
39604
|
-
err(2);
|
|
39605
|
-
if (sym < 256)
|
|
39606
|
-
buf[bt++] = sym;
|
|
39607
|
-
else if (sym == 256) {
|
|
39608
|
-
lpos = pos, lm = null;
|
|
39609
|
-
break;
|
|
39610
|
-
}
|
|
39611
|
-
else {
|
|
39612
|
-
var add = sym - 254;
|
|
39613
|
-
// no extra bits needed if less
|
|
39614
|
-
if (sym > 264) {
|
|
39615
|
-
// index
|
|
39616
|
-
var i = sym - 257, b = fleb[i];
|
|
39617
|
-
add = bits(dat, pos, (1 << b) - 1) + fl[i];
|
|
39618
|
-
pos += b;
|
|
39619
|
-
}
|
|
39620
|
-
// dist
|
|
39621
|
-
var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;
|
|
39622
|
-
if (!d)
|
|
39623
|
-
err(3);
|
|
39624
|
-
pos += d & 15;
|
|
39625
|
-
var dt = fd[dsym];
|
|
39626
|
-
if (dsym > 3) {
|
|
39627
|
-
var b = fdeb[dsym];
|
|
39628
|
-
dt += bits16(dat, pos) & (1 << b) - 1, pos += b;
|
|
39629
|
-
}
|
|
39630
|
-
if (pos > tbts) {
|
|
39631
|
-
if (noSt)
|
|
39632
|
-
err(0);
|
|
39633
|
-
break;
|
|
39634
|
-
}
|
|
39635
|
-
if (resize)
|
|
39636
|
-
cbuf(bt + 131072);
|
|
39637
|
-
var end = bt + add;
|
|
39638
|
-
if (bt < dt) {
|
|
39639
|
-
var shift = dl - dt, dend = Math.min(dt, end);
|
|
39640
|
-
if (shift + bt < 0)
|
|
39641
|
-
err(3);
|
|
39642
|
-
for (; bt < dend; ++bt)
|
|
39643
|
-
buf[bt] = dict[shift + bt];
|
|
39644
|
-
}
|
|
39645
|
-
for (; bt < end; ++bt)
|
|
39646
|
-
buf[bt] = buf[bt - dt];
|
|
39647
|
-
}
|
|
39648
|
-
}
|
|
39649
|
-
st.l = lm, st.p = lpos, st.b = bt, st.f = final;
|
|
39650
|
-
if (lm)
|
|
39651
|
-
final = 1, st.m = lbt, st.d = dm, st.n = dbt;
|
|
39652
|
-
} while (!final);
|
|
39653
|
-
// don't reallocate for streams or user buffers
|
|
39654
|
-
return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);
|
|
39655
|
-
};
|
|
39656
|
-
// empty
|
|
39657
|
-
var et = /*#__PURE__*/ new u8(0);
|
|
39658
|
-
// read 2 bytes
|
|
39659
|
-
var b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };
|
|
39660
|
-
// read 4 bytes
|
|
39661
|
-
var b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };
|
|
39662
|
-
var b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };
|
|
39663
|
-
/**
|
|
39664
|
-
* Expands DEFLATE data with no wrapper
|
|
39665
|
-
* @param data The data to decompress
|
|
39666
|
-
* @param opts The decompression options
|
|
39667
|
-
* @returns The decompressed version of the data
|
|
39668
|
-
*/
|
|
39669
|
-
function inflateSync(data, opts) {
|
|
39670
|
-
return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);
|
|
39671
|
-
}
|
|
39672
|
-
// text decoder
|
|
39673
|
-
var td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();
|
|
39674
|
-
// text decoder stream
|
|
39675
|
-
var tds = 0;
|
|
39676
|
-
try {
|
|
39677
|
-
td.decode(et, { stream: true });
|
|
39678
|
-
tds = 1;
|
|
39679
|
-
}
|
|
39680
|
-
catch (e) { }
|
|
39681
|
-
// decode UTF8
|
|
39682
|
-
var dutf8 = function (d) {
|
|
39683
|
-
for (var r = '', i = 0;;) {
|
|
39684
|
-
var c = d[i++];
|
|
39685
|
-
var eb = (c > 127) + (c > 223) + (c > 239);
|
|
39686
|
-
if (i + eb > d.length)
|
|
39687
|
-
return { s: r, r: slc(d, i - 1) };
|
|
39688
|
-
if (!eb)
|
|
39689
|
-
r += String.fromCharCode(c);
|
|
39690
|
-
else if (eb == 3) {
|
|
39691
|
-
c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,
|
|
39692
|
-
r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));
|
|
39693
|
-
}
|
|
39694
|
-
else if (eb & 1)
|
|
39695
|
-
r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));
|
|
39696
|
-
else
|
|
39697
|
-
r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));
|
|
39698
|
-
}
|
|
39699
|
-
};
|
|
39700
|
-
/**
|
|
39701
|
-
* Converts a Uint8Array to a string
|
|
39702
|
-
* @param dat The data to decode to string
|
|
39703
|
-
* @param latin1 Whether or not to interpret the data as Latin-1. This should
|
|
39704
|
-
* not need to be true unless encoding to binary string.
|
|
39705
|
-
* @returns The original UTF-8/Latin-1 string
|
|
39706
|
-
*/
|
|
39707
|
-
function strFromU8(dat, latin1) {
|
|
39708
|
-
if (latin1) {
|
|
39709
|
-
var r = '';
|
|
39710
|
-
for (var i = 0; i < dat.length; i += 16384)
|
|
39711
|
-
r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));
|
|
39712
|
-
return r;
|
|
39713
|
-
}
|
|
39714
|
-
else if (td) {
|
|
39715
|
-
return td.decode(dat);
|
|
39716
|
-
}
|
|
39717
|
-
else {
|
|
39718
|
-
var _a = dutf8(dat), s = _a.s, r = _a.r;
|
|
39719
|
-
if (r.length)
|
|
39720
|
-
err(8);
|
|
39721
|
-
return s;
|
|
39722
|
-
}
|
|
39723
|
-
}
|
|
39724
|
-
// skip local zip header
|
|
39725
|
-
var slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };
|
|
39726
|
-
// read zip header
|
|
39727
|
-
var zh = function (d, b, z) {
|
|
39728
|
-
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);
|
|
39729
|
-
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];
|
|
39730
|
-
return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];
|
|
39731
|
-
};
|
|
39732
|
-
// read zip64 extra field
|
|
39733
|
-
var z64e = function (d, b) {
|
|
39734
|
-
for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))
|
|
39735
|
-
;
|
|
39736
|
-
return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];
|
|
39737
|
-
};
|
|
39738
|
-
/**
|
|
39739
|
-
* Synchronously decompresses a ZIP archive. Prefer using `unzip` for better
|
|
39740
|
-
* performance with more than one file.
|
|
39741
|
-
* @param data The raw compressed ZIP file
|
|
39742
|
-
* @param opts The ZIP extraction options
|
|
39743
|
-
* @returns The decompressed files
|
|
39744
|
-
*/
|
|
39745
|
-
function unzipSync(data, opts) {
|
|
39746
|
-
var files = {};
|
|
39747
|
-
var e = data.length - 22;
|
|
39748
|
-
for (; b4(data, e) != 0x6054B50; --e) {
|
|
39749
|
-
if (!e || data.length - e > 65558)
|
|
39750
|
-
err(13);
|
|
39751
|
-
}
|
|
39752
|
-
var c = b2(data, e + 8);
|
|
39753
|
-
if (!c)
|
|
39754
|
-
return {};
|
|
39755
|
-
var o = b4(data, e + 16);
|
|
39756
|
-
var z = o == 4294967295 || c == 65535;
|
|
39757
|
-
if (z) {
|
|
39758
|
-
var ze = b4(data, e - 12);
|
|
39759
|
-
z = b4(data, ze) == 0x6064B50;
|
|
39760
|
-
if (z) {
|
|
39761
|
-
c = b4(data, ze + 32);
|
|
39762
|
-
o = b4(data, ze + 48);
|
|
39763
|
-
}
|
|
39764
|
-
}
|
|
39765
|
-
for (var i = 0; i < c; ++i) {
|
|
39766
|
-
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);
|
|
39767
|
-
o = no;
|
|
39768
|
-
{
|
|
39769
|
-
if (!c_2)
|
|
39770
|
-
files[fn] = slc(data, b, b + sc);
|
|
39771
|
-
else if (c_2 == 8)
|
|
39772
|
-
files[fn] = inflateSync(data.subarray(b, b + sc), { out: new u8(su) });
|
|
39773
|
-
else
|
|
39774
|
-
err(14, 'unknown compression type ' + c_2);
|
|
39775
|
-
}
|
|
39776
|
-
}
|
|
39777
|
-
return files;
|
|
39647
|
+
// DEFLATE is a complex format; to read this code, you should probably check the RFC first:
|
|
39648
|
+
// https://tools.ietf.org/html/rfc1951
|
|
39649
|
+
// You may also wish to take a look at the guide I made about this program:
|
|
39650
|
+
// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad
|
|
39651
|
+
// Some of the following code is similar to that of UZIP.js:
|
|
39652
|
+
// https://github.com/photopea/UZIP.js
|
|
39653
|
+
// However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.
|
|
39654
|
+
// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint
|
|
39655
|
+
// is better for memory in most engines (I *think*).
|
|
39656
|
+
|
|
39657
|
+
// aliases for shorter compressed code (most minifers don't do this)
|
|
39658
|
+
var u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array;
|
|
39659
|
+
// fixed length extra bits
|
|
39660
|
+
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]);
|
|
39661
|
+
// fixed distance extra bits
|
|
39662
|
+
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]);
|
|
39663
|
+
// code length index map
|
|
39664
|
+
var clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);
|
|
39665
|
+
// get base, reverse index map from extra bits
|
|
39666
|
+
var freb = function (eb, start) {
|
|
39667
|
+
var b = new u16(31);
|
|
39668
|
+
for (var i = 0; i < 31; ++i) {
|
|
39669
|
+
b[i] = start += 1 << eb[i - 1];
|
|
39670
|
+
}
|
|
39671
|
+
// numbers here are at max 18 bits
|
|
39672
|
+
var r = new i32(b[30]);
|
|
39673
|
+
for (var i = 1; i < 30; ++i) {
|
|
39674
|
+
for (var j = b[i]; j < b[i + 1]; ++j) {
|
|
39675
|
+
r[j] = ((j - b[i]) << 5) | i;
|
|
39676
|
+
}
|
|
39677
|
+
}
|
|
39678
|
+
return { b: b, r: r };
|
|
39679
|
+
};
|
|
39680
|
+
var _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;
|
|
39681
|
+
// we can ignore the fact that the other numbers are wrong; they never happen anyway
|
|
39682
|
+
fl[28] = 258, revfl[258] = 28;
|
|
39683
|
+
var _b = freb(fdeb, 0), fd = _b.b;
|
|
39684
|
+
// map of value to reverse (assuming 16 bits)
|
|
39685
|
+
var rev = new u16(32768);
|
|
39686
|
+
for (var i = 0; i < 32768; ++i) {
|
|
39687
|
+
// reverse table algorithm from SO
|
|
39688
|
+
var x = ((i & 0xAAAA) >> 1) | ((i & 0x5555) << 1);
|
|
39689
|
+
x = ((x & 0xCCCC) >> 2) | ((x & 0x3333) << 2);
|
|
39690
|
+
x = ((x & 0xF0F0) >> 4) | ((x & 0x0F0F) << 4);
|
|
39691
|
+
rev[i] = (((x & 0xFF00) >> 8) | ((x & 0x00FF) << 8)) >> 1;
|
|
39692
|
+
}
|
|
39693
|
+
// create huffman tree from u8 "map": index -> code length for code index
|
|
39694
|
+
// mb (max bits) must be at most 15
|
|
39695
|
+
// TODO: optimize/split up?
|
|
39696
|
+
var hMap = (function (cd, mb, r) {
|
|
39697
|
+
var s = cd.length;
|
|
39698
|
+
// index
|
|
39699
|
+
var i = 0;
|
|
39700
|
+
// u16 "map": index -> # of codes with bit length = index
|
|
39701
|
+
var l = new u16(mb);
|
|
39702
|
+
// length of cd must be 288 (total # of codes)
|
|
39703
|
+
for (; i < s; ++i) {
|
|
39704
|
+
if (cd[i])
|
|
39705
|
+
++l[cd[i] - 1];
|
|
39706
|
+
}
|
|
39707
|
+
// u16 "map": index -> minimum code for bit length = index
|
|
39708
|
+
var le = new u16(mb);
|
|
39709
|
+
for (i = 1; i < mb; ++i) {
|
|
39710
|
+
le[i] = (le[i - 1] + l[i - 1]) << 1;
|
|
39711
|
+
}
|
|
39712
|
+
var co;
|
|
39713
|
+
if (r) {
|
|
39714
|
+
// u16 "map": index -> number of actual bits, symbol for code
|
|
39715
|
+
co = new u16(1 << mb);
|
|
39716
|
+
// bits to remove for reverser
|
|
39717
|
+
var rvb = 15 - mb;
|
|
39718
|
+
for (i = 0; i < s; ++i) {
|
|
39719
|
+
// ignore 0 lengths
|
|
39720
|
+
if (cd[i]) {
|
|
39721
|
+
// num encoding both symbol and bits read
|
|
39722
|
+
var sv = (i << 4) | cd[i];
|
|
39723
|
+
// free bits
|
|
39724
|
+
var r_1 = mb - cd[i];
|
|
39725
|
+
// start value
|
|
39726
|
+
var v = le[cd[i] - 1]++ << r_1;
|
|
39727
|
+
// m is end value
|
|
39728
|
+
for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {
|
|
39729
|
+
// every 16 bit value starting with the code yields the same result
|
|
39730
|
+
co[rev[v] >> rvb] = sv;
|
|
39731
|
+
}
|
|
39732
|
+
}
|
|
39733
|
+
}
|
|
39734
|
+
}
|
|
39735
|
+
else {
|
|
39736
|
+
co = new u16(s);
|
|
39737
|
+
for (i = 0; i < s; ++i) {
|
|
39738
|
+
if (cd[i]) {
|
|
39739
|
+
co[i] = rev[le[cd[i] - 1]++] >> (15 - cd[i]);
|
|
39740
|
+
}
|
|
39741
|
+
}
|
|
39742
|
+
}
|
|
39743
|
+
return co;
|
|
39744
|
+
});
|
|
39745
|
+
// fixed length tree
|
|
39746
|
+
var flt = new u8(288);
|
|
39747
|
+
for (var i = 0; i < 144; ++i)
|
|
39748
|
+
flt[i] = 8;
|
|
39749
|
+
for (var i = 144; i < 256; ++i)
|
|
39750
|
+
flt[i] = 9;
|
|
39751
|
+
for (var i = 256; i < 280; ++i)
|
|
39752
|
+
flt[i] = 7;
|
|
39753
|
+
for (var i = 280; i < 288; ++i)
|
|
39754
|
+
flt[i] = 8;
|
|
39755
|
+
// fixed distance tree
|
|
39756
|
+
var fdt = new u8(32);
|
|
39757
|
+
for (var i = 0; i < 32; ++i)
|
|
39758
|
+
fdt[i] = 5;
|
|
39759
|
+
// fixed length map
|
|
39760
|
+
var flrm = /*#__PURE__*/ hMap(flt, 9, 1);
|
|
39761
|
+
// fixed distance map
|
|
39762
|
+
var fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);
|
|
39763
|
+
// find max of array
|
|
39764
|
+
var max = function (a) {
|
|
39765
|
+
var m = a[0];
|
|
39766
|
+
for (var i = 1; i < a.length; ++i) {
|
|
39767
|
+
if (a[i] > m)
|
|
39768
|
+
m = a[i];
|
|
39769
|
+
}
|
|
39770
|
+
return m;
|
|
39771
|
+
};
|
|
39772
|
+
// read d, starting at bit p and mask with m
|
|
39773
|
+
var bits = function (d, p, m) {
|
|
39774
|
+
var o = (p / 8) | 0;
|
|
39775
|
+
return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;
|
|
39776
|
+
};
|
|
39777
|
+
// read d, starting at bit p continuing for at least 16 bits
|
|
39778
|
+
var bits16 = function (d, p) {
|
|
39779
|
+
var o = (p / 8) | 0;
|
|
39780
|
+
return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));
|
|
39781
|
+
};
|
|
39782
|
+
// get end of byte
|
|
39783
|
+
var shft = function (p) { return ((p + 7) / 8) | 0; };
|
|
39784
|
+
// typed array slice - allows garbage collector to free original reference,
|
|
39785
|
+
// while being more compatible than .slice
|
|
39786
|
+
var slc = function (v, s, e) {
|
|
39787
|
+
if (s == null || s < 0)
|
|
39788
|
+
s = 0;
|
|
39789
|
+
if (e == null || e > v.length)
|
|
39790
|
+
e = v.length;
|
|
39791
|
+
// can't use .constructor in case user-supplied
|
|
39792
|
+
return new u8(v.subarray(s, e));
|
|
39793
|
+
};
|
|
39794
|
+
// error codes
|
|
39795
|
+
var ec = [
|
|
39796
|
+
'unexpected EOF',
|
|
39797
|
+
'invalid block type',
|
|
39798
|
+
'invalid length/literal',
|
|
39799
|
+
'invalid distance',
|
|
39800
|
+
'stream finished',
|
|
39801
|
+
'no stream handler',
|
|
39802
|
+
,
|
|
39803
|
+
'no callback',
|
|
39804
|
+
'invalid UTF-8 data',
|
|
39805
|
+
'extra field too long',
|
|
39806
|
+
'date not in range 1980-2099',
|
|
39807
|
+
'filename too long',
|
|
39808
|
+
'stream finishing',
|
|
39809
|
+
'invalid zip data'
|
|
39810
|
+
// determined by unknown compression method
|
|
39811
|
+
];
|
|
39812
|
+
var err = function (ind, msg, nt) {
|
|
39813
|
+
var e = new Error(msg || ec[ind]);
|
|
39814
|
+
e.code = ind;
|
|
39815
|
+
if (Error.captureStackTrace)
|
|
39816
|
+
Error.captureStackTrace(e, err);
|
|
39817
|
+
if (!nt)
|
|
39818
|
+
throw e;
|
|
39819
|
+
return e;
|
|
39820
|
+
};
|
|
39821
|
+
// expands raw DEFLATE data
|
|
39822
|
+
var inflt = function (dat, st, buf, dict) {
|
|
39823
|
+
// source length dict length
|
|
39824
|
+
var sl = dat.length, dl = dict ? dict.length : 0;
|
|
39825
|
+
if (!sl || st.f && !st.l)
|
|
39826
|
+
return buf || new u8(0);
|
|
39827
|
+
var noBuf = !buf;
|
|
39828
|
+
// have to estimate size
|
|
39829
|
+
var resize = noBuf || st.i != 2;
|
|
39830
|
+
// no state
|
|
39831
|
+
var noSt = st.i;
|
|
39832
|
+
// Assumes roughly 33% compression ratio average
|
|
39833
|
+
if (noBuf)
|
|
39834
|
+
buf = new u8(sl * 3);
|
|
39835
|
+
// ensure buffer can fit at least l elements
|
|
39836
|
+
var cbuf = function (l) {
|
|
39837
|
+
var bl = buf.length;
|
|
39838
|
+
// need to increase size to fit
|
|
39839
|
+
if (l > bl) {
|
|
39840
|
+
// Double or set to necessary, whichever is greater
|
|
39841
|
+
var nbuf = new u8(Math.max(bl * 2, l));
|
|
39842
|
+
nbuf.set(buf);
|
|
39843
|
+
buf = nbuf;
|
|
39844
|
+
}
|
|
39845
|
+
};
|
|
39846
|
+
// last chunk bitpos bytes
|
|
39847
|
+
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;
|
|
39848
|
+
// total bits
|
|
39849
|
+
var tbts = sl * 8;
|
|
39850
|
+
do {
|
|
39851
|
+
if (!lm) {
|
|
39852
|
+
// BFINAL - this is only 1 when last chunk is next
|
|
39853
|
+
final = bits(dat, pos, 1);
|
|
39854
|
+
// type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman
|
|
39855
|
+
var type = bits(dat, pos + 1, 3);
|
|
39856
|
+
pos += 3;
|
|
39857
|
+
if (!type) {
|
|
39858
|
+
// go to end of byte boundary
|
|
39859
|
+
var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;
|
|
39860
|
+
if (t > sl) {
|
|
39861
|
+
if (noSt)
|
|
39862
|
+
err(0);
|
|
39863
|
+
break;
|
|
39864
|
+
}
|
|
39865
|
+
// ensure size
|
|
39866
|
+
if (resize)
|
|
39867
|
+
cbuf(bt + l);
|
|
39868
|
+
// Copy over uncompressed data
|
|
39869
|
+
buf.set(dat.subarray(s, t), bt);
|
|
39870
|
+
// Get new bitpos, update byte count
|
|
39871
|
+
st.b = bt += l, st.p = pos = t * 8, st.f = final;
|
|
39872
|
+
continue;
|
|
39873
|
+
}
|
|
39874
|
+
else if (type == 1)
|
|
39875
|
+
lm = flrm, dm = fdrm, lbt = 9, dbt = 5;
|
|
39876
|
+
else if (type == 2) {
|
|
39877
|
+
// literal lengths
|
|
39878
|
+
var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;
|
|
39879
|
+
var tl = hLit + bits(dat, pos + 5, 31) + 1;
|
|
39880
|
+
pos += 14;
|
|
39881
|
+
// length+distance tree
|
|
39882
|
+
var ldt = new u8(tl);
|
|
39883
|
+
// code length tree
|
|
39884
|
+
var clt = new u8(19);
|
|
39885
|
+
for (var i = 0; i < hcLen; ++i) {
|
|
39886
|
+
// use index map to get real code
|
|
39887
|
+
clt[clim[i]] = bits(dat, pos + i * 3, 7);
|
|
39888
|
+
}
|
|
39889
|
+
pos += hcLen * 3;
|
|
39890
|
+
// code lengths bits
|
|
39891
|
+
var clb = max(clt), clbmsk = (1 << clb) - 1;
|
|
39892
|
+
// code lengths map
|
|
39893
|
+
var clm = hMap(clt, clb, 1);
|
|
39894
|
+
for (var i = 0; i < tl;) {
|
|
39895
|
+
var r = clm[bits(dat, pos, clbmsk)];
|
|
39896
|
+
// bits read
|
|
39897
|
+
pos += r & 15;
|
|
39898
|
+
// symbol
|
|
39899
|
+
var s = r >> 4;
|
|
39900
|
+
// code length to copy
|
|
39901
|
+
if (s < 16) {
|
|
39902
|
+
ldt[i++] = s;
|
|
39903
|
+
}
|
|
39904
|
+
else {
|
|
39905
|
+
// copy count
|
|
39906
|
+
var c = 0, n = 0;
|
|
39907
|
+
if (s == 16)
|
|
39908
|
+
n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];
|
|
39909
|
+
else if (s == 17)
|
|
39910
|
+
n = 3 + bits(dat, pos, 7), pos += 3;
|
|
39911
|
+
else if (s == 18)
|
|
39912
|
+
n = 11 + bits(dat, pos, 127), pos += 7;
|
|
39913
|
+
while (n--)
|
|
39914
|
+
ldt[i++] = c;
|
|
39915
|
+
}
|
|
39916
|
+
}
|
|
39917
|
+
// length tree distance tree
|
|
39918
|
+
var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);
|
|
39919
|
+
// max length bits
|
|
39920
|
+
lbt = max(lt);
|
|
39921
|
+
// max dist bits
|
|
39922
|
+
dbt = max(dt);
|
|
39923
|
+
lm = hMap(lt, lbt, 1);
|
|
39924
|
+
dm = hMap(dt, dbt, 1);
|
|
39925
|
+
}
|
|
39926
|
+
else
|
|
39927
|
+
err(1);
|
|
39928
|
+
if (pos > tbts) {
|
|
39929
|
+
if (noSt)
|
|
39930
|
+
err(0);
|
|
39931
|
+
break;
|
|
39932
|
+
}
|
|
39933
|
+
}
|
|
39934
|
+
// Make sure the buffer can hold this + the largest possible addition
|
|
39935
|
+
// Maximum chunk size (practically, theoretically infinite) is 2^17
|
|
39936
|
+
if (resize)
|
|
39937
|
+
cbuf(bt + 131072);
|
|
39938
|
+
var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;
|
|
39939
|
+
var lpos = pos;
|
|
39940
|
+
for (;; lpos = pos) {
|
|
39941
|
+
// bits read, code
|
|
39942
|
+
var c = lm[bits16(dat, pos) & lms], sym = c >> 4;
|
|
39943
|
+
pos += c & 15;
|
|
39944
|
+
if (pos > tbts) {
|
|
39945
|
+
if (noSt)
|
|
39946
|
+
err(0);
|
|
39947
|
+
break;
|
|
39948
|
+
}
|
|
39949
|
+
if (!c)
|
|
39950
|
+
err(2);
|
|
39951
|
+
if (sym < 256)
|
|
39952
|
+
buf[bt++] = sym;
|
|
39953
|
+
else if (sym == 256) {
|
|
39954
|
+
lpos = pos, lm = null;
|
|
39955
|
+
break;
|
|
39956
|
+
}
|
|
39957
|
+
else {
|
|
39958
|
+
var add = sym - 254;
|
|
39959
|
+
// no extra bits needed if less
|
|
39960
|
+
if (sym > 264) {
|
|
39961
|
+
// index
|
|
39962
|
+
var i = sym - 257, b = fleb[i];
|
|
39963
|
+
add = bits(dat, pos, (1 << b) - 1) + fl[i];
|
|
39964
|
+
pos += b;
|
|
39965
|
+
}
|
|
39966
|
+
// dist
|
|
39967
|
+
var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;
|
|
39968
|
+
if (!d)
|
|
39969
|
+
err(3);
|
|
39970
|
+
pos += d & 15;
|
|
39971
|
+
var dt = fd[dsym];
|
|
39972
|
+
if (dsym > 3) {
|
|
39973
|
+
var b = fdeb[dsym];
|
|
39974
|
+
dt += bits16(dat, pos) & (1 << b) - 1, pos += b;
|
|
39975
|
+
}
|
|
39976
|
+
if (pos > tbts) {
|
|
39977
|
+
if (noSt)
|
|
39978
|
+
err(0);
|
|
39979
|
+
break;
|
|
39980
|
+
}
|
|
39981
|
+
if (resize)
|
|
39982
|
+
cbuf(bt + 131072);
|
|
39983
|
+
var end = bt + add;
|
|
39984
|
+
if (bt < dt) {
|
|
39985
|
+
var shift = dl - dt, dend = Math.min(dt, end);
|
|
39986
|
+
if (shift + bt < 0)
|
|
39987
|
+
err(3);
|
|
39988
|
+
for (; bt < dend; ++bt)
|
|
39989
|
+
buf[bt] = dict[shift + bt];
|
|
39990
|
+
}
|
|
39991
|
+
for (; bt < end; ++bt)
|
|
39992
|
+
buf[bt] = buf[bt - dt];
|
|
39993
|
+
}
|
|
39994
|
+
}
|
|
39995
|
+
st.l = lm, st.p = lpos, st.b = bt, st.f = final;
|
|
39996
|
+
if (lm)
|
|
39997
|
+
final = 1, st.m = lbt, st.d = dm, st.n = dbt;
|
|
39998
|
+
} while (!final);
|
|
39999
|
+
// don't reallocate for streams or user buffers
|
|
40000
|
+
return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);
|
|
40001
|
+
};
|
|
40002
|
+
// empty
|
|
40003
|
+
var et = /*#__PURE__*/ new u8(0);
|
|
40004
|
+
// read 2 bytes
|
|
40005
|
+
var b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };
|
|
40006
|
+
// read 4 bytes
|
|
40007
|
+
var b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };
|
|
40008
|
+
var b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };
|
|
40009
|
+
/**
|
|
40010
|
+
* Expands DEFLATE data with no wrapper
|
|
40011
|
+
* @param data The data to decompress
|
|
40012
|
+
* @param opts The decompression options
|
|
40013
|
+
* @returns The decompressed version of the data
|
|
40014
|
+
*/
|
|
40015
|
+
function inflateSync(data, opts) {
|
|
40016
|
+
return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);
|
|
40017
|
+
}
|
|
40018
|
+
// text decoder
|
|
40019
|
+
var td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();
|
|
40020
|
+
// text decoder stream
|
|
40021
|
+
var tds = 0;
|
|
40022
|
+
try {
|
|
40023
|
+
td.decode(et, { stream: true });
|
|
40024
|
+
tds = 1;
|
|
40025
|
+
}
|
|
40026
|
+
catch (e) { }
|
|
40027
|
+
// decode UTF8
|
|
40028
|
+
var dutf8 = function (d) {
|
|
40029
|
+
for (var r = '', i = 0;;) {
|
|
40030
|
+
var c = d[i++];
|
|
40031
|
+
var eb = (c > 127) + (c > 223) + (c > 239);
|
|
40032
|
+
if (i + eb > d.length)
|
|
40033
|
+
return { s: r, r: slc(d, i - 1) };
|
|
40034
|
+
if (!eb)
|
|
40035
|
+
r += String.fromCharCode(c);
|
|
40036
|
+
else if (eb == 3) {
|
|
40037
|
+
c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,
|
|
40038
|
+
r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));
|
|
40039
|
+
}
|
|
40040
|
+
else if (eb & 1)
|
|
40041
|
+
r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));
|
|
40042
|
+
else
|
|
40043
|
+
r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));
|
|
40044
|
+
}
|
|
40045
|
+
};
|
|
40046
|
+
/**
|
|
40047
|
+
* Converts a Uint8Array to a string
|
|
40048
|
+
* @param dat The data to decode to string
|
|
40049
|
+
* @param latin1 Whether or not to interpret the data as Latin-1. This should
|
|
40050
|
+
* not need to be true unless encoding to binary string.
|
|
40051
|
+
* @returns The original UTF-8/Latin-1 string
|
|
40052
|
+
*/
|
|
40053
|
+
function strFromU8(dat, latin1) {
|
|
40054
|
+
if (latin1) {
|
|
40055
|
+
var r = '';
|
|
40056
|
+
for (var i = 0; i < dat.length; i += 16384)
|
|
40057
|
+
r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));
|
|
40058
|
+
return r;
|
|
40059
|
+
}
|
|
40060
|
+
else if (td) {
|
|
40061
|
+
return td.decode(dat);
|
|
40062
|
+
}
|
|
40063
|
+
else {
|
|
40064
|
+
var _a = dutf8(dat), s = _a.s, r = _a.r;
|
|
40065
|
+
if (r.length)
|
|
40066
|
+
err(8);
|
|
40067
|
+
return s;
|
|
40068
|
+
}
|
|
40069
|
+
}
|
|
40070
|
+
// skip local zip header
|
|
40071
|
+
var slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };
|
|
40072
|
+
// read zip header
|
|
40073
|
+
var zh = function (d, b, z) {
|
|
40074
|
+
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);
|
|
40075
|
+
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];
|
|
40076
|
+
return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];
|
|
40077
|
+
};
|
|
40078
|
+
// read zip64 extra field
|
|
40079
|
+
var z64e = function (d, b) {
|
|
40080
|
+
for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))
|
|
40081
|
+
;
|
|
40082
|
+
return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];
|
|
40083
|
+
};
|
|
40084
|
+
/**
|
|
40085
|
+
* Synchronously decompresses a ZIP archive. Prefer using `unzip` for better
|
|
40086
|
+
* performance with more than one file.
|
|
40087
|
+
* @param data The raw compressed ZIP file
|
|
40088
|
+
* @param opts The ZIP extraction options
|
|
40089
|
+
* @returns The decompressed files
|
|
40090
|
+
*/
|
|
40091
|
+
function unzipSync(data, opts) {
|
|
40092
|
+
var files = {};
|
|
40093
|
+
var e = data.length - 22;
|
|
40094
|
+
for (; b4(data, e) != 0x6054B50; --e) {
|
|
40095
|
+
if (!e || data.length - e > 65558)
|
|
40096
|
+
err(13);
|
|
40097
|
+
}
|
|
40098
|
+
var c = b2(data, e + 8);
|
|
40099
|
+
if (!c)
|
|
40100
|
+
return {};
|
|
40101
|
+
var o = b4(data, e + 16);
|
|
40102
|
+
var z = o == 4294967295 || c == 65535;
|
|
40103
|
+
if (z) {
|
|
40104
|
+
var ze = b4(data, e - 12);
|
|
40105
|
+
z = b4(data, ze) == 0x6064B50;
|
|
40106
|
+
if (z) {
|
|
40107
|
+
c = b4(data, ze + 32);
|
|
40108
|
+
o = b4(data, ze + 48);
|
|
40109
|
+
}
|
|
40110
|
+
}
|
|
40111
|
+
for (var i = 0; i < c; ++i) {
|
|
40112
|
+
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);
|
|
40113
|
+
o = no;
|
|
40114
|
+
{
|
|
40115
|
+
if (!c_2)
|
|
40116
|
+
files[fn] = slc(data, b, b + sc);
|
|
40117
|
+
else if (c_2 == 8)
|
|
40118
|
+
files[fn] = inflateSync(data.subarray(b, b + sc), { out: new u8(su) });
|
|
40119
|
+
else
|
|
40120
|
+
err(14, 'unknown compression type ' + c_2);
|
|
40121
|
+
}
|
|
40122
|
+
}
|
|
40123
|
+
return files;
|
|
39778
40124
|
}
|
|
39779
40125
|
|
|
39780
40126
|
class UnLitMaterial extends Material {
|
|
@@ -40545,7 +40891,7 @@ class PostProcessingComponent extends ComponentBase {
|
|
|
40545
40891
|
}
|
|
40546
40892
|
}
|
|
40547
40893
|
|
|
40548
|
-
const version = "1.0.
|
|
40894
|
+
const version = "1.0.13";
|
|
40549
40895
|
|
|
40550
40896
|
class Engine3D {
|
|
40551
40897
|
/**
|
|
@@ -45058,9 +45404,9 @@ class AtmosphericTexture2D extends VirtualTexture {
|
|
|
45058
45404
|
}
|
|
45059
45405
|
}
|
|
45060
45406
|
|
|
45061
|
-
var __getOwnPropDesc$
|
|
45062
|
-
var __decorateClass$
|
|
45063
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$
|
|
45407
|
+
var __getOwnPropDesc$c = Object.getOwnPropertyDescriptor;
|
|
45408
|
+
var __decorateClass$c = (decorators, target, key, kind) => {
|
|
45409
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$c(target, key) : target;
|
|
45064
45410
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
45065
45411
|
if (decorator = decorators[i])
|
|
45066
45412
|
result = (decorator(result)) || result;
|
|
@@ -45084,7 +45430,7 @@ let SkyShader = class extends Shader {
|
|
|
45084
45430
|
shaderState.depthCompare = GPUCompareFunction.less;
|
|
45085
45431
|
}
|
|
45086
45432
|
};
|
|
45087
|
-
SkyShader = __decorateClass$
|
|
45433
|
+
SkyShader = __decorateClass$c([
|
|
45088
45434
|
RegisterShader(SkyShader, "SkyShader")
|
|
45089
45435
|
], SkyShader);
|
|
45090
45436
|
|
|
@@ -45882,9 +46228,9 @@ class SkeletonAnimationClipState {
|
|
|
45882
46228
|
}
|
|
45883
46229
|
}
|
|
45884
46230
|
|
|
45885
|
-
var __getOwnPropDesc$
|
|
45886
|
-
var __decorateClass$
|
|
45887
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$
|
|
46231
|
+
var __getOwnPropDesc$b = Object.getOwnPropertyDescriptor;
|
|
46232
|
+
var __decorateClass$b = (decorators, target, key, kind) => {
|
|
46233
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$b(target, key) : target;
|
|
45888
46234
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
45889
46235
|
if (decorator = decorators[i])
|
|
45890
46236
|
result = (decorator(result)) || result;
|
|
@@ -46088,7 +46434,7 @@ let SkeletonAnimationComponent = class extends ComponentBase {
|
|
|
46088
46434
|
this._currentClipState.weight = 1;
|
|
46089
46435
|
}
|
|
46090
46436
|
};
|
|
46091
|
-
SkeletonAnimationComponent = __decorateClass$
|
|
46437
|
+
SkeletonAnimationComponent = __decorateClass$b([
|
|
46092
46438
|
RegisterComponent(SkeletonAnimationComponent, "SkeletonAnimationComponent")
|
|
46093
46439
|
], SkeletonAnimationComponent);
|
|
46094
46440
|
class SkeletonAnimationCrossFadeState {
|
|
@@ -46124,9 +46470,9 @@ class SkeletonAnimationCrossFadeState {
|
|
|
46124
46470
|
}
|
|
46125
46471
|
}
|
|
46126
46472
|
|
|
46127
|
-
var __getOwnPropDesc$
|
|
46128
|
-
var __decorateClass$
|
|
46129
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$
|
|
46473
|
+
var __getOwnPropDesc$a = Object.getOwnPropertyDescriptor;
|
|
46474
|
+
var __decorateClass$a = (decorators, target, key, kind) => {
|
|
46475
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$a(target, key) : target;
|
|
46130
46476
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
46131
46477
|
if (decorator = decorators[i])
|
|
46132
46478
|
result = (decorator(result)) || result;
|
|
@@ -46537,7 +46883,7 @@ let AnimatorComponent = class extends ComponentBase {
|
|
|
46537
46883
|
return dst;
|
|
46538
46884
|
}
|
|
46539
46885
|
};
|
|
46540
|
-
AnimatorComponent = __decorateClass$
|
|
46886
|
+
AnimatorComponent = __decorateClass$a([
|
|
46541
46887
|
RegisterComponent(AnimatorComponent, "AnimatorComponent")
|
|
46542
46888
|
], AnimatorComponent);
|
|
46543
46889
|
class PropertyAnimationClipState {
|
|
@@ -47294,9 +47640,9 @@ class PropertyAnimation extends ComponentBase {
|
|
|
47294
47640
|
}
|
|
47295
47641
|
}
|
|
47296
47642
|
|
|
47297
|
-
var __getOwnPropDesc$
|
|
47298
|
-
var __decorateClass$
|
|
47299
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$
|
|
47643
|
+
var __getOwnPropDesc$9 = Object.getOwnPropertyDescriptor;
|
|
47644
|
+
var __decorateClass$9 = (decorators, target, key, kind) => {
|
|
47645
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$9(target, key) : target;
|
|
47300
47646
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
47301
47647
|
if (decorator = decorators[i])
|
|
47302
47648
|
result = (decorator(result)) || result;
|
|
@@ -47445,7 +47791,7 @@ let SkinnedMeshRenderer2 = class extends MeshRenderer {
|
|
|
47445
47791
|
super.nodeUpdate(view, passType, renderPassState, clusterLightingBuffer);
|
|
47446
47792
|
}
|
|
47447
47793
|
};
|
|
47448
|
-
SkinnedMeshRenderer2 = __decorateClass$
|
|
47794
|
+
SkinnedMeshRenderer2 = __decorateClass$9([
|
|
47449
47795
|
RegisterComponent(SkinnedMeshRenderer2, "SkinnedMeshRenderer2")
|
|
47450
47796
|
], SkinnedMeshRenderer2);
|
|
47451
47797
|
|
|
@@ -52578,9 +52924,9 @@ class UITextField extends UIRenderAble {
|
|
|
52578
52924
|
}
|
|
52579
52925
|
}
|
|
52580
52926
|
|
|
52581
|
-
var __getOwnPropDesc$
|
|
52582
|
-
var __decorateClass$
|
|
52583
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$
|
|
52927
|
+
var __getOwnPropDesc$8 = Object.getOwnPropertyDescriptor;
|
|
52928
|
+
var __decorateClass$8 = (decorators, target, key, kind) => {
|
|
52929
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$8(target, key) : target;
|
|
52584
52930
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
52585
52931
|
if (decorator = decorators[i])
|
|
52586
52932
|
result = (decorator(result)) || result;
|
|
@@ -52657,10 +53003,86 @@ let Light = class extends LightBase {
|
|
|
52657
53003
|
debugDraw(show) {
|
|
52658
53004
|
}
|
|
52659
53005
|
};
|
|
52660
|
-
Light = __decorateClass$
|
|
53006
|
+
Light = __decorateClass$8([
|
|
52661
53007
|
RegisterComponent(Light, "Light")
|
|
52662
53008
|
], Light);
|
|
52663
53009
|
|
|
53010
|
+
var __getOwnPropDesc$7 = Object.getOwnPropertyDescriptor;
|
|
53011
|
+
var __decorateClass$7 = (decorators, target, key, kind) => {
|
|
53012
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$7(target, key) : target;
|
|
53013
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
53014
|
+
if (decorator = decorators[i])
|
|
53015
|
+
result = (decorator(result)) || result;
|
|
53016
|
+
return result;
|
|
53017
|
+
};
|
|
53018
|
+
let FatLineRenderer = class extends RenderNode {
|
|
53019
|
+
_fatLineMaterial = null;
|
|
53020
|
+
_fatLineGeometry = null;
|
|
53021
|
+
constructor() {
|
|
53022
|
+
super();
|
|
53023
|
+
}
|
|
53024
|
+
onEnable() {
|
|
53025
|
+
super.onEnable();
|
|
53026
|
+
}
|
|
53027
|
+
onDisable() {
|
|
53028
|
+
super.onDisable();
|
|
53029
|
+
}
|
|
53030
|
+
cloneTo(obj) {
|
|
53031
|
+
const component = obj.addComponent(FatLineRenderer);
|
|
53032
|
+
component.copyComponent(this);
|
|
53033
|
+
}
|
|
53034
|
+
copyComponent(from) {
|
|
53035
|
+
super.copyComponent(from);
|
|
53036
|
+
return this;
|
|
53037
|
+
}
|
|
53038
|
+
/**
|
|
53039
|
+
* Set FatLine geometry
|
|
53040
|
+
*/
|
|
53041
|
+
set geometry(value) {
|
|
53042
|
+
super.geometry = value;
|
|
53043
|
+
this._fatLineGeometry = value;
|
|
53044
|
+
if (value) {
|
|
53045
|
+
this.instanceCount = value.instanceCount;
|
|
53046
|
+
if (this._fatLineMaterial && value.instanceBuffer) {
|
|
53047
|
+
this._fatLineMaterial.setInstanceBuffer(value.instanceBuffer);
|
|
53048
|
+
}
|
|
53049
|
+
}
|
|
53050
|
+
}
|
|
53051
|
+
get geometry() {
|
|
53052
|
+
return this._fatLineGeometry;
|
|
53053
|
+
}
|
|
53054
|
+
/**
|
|
53055
|
+
* Set FatLine material
|
|
53056
|
+
*/
|
|
53057
|
+
set material(value) {
|
|
53058
|
+
this.materials = [value];
|
|
53059
|
+
this._fatLineMaterial = value;
|
|
53060
|
+
if (this._fatLineGeometry && this._fatLineGeometry.instanceBuffer) {
|
|
53061
|
+
value.setInstanceBuffer(this._fatLineGeometry.instanceBuffer);
|
|
53062
|
+
}
|
|
53063
|
+
}
|
|
53064
|
+
get material() {
|
|
53065
|
+
return this._fatLineMaterial;
|
|
53066
|
+
}
|
|
53067
|
+
/**
|
|
53068
|
+
* Override nodeUpdate to automatically update FatLine-specific uniforms
|
|
53069
|
+
*/
|
|
53070
|
+
nodeUpdate(view, passType, renderPassState, clusterLightingBuffer) {
|
|
53071
|
+
if (this._fatLineMaterial && this.object3D) {
|
|
53072
|
+
this._fatLineMaterial.setModelMatrix(this.object3D.transform.worldMatrix);
|
|
53073
|
+
const width = webGPUContext.presentationSize[0];
|
|
53074
|
+
const height = webGPUContext.presentationSize[1];
|
|
53075
|
+
if (width > 0 && height > 0) {
|
|
53076
|
+
this._fatLineMaterial.resolution = new Vector2(width, height);
|
|
53077
|
+
}
|
|
53078
|
+
}
|
|
53079
|
+
super.nodeUpdate(view, passType, renderPassState, clusterLightingBuffer);
|
|
53080
|
+
}
|
|
53081
|
+
};
|
|
53082
|
+
FatLineRenderer = __decorateClass$7([
|
|
53083
|
+
RegisterComponent(FatLineRenderer, "FatLineRenderer")
|
|
53084
|
+
], FatLineRenderer);
|
|
53085
|
+
|
|
52664
53086
|
class Probe extends Object3D {
|
|
52665
53087
|
index = 0;
|
|
52666
53088
|
drawCallFrame = -1;
|
|
@@ -52959,9 +53381,9 @@ class InstanceDrawComponent extends RenderNode {
|
|
|
52959
53381
|
}
|
|
52960
53382
|
}
|
|
52961
53383
|
|
|
52962
|
-
var __getOwnPropDesc$
|
|
52963
|
-
var __decorateClass$
|
|
52964
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$
|
|
53384
|
+
var __getOwnPropDesc$6 = Object.getOwnPropertyDescriptor;
|
|
53385
|
+
var __decorateClass$6 = (decorators, target, key, kind) => {
|
|
53386
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$6(target, key) : target;
|
|
52965
53387
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
52966
53388
|
if (decorator = decorators[i])
|
|
52967
53389
|
result = (decorator(result)) || result;
|
|
@@ -52987,13 +53409,13 @@ let MeshFilter = class extends MeshRenderer {
|
|
|
52987
53409
|
}
|
|
52988
53410
|
}
|
|
52989
53411
|
};
|
|
52990
|
-
MeshFilter = __decorateClass$
|
|
53412
|
+
MeshFilter = __decorateClass$6([
|
|
52991
53413
|
RegisterComponent(MeshFilter, "MeshFilter")
|
|
52992
53414
|
], MeshFilter);
|
|
52993
53415
|
|
|
52994
|
-
var __getOwnPropDesc$
|
|
52995
|
-
var __decorateClass$
|
|
52996
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$
|
|
53416
|
+
var __getOwnPropDesc$5 = Object.getOwnPropertyDescriptor;
|
|
53417
|
+
var __decorateClass$5 = (decorators, target, key, kind) => {
|
|
53418
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$5(target, key) : target;
|
|
52997
53419
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
52998
53420
|
if (decorator = decorators[i])
|
|
52999
53421
|
result = (decorator(result)) || result;
|
|
@@ -53119,7 +53541,7 @@ let SkinnedMeshRenderer = class extends MeshRenderer {
|
|
|
53119
53541
|
super.nodeUpdate(view, passType, renderPassState, clusterLightingBuffer);
|
|
53120
53542
|
}
|
|
53121
53543
|
};
|
|
53122
|
-
SkinnedMeshRenderer = __decorateClass$
|
|
53544
|
+
SkinnedMeshRenderer = __decorateClass$5([
|
|
53123
53545
|
RegisterComponent(SkinnedMeshRenderer, "SkinnedMeshRenderer")
|
|
53124
53546
|
], SkinnedMeshRenderer);
|
|
53125
53547
|
|
|
@@ -53951,6 +54373,230 @@ class ExtrudeGeometry extends GeometryBase {
|
|
|
53951
54373
|
}
|
|
53952
54374
|
}
|
|
53953
54375
|
|
|
54376
|
+
class FatLineGeometry extends GeometryBase {
|
|
54377
|
+
_instanceBuffer;
|
|
54378
|
+
_instanceData;
|
|
54379
|
+
_instanceCount = 0;
|
|
54380
|
+
constructor() {
|
|
54381
|
+
super();
|
|
54382
|
+
this.initBaseGeometry();
|
|
54383
|
+
}
|
|
54384
|
+
/**
|
|
54385
|
+
* Initialize base quad geometry (shared by all line segments)
|
|
54386
|
+
* This is similar to ThreeJS LineSegmentsGeometry base geometry
|
|
54387
|
+
*/
|
|
54388
|
+
initBaseGeometry() {
|
|
54389
|
+
const positions = new Float32Array([
|
|
54390
|
+
-1,
|
|
54391
|
+
2,
|
|
54392
|
+
0,
|
|
54393
|
+
1,
|
|
54394
|
+
2,
|
|
54395
|
+
0,
|
|
54396
|
+
// Top endcap
|
|
54397
|
+
-1,
|
|
54398
|
+
1,
|
|
54399
|
+
0,
|
|
54400
|
+
1,
|
|
54401
|
+
1,
|
|
54402
|
+
0,
|
|
54403
|
+
// Top of line segment
|
|
54404
|
+
-1,
|
|
54405
|
+
0,
|
|
54406
|
+
0,
|
|
54407
|
+
1,
|
|
54408
|
+
0,
|
|
54409
|
+
0,
|
|
54410
|
+
// Bottom of line segment
|
|
54411
|
+
-1,
|
|
54412
|
+
-1,
|
|
54413
|
+
0,
|
|
54414
|
+
1,
|
|
54415
|
+
-1,
|
|
54416
|
+
0
|
|
54417
|
+
// Bottom endcap
|
|
54418
|
+
]);
|
|
54419
|
+
const uvs = new Float32Array([
|
|
54420
|
+
-1,
|
|
54421
|
+
2,
|
|
54422
|
+
1,
|
|
54423
|
+
2,
|
|
54424
|
+
-1,
|
|
54425
|
+
1,
|
|
54426
|
+
1,
|
|
54427
|
+
1,
|
|
54428
|
+
-1,
|
|
54429
|
+
-1,
|
|
54430
|
+
1,
|
|
54431
|
+
-1,
|
|
54432
|
+
-1,
|
|
54433
|
+
-2,
|
|
54434
|
+
1,
|
|
54435
|
+
-2
|
|
54436
|
+
]);
|
|
54437
|
+
const indices = new Uint16Array([
|
|
54438
|
+
0,
|
|
54439
|
+
2,
|
|
54440
|
+
1,
|
|
54441
|
+
2,
|
|
54442
|
+
3,
|
|
54443
|
+
1,
|
|
54444
|
+
// First quad
|
|
54445
|
+
2,
|
|
54446
|
+
4,
|
|
54447
|
+
3,
|
|
54448
|
+
4,
|
|
54449
|
+
5,
|
|
54450
|
+
3,
|
|
54451
|
+
// Second quad
|
|
54452
|
+
4,
|
|
54453
|
+
6,
|
|
54454
|
+
5,
|
|
54455
|
+
6,
|
|
54456
|
+
7,
|
|
54457
|
+
5
|
|
54458
|
+
// Third quad
|
|
54459
|
+
]);
|
|
54460
|
+
this.setIndices(indices);
|
|
54461
|
+
this.setAttribute(VertexAttributeName.position, positions);
|
|
54462
|
+
this.setAttribute(VertexAttributeName.uv, uvs);
|
|
54463
|
+
this.addSubGeometry({
|
|
54464
|
+
indexStart: 0,
|
|
54465
|
+
indexCount: indices.length,
|
|
54466
|
+
vertexStart: 0,
|
|
54467
|
+
vertexCount: positions.length / 3,
|
|
54468
|
+
firstStart: 0,
|
|
54469
|
+
index: 0,
|
|
54470
|
+
topology: 0
|
|
54471
|
+
});
|
|
54472
|
+
}
|
|
54473
|
+
/**
|
|
54474
|
+
* Set line positions from continuous points array
|
|
54475
|
+
* @param positions Array of positions [x1,y1,z1, x2,y2,z2, ...]
|
|
54476
|
+
*/
|
|
54477
|
+
setPositions(positions) {
|
|
54478
|
+
const posArray = positions instanceof Float32Array ? positions : new Float32Array(positions);
|
|
54479
|
+
const numPoints = posArray.length / 3;
|
|
54480
|
+
const numSegments = numPoints - 1;
|
|
54481
|
+
if (numSegments <= 0) {
|
|
54482
|
+
console.warn("FatLineGeometry: Need at least 2 points");
|
|
54483
|
+
return this;
|
|
54484
|
+
}
|
|
54485
|
+
const instanceData = new Float32Array(numSegments * 16);
|
|
54486
|
+
for (let i = 0; i < numSegments; i++) {
|
|
54487
|
+
const i0 = i * 3;
|
|
54488
|
+
const i1 = (i + 1) * 3;
|
|
54489
|
+
instanceData[i * 16 + 0] = posArray[i0 + 0];
|
|
54490
|
+
instanceData[i * 16 + 1] = posArray[i0 + 1];
|
|
54491
|
+
instanceData[i * 16 + 2] = posArray[i0 + 2];
|
|
54492
|
+
instanceData[i * 16 + 3] = 0;
|
|
54493
|
+
instanceData[i * 16 + 4] = posArray[i1 + 0];
|
|
54494
|
+
instanceData[i * 16 + 5] = posArray[i1 + 1];
|
|
54495
|
+
instanceData[i * 16 + 6] = posArray[i1 + 2];
|
|
54496
|
+
instanceData[i * 16 + 7] = 0;
|
|
54497
|
+
instanceData[i * 16 + 8] = 1;
|
|
54498
|
+
instanceData[i * 16 + 9] = 1;
|
|
54499
|
+
instanceData[i * 16 + 10] = 1;
|
|
54500
|
+
instanceData[i * 16 + 11] = 0;
|
|
54501
|
+
instanceData[i * 16 + 12] = 1;
|
|
54502
|
+
instanceData[i * 16 + 13] = 1;
|
|
54503
|
+
instanceData[i * 16 + 14] = 1;
|
|
54504
|
+
instanceData[i * 16 + 15] = 0;
|
|
54505
|
+
}
|
|
54506
|
+
this._instanceData = instanceData;
|
|
54507
|
+
this._instanceCount = numSegments;
|
|
54508
|
+
this.computeBoundingBox(posArray);
|
|
54509
|
+
return this;
|
|
54510
|
+
}
|
|
54511
|
+
/**
|
|
54512
|
+
* Set colors for line segments
|
|
54513
|
+
* @param colors Array of colors [r1,g1,b1, r2,g2,b2, ...] for each point
|
|
54514
|
+
*/
|
|
54515
|
+
setColors(colors) {
|
|
54516
|
+
const colorArray = colors instanceof Float32Array ? colors : new Float32Array(colors);
|
|
54517
|
+
if (!this._instanceData) {
|
|
54518
|
+
console.warn(
|
|
54519
|
+
"FatLineGeometry: Must call setPositions() before setColors()"
|
|
54520
|
+
);
|
|
54521
|
+
return this;
|
|
54522
|
+
}
|
|
54523
|
+
const numPoints = colorArray.length / 3;
|
|
54524
|
+
const numSegments = numPoints - 1;
|
|
54525
|
+
if (numSegments !== this._instanceCount) {
|
|
54526
|
+
console.warn(
|
|
54527
|
+
"FatLineGeometry: Color array length doesn't match segment count"
|
|
54528
|
+
);
|
|
54529
|
+
return this;
|
|
54530
|
+
}
|
|
54531
|
+
for (let i = 0; i < numSegments; i++) {
|
|
54532
|
+
const i0 = i * 3;
|
|
54533
|
+
const i1 = (i + 1) * 3;
|
|
54534
|
+
this._instanceData[i * 16 + 8] = colorArray[i0 + 0];
|
|
54535
|
+
this._instanceData[i * 16 + 9] = colorArray[i0 + 1];
|
|
54536
|
+
this._instanceData[i * 16 + 10] = colorArray[i0 + 2];
|
|
54537
|
+
this._instanceData[i * 16 + 12] = colorArray[i1 + 0];
|
|
54538
|
+
this._instanceData[i * 16 + 13] = colorArray[i1 + 1];
|
|
54539
|
+
this._instanceData[i * 16 + 14] = colorArray[i1 + 2];
|
|
54540
|
+
}
|
|
54541
|
+
return this;
|
|
54542
|
+
}
|
|
54543
|
+
/**
|
|
54544
|
+
* Compute bounding box from positions
|
|
54545
|
+
*/
|
|
54546
|
+
computeBoundingBox(positions) {
|
|
54547
|
+
const min = new Vector3(Infinity, Infinity, Infinity);
|
|
54548
|
+
const max = new Vector3(-Infinity, -Infinity, -Infinity);
|
|
54549
|
+
for (let i = 0; i < positions.length; i += 3) {
|
|
54550
|
+
const x = positions[i];
|
|
54551
|
+
const y = positions[i + 1];
|
|
54552
|
+
const z = positions[i + 2];
|
|
54553
|
+
min.x = Math.min(min.x, x);
|
|
54554
|
+
min.y = Math.min(min.y, y);
|
|
54555
|
+
min.z = Math.min(min.z, z);
|
|
54556
|
+
max.x = Math.max(max.x, x);
|
|
54557
|
+
max.y = Math.max(max.y, y);
|
|
54558
|
+
max.z = Math.max(max.z, z);
|
|
54559
|
+
}
|
|
54560
|
+
const size = Vector3.sub(max, min);
|
|
54561
|
+
this.bounds = new BoundingBox(Vector3.ZERO.clone(), size);
|
|
54562
|
+
this.bounds.setFromMinMax(min, max);
|
|
54563
|
+
}
|
|
54564
|
+
/**
|
|
54565
|
+
* Get instance data for GPU upload
|
|
54566
|
+
*/
|
|
54567
|
+
get instanceData() {
|
|
54568
|
+
return this._instanceData;
|
|
54569
|
+
}
|
|
54570
|
+
/**
|
|
54571
|
+
* Get number of line segments (instances)
|
|
54572
|
+
*/
|
|
54573
|
+
get instanceCount() {
|
|
54574
|
+
return this._instanceCount;
|
|
54575
|
+
}
|
|
54576
|
+
/**
|
|
54577
|
+
* Get or create instance buffer
|
|
54578
|
+
*/
|
|
54579
|
+
get instanceBuffer() {
|
|
54580
|
+
if (!this._instanceBuffer && this._instanceData) {
|
|
54581
|
+
this._instanceBuffer = new StorageGPUBuffer(
|
|
54582
|
+
this._instanceData.byteLength
|
|
54583
|
+
);
|
|
54584
|
+
this._instanceBuffer.setFloat32Array("", this._instanceData);
|
|
54585
|
+
this._instanceBuffer.apply();
|
|
54586
|
+
}
|
|
54587
|
+
return this._instanceBuffer;
|
|
54588
|
+
}
|
|
54589
|
+
/**
|
|
54590
|
+
* Update instance buffer with new data
|
|
54591
|
+
*/
|
|
54592
|
+
updateInstanceBuffer() {
|
|
54593
|
+
if (this._instanceBuffer && this._instanceData) {
|
|
54594
|
+
this._instanceBuffer.setFloat32Array("", this._instanceData);
|
|
54595
|
+
this._instanceBuffer.apply();
|
|
54596
|
+
}
|
|
54597
|
+
}
|
|
54598
|
+
}
|
|
54599
|
+
|
|
53954
54600
|
class VertexBufferLayout {
|
|
53955
54601
|
name;
|
|
53956
54602
|
offset;
|
|
@@ -59221,9 +59867,9 @@ class PrefabTextureParser extends ParserBase {
|
|
|
59221
59867
|
}
|
|
59222
59868
|
}
|
|
59223
59869
|
|
|
59224
|
-
var __getOwnPropDesc$
|
|
59225
|
-
var __decorateClass$
|
|
59226
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$
|
|
59870
|
+
var __getOwnPropDesc$4 = Object.getOwnPropertyDescriptor;
|
|
59871
|
+
var __decorateClass$4 = (decorators, target, key, kind) => {
|
|
59872
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$4(target, key) : target;
|
|
59227
59873
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
59228
59874
|
if (decorator = decorators[i])
|
|
59229
59875
|
result = (decorator(result)) || result;
|
|
@@ -59342,13 +59988,13 @@ let LitSSSShader = class extends Shader {
|
|
|
59342
59988
|
}
|
|
59343
59989
|
}
|
|
59344
59990
|
};
|
|
59345
|
-
LitSSSShader = __decorateClass$
|
|
59991
|
+
LitSSSShader = __decorateClass$4([
|
|
59346
59992
|
RegisterShader(LitSSSShader, "LitSSSShader")
|
|
59347
59993
|
], LitSSSShader);
|
|
59348
59994
|
|
|
59349
|
-
var __getOwnPropDesc$
|
|
59350
|
-
var __decorateClass$
|
|
59351
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$
|
|
59995
|
+
var __getOwnPropDesc$3 = Object.getOwnPropertyDescriptor;
|
|
59996
|
+
var __decorateClass$3 = (decorators, target, key, kind) => {
|
|
59997
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$3(target, key) : target;
|
|
59352
59998
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
59353
59999
|
if (decorator = decorators[i])
|
|
59354
60000
|
result = (decorator(result)) || result;
|
|
@@ -59444,7 +60090,7 @@ let LitShader = class extends Shader {
|
|
|
59444
60090
|
}
|
|
59445
60091
|
}
|
|
59446
60092
|
};
|
|
59447
|
-
LitShader = __decorateClass$
|
|
60093
|
+
LitShader = __decorateClass$3([
|
|
59448
60094
|
RegisterShader(LitShader, "LitShader")
|
|
59449
60095
|
], LitShader);
|
|
59450
60096
|
|
|
@@ -59603,6 +60249,47 @@ class PrefabStringUtil {
|
|
|
59603
60249
|
}
|
|
59604
60250
|
}
|
|
59605
60251
|
|
|
60252
|
+
var __getOwnPropDesc$2 = Object.getOwnPropertyDescriptor;
|
|
60253
|
+
var __decorateClass$2 = (decorators, target, key, kind) => {
|
|
60254
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$2(target, key) : target;
|
|
60255
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
60256
|
+
if (decorator = decorators[i])
|
|
60257
|
+
result = (decorator(result)) || result;
|
|
60258
|
+
return result;
|
|
60259
|
+
};
|
|
60260
|
+
let FatLineShader = class extends Shader {
|
|
60261
|
+
constructor() {
|
|
60262
|
+
super();
|
|
60263
|
+
const colorShader = new RenderShaderPass("FatLine_VS", "FatLine_FS");
|
|
60264
|
+
colorShader.setShaderEntry(`VertMain`, `FragMain`);
|
|
60265
|
+
this.addRenderPass(colorShader);
|
|
60266
|
+
const shaderState = colorShader.shaderState;
|
|
60267
|
+
shaderState.acceptShadow = false;
|
|
60268
|
+
shaderState.castShadow = false;
|
|
60269
|
+
shaderState.receiveEnv = false;
|
|
60270
|
+
shaderState.acceptGI = false;
|
|
60271
|
+
shaderState.useLight = false;
|
|
60272
|
+
shaderState.cullMode = GPUCullMode.none;
|
|
60273
|
+
shaderState.depthWriteEnabled = true;
|
|
60274
|
+
this.setDefault();
|
|
60275
|
+
}
|
|
60276
|
+
/**
|
|
60277
|
+
* Set default uniform values
|
|
60278
|
+
*/
|
|
60279
|
+
setDefault() {
|
|
60280
|
+
this.setUniformColor(`baseColor`, new Color(1, 1, 1, 1));
|
|
60281
|
+
this.setUniformFloat(`lineWidth`, 1);
|
|
60282
|
+
this.setUniformFloat(`opacity`, 1);
|
|
60283
|
+
this.setUniformVector2(`resolution`, new Vector2(1920, 1080));
|
|
60284
|
+
const identityMatrix = new Matrix4();
|
|
60285
|
+
const pass = this.getDefaultColorShader();
|
|
60286
|
+
pass.setUniform(`modelMatrix`, identityMatrix.rawData);
|
|
60287
|
+
}
|
|
60288
|
+
};
|
|
60289
|
+
FatLineShader = __decorateClass$2([
|
|
60290
|
+
RegisterShader(FatLineShader, "FatLineShader")
|
|
60291
|
+
], FatLineShader);
|
|
60292
|
+
|
|
59606
60293
|
var __getOwnPropDesc$1 = Object.getOwnPropertyDescriptor;
|
|
59607
60294
|
var __decorateClass$1 = (decorators, target, key, kind) => {
|
|
59608
60295
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1(target, key) : target;
|
|
@@ -59939,6 +60626,78 @@ class ColorLitMaterial extends Material {
|
|
|
59939
60626
|
}
|
|
59940
60627
|
}
|
|
59941
60628
|
|
|
60629
|
+
class FatLineMaterial extends Material {
|
|
60630
|
+
constructor() {
|
|
60631
|
+
super();
|
|
60632
|
+
this.shader = new FatLineShader();
|
|
60633
|
+
this.transparent = true;
|
|
60634
|
+
}
|
|
60635
|
+
/**
|
|
60636
|
+
* Set instance buffer for line segments
|
|
60637
|
+
* This should be called after setting the geometry
|
|
60638
|
+
*/
|
|
60639
|
+
setInstanceBuffer(buffer) {
|
|
60640
|
+
this.shader.setStorageBuffer("instances", buffer);
|
|
60641
|
+
}
|
|
60642
|
+
/**
|
|
60643
|
+
* Set model matrix for transforming line segments
|
|
60644
|
+
* This should be updated each frame if the object moves
|
|
60645
|
+
*/
|
|
60646
|
+
setModelMatrix(matrix) {
|
|
60647
|
+
const pass = this.shader.getDefaultColorShader();
|
|
60648
|
+
pass.setUniform("modelMatrix", matrix.rawData);
|
|
60649
|
+
}
|
|
60650
|
+
/**
|
|
60651
|
+
* Set base color (tint color)
|
|
60652
|
+
*/
|
|
60653
|
+
set baseColor(color) {
|
|
60654
|
+
this.shader.setUniformColor(`baseColor`, color);
|
|
60655
|
+
}
|
|
60656
|
+
/**
|
|
60657
|
+
* Get base color (tint color)
|
|
60658
|
+
*/
|
|
60659
|
+
get baseColor() {
|
|
60660
|
+
return this.shader.getUniformColor("baseColor");
|
|
60661
|
+
}
|
|
60662
|
+
/**
|
|
60663
|
+
* Set line width in pixels
|
|
60664
|
+
*/
|
|
60665
|
+
set lineWidth(value) {
|
|
60666
|
+
this.shader.setUniformFloat(`lineWidth`, value);
|
|
60667
|
+
}
|
|
60668
|
+
/**
|
|
60669
|
+
* Get line width in pixels
|
|
60670
|
+
*/
|
|
60671
|
+
get lineWidth() {
|
|
60672
|
+
return this.shader.getUniformFloat("lineWidth");
|
|
60673
|
+
}
|
|
60674
|
+
/**
|
|
60675
|
+
* Set opacity (0-1)
|
|
60676
|
+
*/
|
|
60677
|
+
set opacity(value) {
|
|
60678
|
+
this.shader.setUniformFloat(`opacity`, value);
|
|
60679
|
+
}
|
|
60680
|
+
/**
|
|
60681
|
+
* Get opacity (0-1)
|
|
60682
|
+
*/
|
|
60683
|
+
get opacity() {
|
|
60684
|
+
return this.shader.getUniformFloat("opacity");
|
|
60685
|
+
}
|
|
60686
|
+
/**
|
|
60687
|
+
* Set viewport resolution for correct pixel-space calculations
|
|
60688
|
+
* This should be set automatically by the renderer
|
|
60689
|
+
*/
|
|
60690
|
+
set resolution(value) {
|
|
60691
|
+
this.shader.setUniformVector2(`resolution`, value);
|
|
60692
|
+
}
|
|
60693
|
+
/**
|
|
60694
|
+
* Get viewport resolution
|
|
60695
|
+
*/
|
|
60696
|
+
get resolution() {
|
|
60697
|
+
return this.shader.getUniformVector2("resolution");
|
|
60698
|
+
}
|
|
60699
|
+
}
|
|
60700
|
+
|
|
59942
60701
|
class LambertMaterial extends Material {
|
|
59943
60702
|
/**
|
|
59944
60703
|
* @constructor
|
|
@@ -65718,4 +66477,4 @@ const __viteBrowserExternal = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.def
|
|
|
65718
66477
|
__proto__: null
|
|
65719
66478
|
}, Symbol.toStringTag, { value: 'Module' }));
|
|
65720
66479
|
|
|
65721
|
-
export { AccelerateDecelerateInterpolator, AccelerateInterpolator, AnimationCurve, AnimationCurveT, AnimationMonitor, AnimatorComponent, AnimatorEventKeyframe, AnticipateInterpolator, AnticipateOvershootInterpolator, ArrayHas, ArrayItemIndex, AtlasParser, AtmosphericComponent, AtmosphericScatteringSky, AtmosphericScatteringSkySetting, AtmosphericScatteringSky_shader, AttributeAnimCurve, AxisObject, B3DMLoader, B3DMLoaderBase, B3DMParseUtil, B3DMParser, BRDFLUT, BRDFLUTGenerate, BRDF_frag, BatchTable, BiMap, BillboardComponent, BillboardType, BitUtil, BitmapTexture2D, BitmapTexture2DArray, BitmapTextureCube, Blend, BlendFactor, BlendMode, BlendShapeData, BlendShapePropertyData, BloomPost, BlurEffectCreatorBlur_cs, BlurEffectCreatorSample_cs, BlurTexture2DBufferCreator, BounceInterpolator, BoundUtil, BoundingBox, BoundingSphere, BoxColliderShape, BoxGeometry, BrdfLut_frag, BsDF_frag, BxDF_frag, BxdfDebug_frag, BytesArray, CEvent, CEventDispatcher, CEventListener, CResizeEvent, CSM, Camera3D, CameraControllerBase, CameraType, CameraUtil, CapsuleColliderShape, CastPointShadowMaterialPass, CastShadowMaterialPass, Clearcoat_frag, ClusterBoundsSource_cs, ClusterConfig, ClusterDebug_frag, ClusterLight, ClusterLightingBuffer, ClusterLightingRender, ClusterLighting_cs, CollectInfo, ColliderComponent, ColliderShape, ColliderShapeType, Color, ColorGradient, ColorLitMaterial, ColorLitShader, ColorPassFragmentOutput, ColorPassRenderer, ColorUtil, ComData, Combine_cs, Common_frag, Common_vert, ComponentBase, ComponentCollect, ComputeGPUBuffer, ComputeShader, Context3D, CubeCamera, CubeMapFaceEnum, CubeSky_Shader, CubicBezierCurve, CubicBezierPath, CubicBezierType, CycleInterpolator, CylinderGeometry, DDGIIrradianceComputePass, DDGIIrradianceGPUBufferReader, DDGIIrradianceVolume, DDGIIrradiance_shader, DDGILightingPass, DDGILighting_shader, DDGIMultiBouncePass, DDGIProbeRenderer, DEGREES_TO_RADIANS, DecelerateInterpolator, Denoising_cs, Depth2DTextureArray, DepthCubeArrayTexture, DepthMaterialPass, DepthOfFieldPost, DepthOfView_cs, DirectLight, DoubleArray, EditorInspector, Engine3D, Entity, EntityBatchCollect, EntityCollect, EnvMap_frag, ErpImage2CubeMap, ErpImage2CubeMapCreateCube_cs, ErpImage2CubeMapRgbe2rgba_cs, ExtrudeGeometry, FASTFLOOR, FXAAPost, FXAAShader, FastMathShader, FeatureTable, FileLoader, FirstPersonCameraController, Float16ArrayTexture, Float32ArrayTexture, FlyCameraController, FontChar, FontInfo, FontPage, FontParser, ForwardRenderJob, FragmentOutput, FragmentVarying, FrameCache, Frustum, FrustumCSM, FrustumCulling_cs, FullQuad_vert_wgsl, GBufferFrame, GBufferPass, GBufferPost, GBufferStand, GBuffer_pass, GILighting, GIProbeMaterial, GIProbeMaterialType, GIProbeShader, GIRenderCompleteEvent, GIRenderStartEvent, GLBChunk, GLBHeader, GLBParser, GLSLLexer, GLSLLexerToken, GLSLPreprocessor, GLSLSyntax, GLTFBinaryExtension, GLTFMaterial, GLTFParser, GLTFSubParser, GLTFSubParserCamera, GLTFSubParserConverter, GLTFSubParserMaterial, GLTFSubParserMesh, GLTFSubParserSkeleton, GLTFSubParserSkin, GLTFType, GLTF_Accessors, GLTF_Info, GLTF_Light, GLTF_Mesh, GLTF_Node, GLTF_Primitives, GLTF_Scene, GPUAddressMode, GPUBlendFactor, GPUBufferBase, GPUBufferType, GPUCompareFunction, GPUContext, GPUCullMode, GPUFilterMode, GPUPrimitiveTopology, GPUTextureFormat, GPUVertexFormat, GPUVertexStepMode, GSplatFormat, GSplatMaterial, GSplatRenderer, GSplat_FS, GSplat_VS, GTAOPost, GTAO_cs, GUIAtlasTexture, GUICanvas, GUIConfig, GUIGeometry, GUIGeometryRebuild, GUIMaterial, GUIPassRenderer, GUIPick, GUIPickHelper, GUIQuad, GUIQuadAttrEnum, GUIRenderer, GUIShader, GUISpace, GUISprite, GUITexture, GaussianSplatParser, GenerayRandomDir, GeoJsonParser, GeoJsonUtil, GeoType, GeometryBase, GeometryIndicesBuffer, GeometryUtil, GeometryVertexBuffer, GeometryVertexType, GetComponentClass, GetCountInstanceID, GetRepeat, GetShader, GlassShader, GlobalBindGroup, GlobalBindGroupLayout, GlobalFog, GlobalFog_shader, GlobalIlluminationComponent, GlobalUniform, GlobalUniformGroup, GodRayPost, GodRay_cs, GridObject, HDRTexture, HDRTextureCube, Hair_frag, Hair_shader_op, Hair_shader_tr, HaltonSeq, Horizontal, HoverCameraController, I3DMLoader, I3DMLoaderBase, I3DMParser, IBLEnvMapCreator, IBLEnvMapCreator_cs, IESProfiles, IESProfiles_frag, IKDTreeUserData, ImageType, IndicesGPUBuffer, Inline_vert, InputSystem, InstanceDrawComponent, InstanceUniform, InstancedMesh, Interpolator, InterpolatorEnum, IrradianceDataReaderCompleteEvent, IrradianceVolumeData_frag, Irradiance_frag, IsEditorInspector, IsNonSerialize, Joint, JointPose, JumperInterpolator, KDTreeEntity, KDTreeNode, KDTreeRange, KDTreeSpace, KDTreeUUID, KHR_draco_mesh_compression, KHR_lights_punctual, KHR_materials_clearcoat, KHR_materials_emissive_strength, KHR_materials_ior, KHR_materials_unlit, KMZParser, KV, KelvinUtil, KeyCode, KeyEvent, Keyframe, KeyframeT, LDRTextureCube, LambertMaterial, Lambert_shader, Light, LightBase, LightData, LightEntries, LightType, LightingFunction_frag, Line, LineClassification, LinearInterpolator, LitMaterial, LitSSSShader, LitShader, Lit_shader, LoaderBase, LoaderEvent, LoaderManager, MAX_VALUE, MIN_VALUE, Material, MaterialDataUniformGPUBuffer, MaterialUtilities, MathShader, MathUtil, Matrix3, Matrix4, MatrixBindGroup, MatrixGPUBuffer, MatrixShader, MemoryDO, MemoryInfo, MergeRGBACreator, MergeRGBA_cs, MeshColliderShape, MeshFilter, MeshRenderer, MinMaxAnimationCurves, MinMaxCurve, MinMaxCurveState, MinMaxPolyCurves, MorePassParser, MorePassShader, MorphTargetBlender, MorphTargetData, MorphTargetFrame, MorphTargetTransformKey, MorphTarget_shader, MouseCode, MultiBouncePass_cs, Navi3DAstar, Navi3DConst, Navi3DEdge, Navi3DFunnel, Navi3DMaskType, Navi3DMesh, Navi3DPoint, Navi3DPoint2D, Navi3DPointFat, Navi3DRouter, Navi3DTriangle, NonSerialize, NormalMap_frag, OAnimationEvent, OBJParser, Object3D, Object3DEvent, Object3DTransformTools, Object3DUtil, ObjectAnimClip, OcclusionSystem, Octree, OctreeEntity, OrbitController, OrderMap, Orientation3D, OutLineBlendColor_cs, OutlineCalcOutline_cs, OutlinePass, OutlinePost, OutlinePostData, OutlinePostManager, OutlinePostSlot, Outline_cs, OvershootInterpolator, PBRLItShader, PBRLitSSSShader, ParserBase, ParserFormat, ParticleSystemCurveEvalMode, ParticleSystemRandomnessIds, PassGenerate, PassShader, PassType, PhysicMaterialUniform_frag, PickCompute, PickFire, PickGUIEvent3D, PickResult, Picker_cs, PingPong, PipelinePool, Plane3D, PlaneClassification, PlaneGeometry, PointClassification, PointLight, PointLightShadowRenderer, PointShadowCubeCamera, PointerEvent3D, Polynomial, PolynomialCurve, Polynomials, PoolNode, PostBase, PostProcessingComponent, PostRenderer, PreDepthPassRenderer, PreFilteredEnvironment_cs, PreFilteredEnvironment_cs2, PreIntegratedLut, PreIntegratedLutCompute, PrefabAvatarData, PrefabAvatarParser, PrefabBoneData, PrefabMaterialParser, PrefabMeshData, PrefabMeshParser, PrefabNode, PrefabParser, PrefabStringUtil, PrefabTextureData, PrefabTextureParser, Preprocessor, Probe, ProbeEntries, ProbeGBufferFrame, ProfilerUtil, PropertyAnimClip, PropertyAnimTag, PropertyAnimation, PropertyAnimationClip, PropertyAnimationClipState, PropertyAnimationEvent, PropertyHelp, QuadAABB, QuadGlsl_fs, QuadGlsl_vs, QuadRoot, QuadShader, QuadTree, QuadTreeCell, Quad_depth2dArray_frag_wgsl, Quad_depth2d_frag_wgsl, Quad_depthCube_frag_wgsl, Quad_frag_wgsl, Quad_vert_wgsl, Quaternion, RADIANS_TO_DEGREES, RGBEErrorCode, RGBEHeader, RGBEParser, RTDescriptor, RTFrame, RTResourceConfig, RTResourceMap, Rand, RandomSeed, Ray, RayCastMeshDetail, Reader, Rect, Reference, Reflection, ReflectionCG, ReflectionEntries, ReflectionMaterial, ReflectionRenderer, ReflectionShader, ReflectionShader_shader, RegisterComponent, RegisterShader, RenderContext, RenderLayer, RenderLayerUtil, RenderNode, RenderShaderCollect, RenderShaderCompute, RenderShaderPass, RenderTexture, RendererBase, RendererJob, RendererMap, RendererMask, RendererMaskUtil, RendererPassState, RepeatSE, Res, RotationControlComponents, SHCommon_frag, SN_ArrayConstant, SN_BinaryOperation, SN_Break, SN_CodeBlock, SN_Constant, SN_Continue, SN_Declaration, SN_Discard, SN_DoWhileLoop, SN_Expression, SN_ForLoop, SN_Function, SN_FunctionArgs, SN_FunctionCall, SN_IFBranch, SN_Identifier, SN_IndexOperation, SN_Layout, SN_ParenExpression, SN_Precision, SN_Return, SN_SelectOperation, SN_Struct, SN_TernaryOperation, SN_UnaryOperation, SN_WhileLoop, SSAO_cs, SSGI2_cs, SSGIPost, SSRPost, SSR_BlendColor_cs, SSR_IS_Kernel, SSR_IS_cs, SSR_RayTrace_cs, ScaleControlComponents, Scene3D, Shader, ShaderAttributeInfo, ShaderConverter, ShaderConverterResult, ShaderLib, ShaderPassBase, ShaderReflection, ShaderStage, ShaderState, ShaderUniformInfo, ShaderUtil, ShadingInput, ShadowLightsCollect, ShadowMapPassRenderer, ShadowMapping_frag, Skeleton, SkeletonAnimationClip, SkeletonAnimationClipState, SkeletonAnimationComponent, SkeletonAnimationCompute, SkeletonAnimation_shader, SkeletonBlendComputeArgs, SkeletonPose, SkeletonTransformComputeArgs, SkinnedMeshRenderer, SkinnedMeshRenderer2, SkyGBufferPass, SkyGBuffer_pass, SkyMaterial, SkyRenderer, SkyShader, SolidColorSky, SphereColliderShape, SphereGeometry, SphereReflection, SpotLight, StandShader, StatementNode, StorageGPUBuffer, StringUtil, Struct, StructStorageGPUBuffer, SubGeometry, TAACopyTex_cs, TAAPost, TAASharpTex_cs, TAA_cs, TestComputeLoadBuffer, TextAnchor, TextFieldLayout, TextFieldLine, Texture, TextureCube, TextureCubeFaceData, TextureCubeStdCreator, TextureCubeUtils, TextureMipmapCompute, TextureMipmapGenerator, TextureScaleCompute, ThirdPersonCameraController, TileSet, TileSetChild, TileSetChildContent, TileSetChildContentMetaData, TileSetRoot, TilesRenderer, Time, TokenType, TorusGeometry, TouchData, TrailGeometry, Transform, TransformAxisEnum, TransformControllerBaseComponent, TransformMode, TransformSpaceMode, TranslationControlComponents, TranslatorContext, TriGeometry, Triangle, UIButton, UIButtonTransition, UIComponentBase, UIEvent, UIImage, UIImageGroup, UIInteractive, UIInteractiveStyle, UIPanel, UIRenderAble, UIShadow, UITextField, UITransform, UUID, UV, Uint32ArrayTexture, Uint8ArrayTexture, UnLit, UnLitMaterial, UnLitMaterialUniform_frag, UnLitShader, UnLitTexArrayMaterial, UnLitTexArrayShader, UnLitTextureArray, UnLit_frag, UniformGPUBuffer, UniformNode, UniformType, ValueEnumType, ValueOp, ValueParser, ValueSpread, Vector2, Vector3, Vector3Ex, Vector4, VertexAttribute, VertexAttributeIndexShader, VertexAttributeName, VertexAttributeSize, VertexAttributeStride, VertexAttributes_vert, VertexBufferLayout, VertexFormat, VertexGPUBuffer, Vertical, VideoUniform_frag, View3D, ViewPanel, ViewQuad, VirtualTexture, WGSLTranslator, WayLines3D, WayPoint3D, WebGPUDescriptorCreator, WorldMatrixUniform, WorldPanel, WrapMode, WrapTimeMode, ZCullingCompute, ZPassShader_cs, ZPassShader_fs, ZPassShader_vs, ZSorterUtil, append, arrayToString, blendComponent, buildCurves, byteSizeOfType, calculateCurveRangesValue, calculateMinMax, castPointShadowMap_vert, clamp, clampRepeat, computeAABBFromPositions, cos, crossProduct, cubicPolynomialRoot, cubicPolynomialRootsGeneric, curvesSupportProcedural, deg2Rad, detectGSplatFormat, directionShadowCastMap_frag, dot, doubleIntegrateSegment, downSample, fastInvSqrt, floorfToIntPos, fonts, generateRandom, generateRandom3, getFloatFromInt, getGLTypeFromTypedArray, getGLTypeFromTypedArrayType, getGlobalRandomSeed, getTypedArray, getTypedArrayTypeFromGLType, grad1, grad2, grad3, grad4, inferSHOrder, integrateSegment, irradianceDataReader, kPI, lerp, lerpByte, lerpColor, lerpVector3, magnitude, makeAloneSprite, makeGUISprite, makeMatrix44, matrixMultiply, matrixRotate, matrixRotateY, mergeFunctions, multiplyMatrices4x4REF, normal_distribution, normalizeFast, normalizeSafe, normalizedToByte, normalizedToWord, outlinePostData, outlinePostManager, parsePlyGaussianSplat, parsePlyHeader, perm, post, quadraticPolynomialRootsGeneric, rad2Deg, random01, randomBarycentricCoord, randomPointBetweenEllipsoid, randomPointBetweenSphere, randomPointInsideCube, randomPointInsideEllipsoid, randomPointInsideUnitCircle, randomPointInsideUnitSphere, randomQuaternion, randomQuaternionUniformDistribution, randomSeed, randomUnitVector, randomUnitVector2, rangedRandomFloat, rangedRandomInt, readByType, readMagicBytes, registerMaterial, repeat, rotMatrix, rotateVectorByQuat, roundfToIntPos, scale, shadowCastMap_frag, shadowCastMap_vert, simplex, sin, snoise1, snoise2, snoise3, snoise4, sqrMagnitude, sqrtImpl, stencilStateFace, swap, textureCompress, threshold, toHalfFloat, tw, uniform_real_distribution, uniform_real_distribution2, upSample$1 as upSample, webGPUContext, zSorterUtil };
|
|
66480
|
+
export { AccelerateDecelerateInterpolator, AccelerateInterpolator, AnimationCurve, AnimationCurveT, AnimationMonitor, AnimatorComponent, AnimatorEventKeyframe, AnticipateInterpolator, AnticipateOvershootInterpolator, ArrayHas, ArrayItemIndex, AtlasParser, AtmosphericComponent, AtmosphericScatteringSky, AtmosphericScatteringSkySetting, AtmosphericScatteringSky_shader, AttributeAnimCurve, AxisObject, B3DMLoader, B3DMLoaderBase, B3DMParseUtil, B3DMParser, BRDFLUT, BRDFLUTGenerate, BRDF_frag, BatchTable, BiMap, BillboardComponent, BillboardType, BitUtil, BitmapTexture2D, BitmapTexture2DArray, BitmapTextureCube, Blend, BlendFactor, BlendMode, BlendShapeData, BlendShapePropertyData, BloomPost, BlurEffectCreatorBlur_cs, BlurEffectCreatorSample_cs, BlurTexture2DBufferCreator, BounceInterpolator, BoundUtil, BoundingBox, BoundingSphere, BoxColliderShape, BoxGeometry, BrdfLut_frag, BsDF_frag, BxDF_frag, BxdfDebug_frag, BytesArray, CEvent, CEventDispatcher, CEventListener, CResizeEvent, CSM, Camera3D, CameraControllerBase, CameraType, CameraUtil, CapsuleColliderShape, CastPointShadowMaterialPass, CastShadowMaterialPass, Clearcoat_frag, ClusterBoundsSource_cs, ClusterConfig, ClusterDebug_frag, ClusterLight, ClusterLightingBuffer, ClusterLightingRender, ClusterLighting_cs, CollectInfo, ColliderComponent, ColliderShape, ColliderShapeType, Color, ColorGradient, ColorLitMaterial, ColorLitShader, ColorPassFragmentOutput, ColorPassRenderer, ColorUtil, ComData, Combine_cs, Common_frag, Common_vert, ComponentBase, ComponentCollect, ComputeGPUBuffer, ComputeShader, Context3D, CubeCamera, CubeMapFaceEnum, CubeSky_Shader, CubicBezierCurve, CubicBezierPath, CubicBezierType, CycleInterpolator, CylinderGeometry, DDGIIrradianceComputePass, DDGIIrradianceGPUBufferReader, DDGIIrradianceVolume, DDGIIrradiance_shader, DDGILightingPass, DDGILighting_shader, DDGIMultiBouncePass, DDGIProbeRenderer, DEGREES_TO_RADIANS, DecelerateInterpolator, Denoising_cs, Depth2DTextureArray, DepthCubeArrayTexture, DepthMaterialPass, DepthOfFieldPost, DepthOfView_cs, DirectLight, DoubleArray, EditorInspector, Engine3D, Entity, EntityBatchCollect, EntityCollect, EnvMap_frag, ErpImage2CubeMap, ErpImage2CubeMapCreateCube_cs, ErpImage2CubeMapRgbe2rgba_cs, ExtrudeGeometry, FASTFLOOR, FXAAPost, FXAAShader, FastMathShader, FatLineGeometry, FatLineMaterial, FatLineRenderer, FatLineShader, FatLine_FS, FatLine_VS, FeatureTable, FileLoader, FirstPersonCameraController, Float16ArrayTexture, Float32ArrayTexture, FlyCameraController, FontChar, FontInfo, FontPage, FontParser, ForwardRenderJob, FragmentOutput, FragmentVarying, FrameCache, Frustum, FrustumCSM, FrustumCulling_cs, FullQuad_vert_wgsl, GBufferFrame, GBufferPass, GBufferPost, GBufferStand, GBuffer_pass, GILighting, GIProbeMaterial, GIProbeMaterialType, GIProbeShader, GIRenderCompleteEvent, GIRenderStartEvent, GLBChunk, GLBHeader, GLBParser, GLSLLexer, GLSLLexerToken, GLSLPreprocessor, GLSLSyntax, GLTFBinaryExtension, GLTFMaterial, GLTFParser, GLTFSubParser, GLTFSubParserCamera, GLTFSubParserConverter, GLTFSubParserMaterial, GLTFSubParserMesh, GLTFSubParserSkeleton, GLTFSubParserSkin, GLTFType, GLTF_Accessors, GLTF_Info, GLTF_Light, GLTF_Mesh, GLTF_Node, GLTF_Primitives, GLTF_Scene, GPUAddressMode, GPUBlendFactor, GPUBufferBase, GPUBufferType, GPUCompareFunction, GPUContext, GPUCullMode, GPUFilterMode, GPUPrimitiveTopology, GPUTextureFormat, GPUVertexFormat, GPUVertexStepMode, GSplatFormat, GSplatGeometry, GSplatMaterial, GSplatRenderer, GSplatShader, GSplat_FS, GSplat_VS, GTAOPost, GTAO_cs, GUIAtlasTexture, GUICanvas, GUIConfig, GUIGeometry, GUIGeometryRebuild, GUIMaterial, GUIPassRenderer, GUIPick, GUIPickHelper, GUIQuad, GUIQuadAttrEnum, GUIRenderer, GUIShader, GUISpace, GUISprite, GUITexture, GaussianSplatParser, GenerayRandomDir, GeoJsonParser, GeoJsonUtil, GeoType, GeometryBase, GeometryIndicesBuffer, GeometryUtil, GeometryVertexBuffer, GeometryVertexType, GetComponentClass, GetCountInstanceID, GetRepeat, GetShader, GlassShader, GlobalBindGroup, GlobalBindGroupLayout, GlobalFog, GlobalFog_shader, GlobalIlluminationComponent, GlobalUniform, GlobalUniformGroup, GodRayPost, GodRay_cs, GridObject, HDRTexture, HDRTextureCube, Hair_frag, Hair_shader_op, Hair_shader_tr, HaltonSeq, Horizontal, HoverCameraController, I3DMLoader, I3DMLoaderBase, I3DMParser, IBLEnvMapCreator, IBLEnvMapCreator_cs, IESProfiles, IESProfiles_frag, IKDTreeUserData, ImageType, IndicesGPUBuffer, Inline_vert, InputSystem, InstanceDrawComponent, InstanceUniform, InstancedMesh, Interpolator, InterpolatorEnum, IrradianceDataReaderCompleteEvent, IrradianceVolumeData_frag, Irradiance_frag, IsEditorInspector, IsNonSerialize, Joint, JointPose, JumperInterpolator, KDTreeEntity, KDTreeNode, KDTreeRange, KDTreeSpace, KDTreeUUID, KHR_draco_mesh_compression, KHR_lights_punctual, KHR_materials_clearcoat, KHR_materials_emissive_strength, KHR_materials_ior, KHR_materials_unlit, KMZParser, KV, KelvinUtil, KeyCode, KeyEvent, Keyframe, KeyframeT, LDRTextureCube, LambertMaterial, Lambert_shader, Light, LightBase, LightData, LightEntries, LightType, LightingFunction_frag, Line, LineClassification, LinearInterpolator, LitMaterial, LitSSSShader, LitShader, Lit_shader, LoaderBase, LoaderEvent, LoaderManager, MAX_VALUE, MIN_VALUE, Material, MaterialDataUniformGPUBuffer, MaterialUtilities, MathShader, MathUtil, Matrix3, Matrix4, MatrixBindGroup, MatrixGPUBuffer, MatrixShader, MemoryDO, MemoryInfo, MergeRGBACreator, MergeRGBA_cs, MeshColliderShape, MeshFilter, MeshRenderer, MinMaxAnimationCurves, MinMaxCurve, MinMaxCurveState, MinMaxPolyCurves, MorePassParser, MorePassShader, MorphTargetBlender, MorphTargetData, MorphTargetFrame, MorphTargetTransformKey, MorphTarget_shader, MouseCode, MultiBouncePass_cs, Navi3DAstar, Navi3DConst, Navi3DEdge, Navi3DFunnel, Navi3DMaskType, Navi3DMesh, Navi3DPoint, Navi3DPoint2D, Navi3DPointFat, Navi3DRouter, Navi3DTriangle, NonSerialize, NormalMap_frag, OAnimationEvent, OBJParser, Object3D, Object3DEvent, Object3DTransformTools, Object3DUtil, ObjectAnimClip, OcclusionSystem, Octree, OctreeEntity, OrbitController, OrderMap, Orientation3D, OutLineBlendColor_cs, OutlineCalcOutline_cs, OutlinePass, OutlinePost, OutlinePostData, OutlinePostManager, OutlinePostSlot, Outline_cs, OvershootInterpolator, PBRLItShader, PBRLitSSSShader, ParserBase, ParserFormat, ParticleSystemCurveEvalMode, ParticleSystemRandomnessIds, PassGenerate, PassShader, PassType, PhysicMaterialUniform_frag, PickCompute, PickFire, PickGUIEvent3D, PickResult, Picker_cs, PingPong, PipelinePool, Plane3D, PlaneClassification, PlaneGeometry, PointClassification, PointLight, PointLightShadowRenderer, PointShadowCubeCamera, PointerEvent3D, Polynomial, PolynomialCurve, Polynomials, PoolNode, PostBase, PostProcessingComponent, PostRenderer, PreDepthPassRenderer, PreFilteredEnvironment_cs, PreFilteredEnvironment_cs2, PreIntegratedLut, PreIntegratedLutCompute, PrefabAvatarData, PrefabAvatarParser, PrefabBoneData, PrefabMaterialParser, PrefabMeshData, PrefabMeshParser, PrefabNode, PrefabParser, PrefabStringUtil, PrefabTextureData, PrefabTextureParser, Preprocessor, Probe, ProbeEntries, ProbeGBufferFrame, ProfilerUtil, PropertyAnimClip, PropertyAnimTag, PropertyAnimation, PropertyAnimationClip, PropertyAnimationClipState, PropertyAnimationEvent, PropertyHelp, QuadAABB, QuadGlsl_fs, QuadGlsl_vs, QuadRoot, QuadShader, QuadTree, QuadTreeCell, Quad_depth2dArray_frag_wgsl, Quad_depth2d_frag_wgsl, Quad_depthCube_frag_wgsl, Quad_frag_wgsl, Quad_vert_wgsl, Quaternion, R32UintTexture, RADIANS_TO_DEGREES, RGBEErrorCode, RGBEHeader, RGBEParser, RTDescriptor, RTFrame, RTResourceConfig, RTResourceMap, Rand, RandomSeed, Ray, RayCastMeshDetail, Reader, Rect, Reference, Reflection, ReflectionCG, ReflectionEntries, ReflectionMaterial, ReflectionRenderer, ReflectionShader, ReflectionShader_shader, RegisterComponent, RegisterShader, RenderContext, RenderLayer, RenderLayerUtil, RenderNode, RenderShaderCollect, RenderShaderCompute, RenderShaderPass, RenderTexture, RendererBase, RendererJob, RendererMap, RendererMask, RendererMaskUtil, RendererPassState, RepeatSE, Res, RotationControlComponents, SHCommon_frag, SN_ArrayConstant, SN_BinaryOperation, SN_Break, SN_CodeBlock, SN_Constant, SN_Continue, SN_Declaration, SN_Discard, SN_DoWhileLoop, SN_Expression, SN_ForLoop, SN_Function, SN_FunctionArgs, SN_FunctionCall, SN_IFBranch, SN_Identifier, SN_IndexOperation, SN_Layout, SN_ParenExpression, SN_Precision, SN_Return, SN_SelectOperation, SN_Struct, SN_TernaryOperation, SN_UnaryOperation, SN_WhileLoop, SSAO_cs, SSGI2_cs, SSGIPost, SSRPost, SSR_BlendColor_cs, SSR_IS_Kernel, SSR_IS_cs, SSR_RayTrace_cs, ScaleControlComponents, Scene3D, Shader, ShaderAttributeInfo, ShaderConverter, ShaderConverterResult, ShaderLib, ShaderPassBase, ShaderReflection, ShaderStage, ShaderState, ShaderUniformInfo, ShaderUtil, ShadingInput, ShadowLightsCollect, ShadowMapPassRenderer, ShadowMapping_frag, Skeleton, SkeletonAnimationClip, SkeletonAnimationClipState, SkeletonAnimationComponent, SkeletonAnimationCompute, SkeletonAnimation_shader, SkeletonBlendComputeArgs, SkeletonPose, SkeletonTransformComputeArgs, SkinnedMeshRenderer, SkinnedMeshRenderer2, SkyGBufferPass, SkyGBuffer_pass, SkyMaterial, SkyRenderer, SkyShader, SolidColorSky, SphereColliderShape, SphereGeometry, SphereReflection, SpotLight, StandShader, StatementNode, StorageGPUBuffer, StringUtil, Struct, StructStorageGPUBuffer, SubGeometry, TAACopyTex_cs, TAAPost, TAASharpTex_cs, TAA_cs, TestComputeLoadBuffer, TextAnchor, TextFieldLayout, TextFieldLine, Texture, TextureCube, TextureCubeFaceData, TextureCubeStdCreator, TextureCubeUtils, TextureMipmapCompute, TextureMipmapGenerator, TextureScaleCompute, ThirdPersonCameraController, TileSet, TileSetChild, TileSetChildContent, TileSetChildContentMetaData, TileSetRoot, TilesRenderer, Time, TokenType, TorusGeometry, TouchData, TrailGeometry, Transform, TransformAxisEnum, TransformControllerBaseComponent, TransformMode, TransformSpaceMode, TranslationControlComponents, TranslatorContext, TriGeometry, Triangle, UIButton, UIButtonTransition, UIComponentBase, UIEvent, UIImage, UIImageGroup, UIInteractive, UIInteractiveStyle, UIPanel, UIRenderAble, UIShadow, UITextField, UITransform, UUID, UV, Uint32ArrayTexture, Uint8ArrayTexture, UnLit, UnLitMaterial, UnLitMaterialUniform_frag, UnLitShader, UnLitTexArrayMaterial, UnLitTexArrayShader, UnLitTextureArray, UnLit_frag, UniformGPUBuffer, UniformNode, UniformType, ValueEnumType, ValueOp, ValueParser, ValueSpread, Vector2, Vector3, Vector3Ex, Vector4, VertexAttribute, VertexAttributeIndexShader, VertexAttributeName, VertexAttributeSize, VertexAttributeStride, VertexAttributes_vert, VertexBufferLayout, VertexFormat, VertexGPUBuffer, Vertical, VideoUniform_frag, View3D, ViewPanel, ViewQuad, VirtualTexture, WGSLTranslator, WayLines3D, WayPoint3D, WebGPUDescriptorCreator, WorldMatrixUniform, WorldPanel, WrapMode, WrapTimeMode, ZCullingCompute, ZPassShader_cs, ZPassShader_fs, ZPassShader_vs, ZSorterUtil, append, arrayToString, blendComponent, buildCurves, byteSizeOfType, calculateCurveRangesValue, calculateMinMax, castPointShadowMap_vert, clamp, clampRepeat, computeAABBFromPositions, cos, crossProduct, cubicPolynomialRoot, cubicPolynomialRootsGeneric, curvesSupportProcedural, deg2Rad, detectGSplatFormat, directionShadowCastMap_frag, dot, doubleIntegrateSegment, downSample, fastInvSqrt, floorfToIntPos, fonts, generateRandom, generateRandom3, getFloatFromInt, getGLTypeFromTypedArray, getGLTypeFromTypedArrayType, getGlobalRandomSeed, getTypedArray, getTypedArrayTypeFromGLType, grad1, grad2, grad3, grad4, inferSHOrder, integrateSegment, irradianceDataReader, kPI, lerp, lerpByte, lerpColor, lerpVector3, magnitude, makeAloneSprite, makeGUISprite, makeMatrix44, matrixMultiply, matrixRotate, matrixRotateY, mergeFunctions, multiplyMatrices4x4REF, normal_distribution, normalizeFast, normalizeSafe, normalizedToByte, normalizedToWord, outlinePostData, outlinePostManager, parsePlyGaussianSplat, parsePlyHeader, perm, post, quadraticPolynomialRootsGeneric, rad2Deg, random01, randomBarycentricCoord, randomPointBetweenEllipsoid, randomPointBetweenSphere, randomPointInsideCube, randomPointInsideEllipsoid, randomPointInsideUnitCircle, randomPointInsideUnitSphere, randomQuaternion, randomQuaternionUniformDistribution, randomSeed, randomUnitVector, randomUnitVector2, rangedRandomFloat, rangedRandomInt, readByType, readMagicBytes, registerMaterial, repeat, rotMatrix, rotateVectorByQuat, roundfToIntPos, scale, shadowCastMap_frag, shadowCastMap_vert, simplex, sin, snoise1, snoise2, snoise3, snoise4, sqrMagnitude, sqrtImpl, stencilStateFace, swap, textureCompress, threshold, toHalfFloat, tw, uniform_real_distribution, uniform_real_distribution2, upSample$1 as upSample, webGPUContext, zSorterUtil };
|