@woosh/meep-engine 2.48.19 → 2.48.21

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.
Files changed (117) hide show
  1. package/package.json +1 -1
  2. package/src/core/binary/type/BinaryDataType.d.ts +15 -0
  3. package/src/{engine/graphics/render/forward_plus/data/computeDataType.js → core/binary/type/computeBinaryDataTypeByPrecision.js} +3 -3
  4. package/src/core/geom/2d/quad-tree/qt_query_data_nearest_to_point.js +62 -0
  5. package/src/core/graph/layout/computeDisconnectedSubGraphs.js +1 -0
  6. package/src/core/process/task/TaskGroup.js +1 -1
  7. package/src/core/process/task/util/task_tree_compute_leaf_tasks.js +21 -0
  8. package/src/engine/graphics/geometry/AttributeSpec.d.ts +2 -2
  9. package/src/engine/graphics/material/optimization/MaterialOptimizationContext.js +1 -3
  10. package/src/engine/graphics/render/forward_plus/LightManager.js +9 -7
  11. package/src/engine/graphics/{micron/render/instanced → texture}/AttributeDataTexture.js +28 -19
  12. package/src/engine/graphics/{render/forward_plus/data → texture}/TextureBackedMemoryRegion.js +8 -8
  13. package/src/engine/graphics/{render/forward_plus/data → texture}/computeThreeTextureFormat.js +2 -2
  14. package/src/engine/graphics/{render/forward_plus/data → texture}/computeThreeTextureInternalFormatFromDataType.js +1 -1
  15. package/src/engine/graphics/{render/forward_plus/data → texture}/computeThreeTextureTypeFromDataType.js +1 -1
  16. package/src/engine/graphics/texture/sampler/Sampler2D2Canvas.js +1 -1
  17. package/src/engine/graphics/texture/sampler/sampler2DToFloat32Texture.js +1 -3
  18. package/src/generation/GridTaskGroup.js +4 -4
  19. package/src/generation/filtering/numeric/util/populateSampler2DFromCellFilter.js +10 -2
  20. package/src/generation/filtering/numeric/util/sampler_from_filter.js +26 -0
  21. package/src/generation/filtering/numeric/util/visualise_filters_as_grid.js +81 -0
  22. package/src/generation/grid/generation/GridTaskSequence.js +3 -1
  23. package/src/engine/graphics/micron/MICRON_GEOMETRY_FIELD.js +0 -1
  24. package/src/engine/graphics/micron/MICRON_URI_FIELD.js +0 -1
  25. package/src/engine/graphics/micron/build/MICRON_PATCH_SIZE_MAX.js +0 -5
  26. package/src/engine/graphics/micron/build/PatchRepresentation.js +0 -424
  27. package/src/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +0 -311
  28. package/src/engine/graphics/micron/build/build_geometry_info.js +0 -21
  29. package/src/engine/graphics/micron/build/clustering/assignInitialPatchNeighbours.js +0 -63
  30. package/src/engine/graphics/micron/build/clustering/assign_patch_neighbours_from_topology.js +0 -46
  31. package/src/engine/graphics/micron/build/clustering/build_clustering_2.js +0 -37
  32. package/src/engine/graphics/micron/build/clustering/build_leaf_patches.js +0 -326
  33. package/src/engine/graphics/micron/build/clustering/build_leaf_patches_metis.js +0 -76
  34. package/src/engine/graphics/micron/build/clustering/computeBorderLengthChange.js +0 -59
  35. package/src/engine/graphics/micron/build/clustering/computeFaceCurvatureScore.js +0 -57
  36. package/src/engine/graphics/micron/build/clustering/computeOpenFaceFreedom.js +0 -35
  37. package/src/engine/graphics/micron/build/clustering/compute_face_connection_weight.js +0 -35
  38. package/src/engine/graphics/micron/build/clustering/populateOpenFaceNeighboursForPatch.js +0 -56
  39. package/src/engine/graphics/micron/build/clustering/validate_leaf_patch_connectivity.js +0 -44
  40. package/src/engine/graphics/micron/build/compute_micron_buffer_array_constructor.js +0 -24
  41. package/src/engine/graphics/micron/build/compute_vertex_remap_cost.js +0 -29
  42. package/src/engine/graphics/micron/build/debug/build_clustering_info.js +0 -58
  43. package/src/engine/graphics/micron/build/debug/build_graph_info.js +0 -59
  44. package/src/engine/graphics/micron/build/fill_patch_geometry_data.js +0 -270
  45. package/src/engine/graphics/micron/build/hierarchy/buildAbstractPatchHierarchy.js +0 -196
  46. package/src/engine/graphics/micron/build/hierarchy/build_intermediate_patch_topology.js +0 -162
  47. package/src/engine/graphics/micron/build/hierarchy/build_merge_graph.js +0 -89
  48. package/src/engine/graphics/micron/build/hierarchy/computePatchMergeScore.js +0 -146
  49. package/src/engine/graphics/micron/build/hierarchy/compute_patches_shared_vertex_count.js +0 -32
  50. package/src/engine/graphics/micron/build/hierarchy/compute_patches_shared_vertices.js +0 -34
  51. package/src/engine/graphics/micron/build/hierarchy/merge_patches.js +0 -581
  52. package/src/engine/graphics/micron/build/hierarchy/metis_cluster_clusters.js +0 -53
  53. package/src/engine/graphics/micron/build/hierarchy/optimize_graph_partitioning_balance.js +0 -515
  54. package/src/engine/graphics/micron/build/hierarchy/patch_combine.js +0 -180
  55. package/src/engine/graphics/micron/build/hierarchy/patch_fill_holes_by_uncollapse.js +0 -60
  56. package/src/engine/graphics/micron/build/hierarchy/patch_stitch_parent_border.js +0 -320
  57. package/src/engine/graphics/micron/build/hierarchy/qvdr_build_simplified_clusters.js +0 -547
  58. package/src/engine/graphics/micron/build/hierarchy/qvdr_build_tree.js +0 -140
  59. package/src/engine/graphics/micron/buildPatchwork.js +0 -68
  60. package/src/engine/graphics/micron/convert_three_object_to_micron.js +0 -179
  61. package/src/engine/graphics/micron/debug/VirtualGeometryStats.js +0 -42
  62. package/src/engine/graphics/micron/format/MICRON_GEOMETRY_PROPERTY_NAME.js +0 -1
  63. package/src/engine/graphics/micron/format/MicronGeometry.d.ts +0 -21
  64. package/src/engine/graphics/micron/format/MicronGeometry.js +0 -334
  65. package/src/engine/graphics/micron/format/MicronGeometryPatch.d.ts +0 -3
  66. package/src/engine/graphics/micron/format/MicronGeometryPatch.js +0 -205
  67. package/src/engine/graphics/micron/format/MicronGeometryPatchOccurance.js +0 -50
  68. package/src/engine/graphics/micron/format/ThreeMicronMesh.d.ts +0 -10
  69. package/src/engine/graphics/micron/format/ThreeMicronMesh.js +0 -45
  70. package/src/engine/graphics/micron/format/VirtualGeometry.js +0 -158
  71. package/src/engine/graphics/micron/format/micron_build_proxy_geometry.js +0 -205
  72. package/src/engine/graphics/micron/format/serialization/MicronGeometryBinarySerializationAdapter.js +0 -123
  73. package/src/engine/graphics/micron/format/serialization/MicronGeometryBinarySerializationAdapter.spec.js +0 -63
  74. package/src/engine/graphics/micron/format/serialization/collection/geometry_collection_serialization.js +0 -83
  75. package/src/engine/graphics/micron/format/serialization/collection/geometry_collection_serialization.spec.js +0 -51
  76. package/src/engine/graphics/micron/format/serialization/deserialize_attribute_spec.js +0 -25
  77. package/src/engine/graphics/micron/format/serialization/deserialize_patch.js +0 -106
  78. package/src/engine/graphics/micron/format/serialization/serialize_attribute_spec.js +0 -18
  79. package/src/engine/graphics/micron/format/serialization/serialize_patch.js +0 -84
  80. package/src/engine/graphics/micron/format/validate_patch_bounds.js +0 -69
  81. package/src/engine/graphics/micron/plugin/GLTFAssetTransformer.js +0 -265
  82. package/src/engine/graphics/micron/plugin/GLTF_MICRON_ID_FIELD.js +0 -5
  83. package/src/engine/graphics/micron/plugin/MicronRenderPlugin.d.ts +0 -8
  84. package/src/engine/graphics/micron/plugin/MicronRenderPlugin.js +0 -150
  85. package/src/engine/graphics/micron/plugin/serialization/BufferGeometrySerializationAdapter.js +0 -176
  86. package/src/engine/graphics/micron/plugin/shaded_geometry/MicronShadedGeometryRenderAdapter.js +0 -216
  87. package/src/engine/graphics/micron/prototypeMicronProxyBuild.js +0 -227
  88. package/src/engine/graphics/micron/prototypeVirtualGeometry.js +0 -911
  89. package/src/engine/graphics/micron/render/PatchCacheKey.js +0 -79
  90. package/src/engine/graphics/micron/render/VIRTUAL_MESH_FLAG.d.ts +0 -1
  91. package/src/engine/graphics/micron/render/VIRTUAL_MESH_FLAG.js +0 -1
  92. package/src/engine/graphics/micron/render/VirtualGeometryBuilder.js +0 -207
  93. package/src/engine/graphics/micron/render/approximateTriangleArea.js +0 -25
  94. package/src/engine/graphics/micron/render/culling/PatchCullingSystem.js +0 -129
  95. package/src/engine/graphics/micron/render/instanced/PatchDataTextures.js +0 -325
  96. package/src/engine/graphics/micron/render/instanced/ThreeInstancedAdapter.js +0 -175
  97. package/src/engine/graphics/micron/render/instanced/shader/constants.js +0 -3
  98. package/src/engine/graphics/micron/render/instanced/shader/gen_micron_vertex_attribute_texture_name.js +0 -8
  99. package/src/engine/graphics/micron/render/instanced/shader/shader_rewrite_standard.js +0 -250
  100. package/src/engine/graphics/micron/render/makeThreeMeshFromVirtualGeometry.js +0 -37
  101. package/src/engine/graphics/micron/render/refinement/ActivePatchFlags.js +0 -8
  102. package/src/engine/graphics/micron/render/refinement/ActivePatchList.js +0 -241
  103. package/src/engine/graphics/micron/render/refinement/ActivePatchRecord.js +0 -154
  104. package/src/engine/graphics/micron/render/refinement/RefinementSpec.js +0 -84
  105. package/src/engine/graphics/micron/render/refinement/get_geometry_patch_cut.js +0 -133
  106. package/src/engine/graphics/micron/render/refinement/is_patch_facing_back.js +0 -43
  107. package/src/engine/graphics/micron/render/refinement/is_patch_visible.js +0 -37
  108. package/src/engine/graphics/micron/render/v1/MaterialContext.js +0 -150
  109. package/src/engine/graphics/micron/render/v1/MaterialVertexSpec.js +0 -115
  110. package/src/engine/graphics/micron/render/v1/MicronRenderContext.js +0 -145
  111. package/src/engine/graphics/micron/render/v1/ThreeVirtualGeometryAdapter.js +0 -255
  112. package/src/engine/graphics/micron/render/v1/VGThreeRenderer.js +0 -142
  113. package/src/engine/graphics/micron/render/v1/getTransformedPositionsCached.js +0 -54
  114. package/src/engine/graphics/micron/simplifyGeometry.js +0 -26
  115. package/src/engine/graphics/micron/util/patchToBufferGeometry.js +0 -19
  116. /package/src/{engine/graphics/render/forward_plus/data → core/math}/NumericType.js +0 -0
  117. /package/src/engine/graphics/{render/forward_plus/data → texture}/channelCountToThreIntegerTextureType.js +0 -0
@@ -1,265 +0,0 @@
1
- import { AssetTransformer } from "../../../asset/AssetTransformer.js";
2
- import { BinaryBuffer } from "../../../../core/binary/BinaryBuffer.js";
3
- import { MicronGeometry } from "../format/MicronGeometry.js";
4
- import { MICRON_GEOMETRY_FIELD } from "../MICRON_GEOMETRY_FIELD.js";
5
- import { async_traverse_three_object } from "../../../asset/loaders/async_traverse_three_object.js";
6
- import { convert_three_object_to_micron } from "../convert_three_object_to_micron.js";
7
- import { compute_geometry_polycount } from "../../geometry/compute_geometry_polycount.js";
8
- import { traverseThreeObject } from "../../ecs/highlight/renderer/traverseThreeObject.js";
9
- import { max2 } from "../../../../core/math/max2.js";
10
- import {
11
- deserialize_geometry_collection
12
- } from "../format/serialization/collection/geometry_collection_serialization.js";
13
- import { GLTF_MICRON_ID_FIELD } from "./GLTF_MICRON_ID_FIELD.js";
14
- import { computePathDirectory } from "../../../../core/path/computePathDirectory.js";
15
-
16
- export const ASSET_TYPE_ARRAY_BUFFER = "arraybuffer";
17
-
18
- const DEFAULT_THRESHOLD_POLYCOUNT = 1024;
19
-
20
- /**
21
- *
22
- * @param {THREE.Object3D} object
23
- * @return {number}
24
- */
25
- function max_polycount(object) {
26
- let r = 0;
27
-
28
- traverseThreeObject(object, (m) => {
29
- if (m.isMesh) {
30
- const geo = m.geometry;
31
- if (geo !== null) {
32
- r = max2(r, compute_geometry_polycount(geo))
33
- }
34
- }
35
- });
36
-
37
- return r;
38
- }
39
-
40
- /**
41
- *
42
- * @param {THREE.Object3D} object
43
- */
44
- function ensureProxy(object) {
45
- if (object.isMicronMesh) {
46
-
47
- /**
48
- * @type {MicronGeometry}
49
- */
50
- const micron_geo = object.geometry;
51
-
52
- if (micron_geo.proxy === null) {
53
- // proxy geometry doesn't exist, build one
54
- micron_geo.buildProxy();
55
- }
56
- }
57
- }
58
-
59
- class TransformContext {
60
- /**
61
- *
62
- * @param {AssetManager} assetManager
63
- * @param {AbstractAsyncMap<THREE.BufferGeometry, MicronGeometry>} cache
64
- */
65
- constructor(assetManager, cache) {
66
- /**
67
- *
68
- * @type {AbstractAsyncMap<THREE.BufferGeometry, MicronGeometry>|undefined}
69
- * @private
70
- */
71
- this.__cache = cache;
72
-
73
- /**
74
- *
75
- * @type {MicronGeometry[]}
76
- * @private
77
- */
78
- this.__active_mesh_micron_cache = [];
79
-
80
- this.__am = assetManager;
81
- }
82
-
83
- /**
84
- *
85
- * @param {{userData:{}}} gltf
86
- * @param {AssetDescription} ad
87
- */
88
- async load_mesh_micron_data(gltf, ad) {
89
- // clear active cache
90
- this.__active_mesh_micron_cache = [];
91
-
92
- const micron_metadata = gltf.userData.micron;
93
-
94
- if (micron_metadata === undefined) {
95
- return;
96
- }
97
-
98
- const uri = micron_metadata.geometry_data_uri;
99
- if (uri === undefined) {
100
- return;
101
- }
102
-
103
- const base = computePathDirectory(ad.path);
104
-
105
- let micron_data;
106
-
107
- const micron_path = `${base}/${uri}`;
108
-
109
- try {
110
- micron_data = await this.__am.promise(micron_path, ASSET_TYPE_ARRAY_BUFFER, { skip_queue: true });
111
- } catch (e) {
112
- console.error(`Failed to load micron geometry '${micron_path}' referenced in GLTF (will skip): ${e}`);
113
- return;
114
- }
115
-
116
- // deserialize micron data
117
- const buffer = BinaryBuffer.fromArrayBuffer(micron_data.create());
118
-
119
- deserialize_geometry_collection(this.__active_mesh_micron_cache, buffer);
120
- }
121
-
122
- /**
123
- * @param {THREE.Object3D} object
124
- * @param {{asset:AssetDescription}} ctx
125
- * @return {Promise<void>}
126
- */
127
- async visitObjectToLoadMicron(object, ctx) {
128
- if (!object.isMesh) {
129
- return;
130
- }
131
-
132
- /**
133
- * @type {THREE.BufferGeometry}
134
- */
135
- const geometry = object.geometry;
136
-
137
- const micron_geometry_index = geometry.userData[GLTF_MICRON_ID_FIELD];
138
-
139
- if (typeof micron_geometry_index !== "number") {
140
- return;
141
- }
142
-
143
- const micron_geometry = this.__active_mesh_micron_cache[micron_geometry_index];
144
-
145
- if (micron_geometry === undefined) {
146
- console.error(`Micron geometry '${micron_geometry_index}' not found`);
147
- return;
148
- }
149
-
150
- // set proxy for raycasting
151
- micron_geometry.proxy = geometry;
152
-
153
- geometry[MICRON_GEOMETRY_FIELD] = micron_geometry;
154
-
155
- // push data into cache
156
- if (this.__cache !== undefined) {
157
- this.__cache.set(geometry, micron_geometry);
158
- }
159
- }
160
-
161
- }
162
-
163
- export class GLTFAssetTransformer extends AssetTransformer {
164
- /**
165
- *
166
- * @param {AbstractAsyncMap<THREE.BufferGeometry, MicronGeometry>} [cache]
167
- */
168
- constructor(cache) {
169
- super();
170
-
171
- /**
172
- *
173
- * @type {AbstractAsyncMap<THREE.BufferGeometry, MicronGeometry>|undefined}
174
- * @private
175
- */
176
- this.__cache = cache;
177
-
178
- /**
179
- *
180
- * @type {AssetManager|null}
181
- * @private
182
- */
183
- this.__am = null;
184
-
185
- /**
186
- * Minimum number of polygons required for micron to be used
187
- * @type {number}
188
- * @private
189
- */
190
- this.__threshold_polycount = DEFAULT_THRESHOLD_POLYCOUNT;
191
-
192
- /**
193
- *
194
- * @type {MicronGeometry[]}
195
- * @private
196
- */
197
- this.__active_mesh_micron_cache = [];
198
-
199
- /**
200
- * @deprecated
201
- * Whether override mesh will be created for the asset, this is generally outdated
202
- * @type {boolean}
203
- * @private
204
- */
205
- this.__settings_build_override_mesh = false;
206
- }
207
-
208
- /**
209
- *
210
- * @param {AssetManager|null} am
211
- */
212
- set assetManager(am) {
213
- this.__am = am;
214
- }
215
-
216
-
217
- /**
218
- *
219
- * @param {Asset} source
220
- * @param {AssetDescription} asset_description
221
- * @return {Promise<Asset>}
222
- */
223
- async transform(source, asset_description) {
224
- const animationClips = source.animations;
225
-
226
- if (animationClips !== undefined && animationClips.length > 0) {
227
- // animations might cause trouble
228
- console.warn(`model '${asset_description.path}' contains animations, these animations might not works as intended with micron.`);
229
- }
230
-
231
- /**
232
- * @type {THREE.Object3D}
233
- */
234
- const root = source.create();
235
-
236
- const context = new TransformContext(this.__am, this.__cache);
237
-
238
- await context.load_mesh_micron_data(source.gltf, asset_description);
239
-
240
- // attempt to load existing micron geometries
241
- await async_traverse_three_object(root, context.visitObjectToLoadMicron, context, {
242
- asset: asset_description
243
- });
244
-
245
- const gltf_max_polycount = max_polycount(root);
246
-
247
- if (gltf_max_polycount < this.__threshold_polycount) {
248
- // no change, geometries are too small
249
- return source;
250
- }
251
-
252
- if (this.__settings_build_override_mesh) {
253
- console.warn(`Deprecated OVERRIDE_MESH setting is ON, generating override mesh for asset: ${asset_description}`);
254
-
255
- const micron_root = await convert_three_object_to_micron(root.clone(), this.__cache);
256
- micron_root.boundingSphere = root.boundingSphere;
257
-
258
- source.override_mesh = micron_root;
259
-
260
- traverseThreeObject(micron_root, ensureProxy);
261
- }
262
-
263
- return source;
264
- }
265
- }
@@ -1,5 +0,0 @@
1
- /**
2
- *
3
- * @type {string}
4
- */
5
- export const GLTF_MICRON_ID_FIELD = '@micron_geometry_index';
@@ -1,8 +0,0 @@
1
- import {EnginePlugin} from "../../../plugin/EnginePlugin";
2
- import {Camera, Object3D, WebGLRenderer} from "three";
3
-
4
- export class MicronRenderPlugin extends EnginePlugin {
5
-
6
- render(renderer: WebGLRenderer, camera: Camera, elements: Object3D[]): void
7
-
8
- }
@@ -1,150 +0,0 @@
1
- import { EnginePlugin } from "../../../plugin/EnginePlugin.js";
2
- import { VGThreeRenderer } from "../render/v1/VGThreeRenderer.js";
3
- import { RenderLayer } from "../../render/layers/RenderLayer.js";
4
- import { RenderPassType } from "../../render/RenderPassType.js";
5
- import { ArrayBufferLoader } from "../../../asset/loaders/ArrayBufferLoader.js";
6
- import { ASSET_TYPE_ARRAY_BUFFER, GLTFAssetTransformer } from "./GLTFAssetTransformer.js";
7
- import { ShadedGeometrySystem } from "../../ecs/mesh-v2/ShadedGeometrySystem.js";
8
- import { MicronShadedGeometryRenderAdapter } from "./shaded_geometry/MicronShadedGeometryRenderAdapter.js";
9
-
10
- /**
11
- *
12
- * @type {string}
13
- */
14
- const STORAGE_KEY = '@plugin/virtual-geometry-micron/geometry-cache';
15
-
16
- export class MicronRenderPlugin extends EnginePlugin {
17
- constructor() {
18
- super();
19
-
20
- this.id = "micron-renderer";
21
-
22
- this.__vgtr = new VGThreeRenderer();
23
-
24
- const layer = new RenderLayer();
25
- layer.name = 'micron';
26
- layer.managed = true;
27
- layer.renderPass = RenderPassType.Opaque;
28
-
29
- this.__vgtr.on.contextAdded.add(ctx => {
30
- const visibleSet = layer.visibleSet;
31
-
32
- const mesh = ctx.mesh;
33
-
34
- visibleSet.elements.push(mesh);
35
- visibleSet.size++;
36
-
37
- });
38
-
39
-
40
- /**
41
- *
42
- * @type {GLTFAssetTransformer}
43
- * @private
44
- */
45
- this.__asset_transformer = new GLTFAssetTransformer();
46
-
47
- /**
48
- *
49
- * @type {ShadedGeometrySystem|null}
50
- * @private
51
- */
52
- this.__sg_system = null;
53
- }
54
-
55
- /**
56
- *
57
- * @param {System} system
58
- * @private
59
- */
60
- __handle_system_added(system) {
61
- if (this.__sg_system !== null) {
62
- return;
63
- }
64
-
65
- if (!(system instanceof ShadedGeometrySystem)) {
66
- return;
67
- }
68
-
69
- /**
70
- *
71
- * @type {ShadedGeometrySystem|null}
72
- */
73
- const sg_system = system;
74
-
75
- sg_system.register_render_adapter(2, () => {
76
- const adapter = new MicronShadedGeometryRenderAdapter(this.__cache);
77
-
78
- adapter.ctx = this.__vgtr.ctx;
79
-
80
- return adapter;
81
- });
82
-
83
- this.__sg_system = sg_system;
84
- }
85
-
86
- /**
87
- *
88
- * @param {System} system
89
- * @private
90
- */
91
- __handle_system_removed(system) {
92
- if (this.__sg_system === null) {
93
- return;
94
- }
95
-
96
- if (!(system instanceof ShadedGeometrySystem)) {
97
- return;
98
- }
99
-
100
- if (this.__sg_system !== system) {
101
- return;
102
- }
103
-
104
- this.__sg_system.unregister_render_adapter(2);
105
- }
106
-
107
- async startup() {
108
-
109
- const engine = this.engine;
110
-
111
- const am = engine.assetManager;
112
-
113
- // ensure that "arraybuffer" asset loader is present
114
- if (am.getLoaderByType(ASSET_TYPE_ARRAY_BUFFER) === undefined) {
115
- am.registerLoader(ASSET_TYPE_ARRAY_BUFFER, new ArrayBufferLoader({
116
- fetch_priority: "low" // hint to fetch data in background
117
- }));
118
- }
119
-
120
- this.__asset_transformer.assetManager = am;
121
-
122
- am.registerTransformer("model/gltf", this.__asset_transformer);
123
- am.registerTransformer("model/gltf+json", this.__asset_transformer);
124
-
125
- engine.entityManager.on.systemAdded.add(this.__handle_system_added, this);
126
- engine.entityManager.on.systemRemoved.add(this.__handle_system_removed, this);
127
-
128
- engine.entityManager.systems.forEach(this.__handle_system_added, this);
129
-
130
- await super.startup();
131
- }
132
-
133
- async shutdown() {
134
- const engine = this.engine;
135
-
136
- const am = engine.assetManager;
137
-
138
- am.unregisterTransformer("model/gltf", this.__asset_transformer);
139
- am.unregisterTransformer("model/gltf+json", this.__asset_transformer);
140
-
141
- this.__asset_transformer.assetManager = null;
142
-
143
- engine.entityManager.on.systemAdded.remove(this.__handle_system_added, this);
144
- engine.entityManager.on.systemRemoved.remove(this.__handle_system_removed, this);
145
-
146
- engine.entityManager.systems.forEach(this.__handle_system_removed, this);
147
-
148
- await super.shutdown();
149
- }
150
- }
@@ -1,176 +0,0 @@
1
- import { BinaryClassSerializationAdapter } from "../../../../ecs/storage/binary/BinaryClassSerializationAdapter.js";
2
- import { BufferAttribute, BufferGeometry } from "three";
3
-
4
- function typed_array_to_enum(array) {
5
- if (array instanceof Uint8Array) {
6
- return 0;
7
- } else if (array instanceof Uint16Array) {
8
- return 1;
9
- } else if (array instanceof Uint32Array) {
10
- return 2;
11
- } else if (array instanceof Uint8Array) {
12
- return 3;
13
- } else if (array instanceof Uint16Array) {
14
- return 4;
15
- } else if (array instanceof Uint32Array) {
16
- return 5;
17
- } else if (array instanceof Float32Array) {
18
- return 6;
19
- } else if (array instanceof Float64Array) {
20
- return 7;
21
- } else {
22
- throw new Error('Unsupported array type');
23
- }
24
- }
25
-
26
- function marker_to_typed_array_constructor(marker) {
27
- switch (marker) {
28
- case 0:
29
- return Uint8Array;
30
- case 1:
31
- return Uint16Array;
32
- case 2:
33
- return Uint32Array;
34
- case 3:
35
- return Int8Array;
36
- case 4:
37
- return Int16Array;
38
- case 5:
39
- return Int32Array;
40
- case 6:
41
- return Float32Array;
42
- case 7:
43
- return Float64Array;
44
- default:
45
- throw new Error('Unsupported marker');
46
- }
47
- }
48
-
49
- /**
50
- *
51
- * @param {BinaryBuffer} buffer
52
- * @param {Uint8Array|Float32Array|ArrayLike<number>} value
53
- */
54
- function write_typed_array(buffer, value) {
55
-
56
- buffer.writeUint8(typed_array_to_enum(value));
57
- buffer.writeUintVar(value.byteLength);
58
-
59
- const data = new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
60
- buffer.writeBytes(data, 0, value.byteLength);
61
- }
62
-
63
- function read_typed_array(buffer) {
64
- const type_marker = buffer.readUint8();
65
- const byte_length = buffer.readUintVar();
66
-
67
- const array = new Uint8Array(byte_length);
68
-
69
- buffer.readBytes(array, 0, byte_length);
70
-
71
- // re-interpret bytes
72
- const TypedArray = marker_to_typed_array_constructor(type_marker);
73
-
74
- return new TypedArray(array.buffer, 0);
75
- }
76
-
77
- /**
78
- *
79
- * @param {BinaryBuffer} buffer
80
- * @param {BufferAttribute} value
81
- */
82
- function write_attribute(buffer, value) {
83
- buffer.writeUTF8String(value.name);
84
- buffer.writeUintVar(value.itemSize);
85
- buffer.writeUint8(value.normalized ? 1 : 0);
86
- buffer.writeUint32(value.usage);
87
-
88
- write_typed_array(buffer, value.array);
89
- }
90
-
91
- /**
92
- *
93
- * @param {BinaryBuffer} buffer
94
- * @returns {BufferAttribute}
95
- */
96
- function read_attribute(buffer) {
97
- const name = buffer.readUTF8String();
98
- const itemSize = buffer.readUintVar();
99
- const normalized = buffer.readUint8() !== 0;
100
- const usage = buffer.readUint32();
101
-
102
- const array = read_typed_array(buffer);
103
-
104
- const attribute = new BufferAttribute(array, itemSize, normalized);
105
-
106
- attribute.usage = usage;
107
- attribute.name = name;
108
-
109
- return attribute;
110
- }
111
-
112
- export class BufferGeometrySerializationAdapter extends BinaryClassSerializationAdapter {
113
- constructor() {
114
- super();
115
-
116
- this.klass = BufferGeometry;
117
- }
118
-
119
- /**
120
- *
121
- * @param {BinaryBuffer} buffer
122
- * @param {BufferGeometry} value
123
- */
124
- serialize(buffer, value) {
125
- // write index if one exists
126
- const index = value.getIndex();
127
- if (index === null) {
128
- buffer.writeUint8(0);
129
- } else {
130
- buffer.writeUint8(1);
131
-
132
- write_attribute(buffer, index);
133
- }
134
-
135
- const attributes = value.attributes;
136
- const attribute_keys = Object.keys(attributes);
137
-
138
- const attribute_count = attribute_keys.length;
139
- buffer.writeUintVar(attribute_count);
140
-
141
- for (let i = 0; i < attribute_count; i++) {
142
- const attribute_key = attribute_keys[i];
143
-
144
- buffer.writeUTF8String(attribute_key);
145
-
146
- const attribute = attributes[attribute_key];
147
-
148
- write_attribute(buffer, attribute);
149
- }
150
- }
151
-
152
- /**
153
- *
154
- * @param {BinaryBuffer} buffer
155
- * @param {BufferGeometry} value
156
- */
157
- deserialize(buffer, value) {
158
- const index_flag = buffer.readUint8();
159
-
160
- if (index_flag !== 0) {
161
- value.setIndex(read_attribute(buffer));
162
- } else {
163
- value.setIndex(null);
164
- }
165
-
166
- const attribute_count = buffer.readUintVar();
167
-
168
- for (let i = 0; i < attribute_count; i++) {
169
- const attribute_key = buffer.readUTF8String();
170
-
171
- const attribute = read_attribute(buffer);
172
-
173
- value.setAttribute(attribute_key, attribute);
174
- }
175
- }
176
- }