@woosh/meep-engine 2.48.20 → 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 (94) hide show
  1. package/package.json +1 -1
  2. package/src/engine/graphics/micron/MICRON_GEOMETRY_FIELD.js +0 -1
  3. package/src/engine/graphics/micron/MICRON_URI_FIELD.js +0 -1
  4. package/src/engine/graphics/micron/build/MICRON_PATCH_SIZE_MAX.js +0 -5
  5. package/src/engine/graphics/micron/build/PatchRepresentation.js +0 -424
  6. package/src/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +0 -311
  7. package/src/engine/graphics/micron/build/build_geometry_info.js +0 -21
  8. package/src/engine/graphics/micron/build/clustering/assignInitialPatchNeighbours.js +0 -63
  9. package/src/engine/graphics/micron/build/clustering/assign_patch_neighbours_from_topology.js +0 -46
  10. package/src/engine/graphics/micron/build/clustering/build_clustering_2.js +0 -37
  11. package/src/engine/graphics/micron/build/clustering/build_leaf_patches.js +0 -326
  12. package/src/engine/graphics/micron/build/clustering/build_leaf_patches_metis.js +0 -76
  13. package/src/engine/graphics/micron/build/clustering/computeBorderLengthChange.js +0 -59
  14. package/src/engine/graphics/micron/build/clustering/computeFaceCurvatureScore.js +0 -57
  15. package/src/engine/graphics/micron/build/clustering/computeOpenFaceFreedom.js +0 -35
  16. package/src/engine/graphics/micron/build/clustering/compute_face_connection_weight.js +0 -35
  17. package/src/engine/graphics/micron/build/clustering/populateOpenFaceNeighboursForPatch.js +0 -56
  18. package/src/engine/graphics/micron/build/clustering/validate_leaf_patch_connectivity.js +0 -44
  19. package/src/engine/graphics/micron/build/compute_micron_buffer_array_constructor.js +0 -24
  20. package/src/engine/graphics/micron/build/compute_vertex_remap_cost.js +0 -29
  21. package/src/engine/graphics/micron/build/debug/build_clustering_info.js +0 -58
  22. package/src/engine/graphics/micron/build/debug/build_graph_info.js +0 -59
  23. package/src/engine/graphics/micron/build/fill_patch_geometry_data.js +0 -270
  24. package/src/engine/graphics/micron/build/hierarchy/buildAbstractPatchHierarchy.js +0 -196
  25. package/src/engine/graphics/micron/build/hierarchy/build_intermediate_patch_topology.js +0 -162
  26. package/src/engine/graphics/micron/build/hierarchy/build_merge_graph.js +0 -89
  27. package/src/engine/graphics/micron/build/hierarchy/computePatchMergeScore.js +0 -146
  28. package/src/engine/graphics/micron/build/hierarchy/compute_patches_shared_vertex_count.js +0 -32
  29. package/src/engine/graphics/micron/build/hierarchy/compute_patches_shared_vertices.js +0 -34
  30. package/src/engine/graphics/micron/build/hierarchy/merge_patches.js +0 -581
  31. package/src/engine/graphics/micron/build/hierarchy/metis_cluster_clusters.js +0 -53
  32. package/src/engine/graphics/micron/build/hierarchy/optimize_graph_partitioning_balance.js +0 -515
  33. package/src/engine/graphics/micron/build/hierarchy/patch_combine.js +0 -180
  34. package/src/engine/graphics/micron/build/hierarchy/patch_fill_holes_by_uncollapse.js +0 -60
  35. package/src/engine/graphics/micron/build/hierarchy/patch_stitch_parent_border.js +0 -320
  36. package/src/engine/graphics/micron/build/hierarchy/qvdr_build_simplified_clusters.js +0 -547
  37. package/src/engine/graphics/micron/build/hierarchy/qvdr_build_tree.js +0 -140
  38. package/src/engine/graphics/micron/buildPatchwork.js +0 -68
  39. package/src/engine/graphics/micron/convert_three_object_to_micron.js +0 -179
  40. package/src/engine/graphics/micron/debug/VirtualGeometryStats.js +0 -42
  41. package/src/engine/graphics/micron/format/MICRON_GEOMETRY_PROPERTY_NAME.js +0 -1
  42. package/src/engine/graphics/micron/format/MicronGeometry.d.ts +0 -21
  43. package/src/engine/graphics/micron/format/MicronGeometry.js +0 -334
  44. package/src/engine/graphics/micron/format/MicronGeometryPatch.d.ts +0 -3
  45. package/src/engine/graphics/micron/format/MicronGeometryPatch.js +0 -205
  46. package/src/engine/graphics/micron/format/MicronGeometryPatchOccurance.js +0 -50
  47. package/src/engine/graphics/micron/format/ThreeMicronMesh.d.ts +0 -10
  48. package/src/engine/graphics/micron/format/ThreeMicronMesh.js +0 -45
  49. package/src/engine/graphics/micron/format/VirtualGeometry.js +0 -158
  50. package/src/engine/graphics/micron/format/micron_build_proxy_geometry.js +0 -205
  51. package/src/engine/graphics/micron/format/serialization/MicronGeometryBinarySerializationAdapter.js +0 -123
  52. package/src/engine/graphics/micron/format/serialization/MicronGeometryBinarySerializationAdapter.spec.js +0 -63
  53. package/src/engine/graphics/micron/format/serialization/collection/geometry_collection_serialization.js +0 -83
  54. package/src/engine/graphics/micron/format/serialization/collection/geometry_collection_serialization.spec.js +0 -51
  55. package/src/engine/graphics/micron/format/serialization/deserialize_attribute_spec.js +0 -25
  56. package/src/engine/graphics/micron/format/serialization/deserialize_patch.js +0 -106
  57. package/src/engine/graphics/micron/format/serialization/serialize_attribute_spec.js +0 -18
  58. package/src/engine/graphics/micron/format/serialization/serialize_patch.js +0 -84
  59. package/src/engine/graphics/micron/format/validate_patch_bounds.js +0 -69
  60. package/src/engine/graphics/micron/plugin/GLTFAssetTransformer.js +0 -265
  61. package/src/engine/graphics/micron/plugin/GLTF_MICRON_ID_FIELD.js +0 -5
  62. package/src/engine/graphics/micron/plugin/MicronRenderPlugin.d.ts +0 -8
  63. package/src/engine/graphics/micron/plugin/MicronRenderPlugin.js +0 -150
  64. package/src/engine/graphics/micron/plugin/serialization/BufferGeometrySerializationAdapter.js +0 -176
  65. package/src/engine/graphics/micron/plugin/shaded_geometry/MicronShadedGeometryRenderAdapter.js +0 -216
  66. package/src/engine/graphics/micron/prototypeMicronProxyBuild.js +0 -227
  67. package/src/engine/graphics/micron/prototypeVirtualGeometry.js +0 -911
  68. package/src/engine/graphics/micron/render/PatchCacheKey.js +0 -79
  69. package/src/engine/graphics/micron/render/VIRTUAL_MESH_FLAG.d.ts +0 -1
  70. package/src/engine/graphics/micron/render/VIRTUAL_MESH_FLAG.js +0 -1
  71. package/src/engine/graphics/micron/render/VirtualGeometryBuilder.js +0 -207
  72. package/src/engine/graphics/micron/render/approximateTriangleArea.js +0 -25
  73. package/src/engine/graphics/micron/render/culling/PatchCullingSystem.js +0 -129
  74. package/src/engine/graphics/micron/render/instanced/PatchDataTextures.js +0 -329
  75. package/src/engine/graphics/micron/render/instanced/ThreeInstancedAdapter.js +0 -175
  76. package/src/engine/graphics/micron/render/instanced/shader/constants.js +0 -3
  77. package/src/engine/graphics/micron/render/instanced/shader/gen_micron_vertex_attribute_texture_name.js +0 -8
  78. package/src/engine/graphics/micron/render/instanced/shader/shader_rewrite_standard.js +0 -250
  79. package/src/engine/graphics/micron/render/makeThreeMeshFromVirtualGeometry.js +0 -37
  80. package/src/engine/graphics/micron/render/refinement/ActivePatchFlags.js +0 -8
  81. package/src/engine/graphics/micron/render/refinement/ActivePatchList.js +0 -241
  82. package/src/engine/graphics/micron/render/refinement/ActivePatchRecord.js +0 -154
  83. package/src/engine/graphics/micron/render/refinement/RefinementSpec.js +0 -84
  84. package/src/engine/graphics/micron/render/refinement/get_geometry_patch_cut.js +0 -133
  85. package/src/engine/graphics/micron/render/refinement/is_patch_facing_back.js +0 -43
  86. package/src/engine/graphics/micron/render/refinement/is_patch_visible.js +0 -37
  87. package/src/engine/graphics/micron/render/v1/MaterialContext.js +0 -150
  88. package/src/engine/graphics/micron/render/v1/MaterialVertexSpec.js +0 -115
  89. package/src/engine/graphics/micron/render/v1/MicronRenderContext.js +0 -145
  90. package/src/engine/graphics/micron/render/v1/ThreeVirtualGeometryAdapter.js +0 -255
  91. package/src/engine/graphics/micron/render/v1/VGThreeRenderer.js +0 -142
  92. package/src/engine/graphics/micron/render/v1/getTransformedPositionsCached.js +0 -54
  93. package/src/engine/graphics/micron/simplifyGeometry.js +0 -26
  94. package/src/engine/graphics/micron/util/patchToBufferGeometry.js +0 -19
@@ -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
- }