@woosh/meep-engine 2.75.7 → 2.75.8

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 (79) hide show
  1. package/build/meep.cjs +268 -252
  2. package/build/meep.min.js +1 -1
  3. package/build/meep.module.js +268 -252
  4. package/editor/ecs/component/createObjectEditor.js +2 -2
  5. package/package.json +1 -1
  6. package/src/core/model/object/ImmutableObjectPool.js +14 -5
  7. package/src/engine/ecs/storage/BinaryBufferDeSerializer.js +7 -9
  8. package/src/engine/ecs/storage/BinaryBufferSerializer.js +15 -16
  9. package/src/engine/ecs/storage/binary/BinaryClassUpgrader.js +10 -59
  10. package/src/engine/ecs/storage/binary/BinarySerializationRegistry.js +14 -15
  11. package/src/engine/ecs/storage/binary/collection/BinaryCollectionDeSerializer.js +3 -3
  12. package/src/engine/ecs/storage/binary/collection/BinaryCollectionSerializer.js +60 -62
  13. package/src/engine/ecs/storage/binary/executeBinaryClassUpgraderChain.js +46 -0
  14. package/src/engine/ecs/storage/binary/object/BinaryObjectSerializationAdapter.js +2 -2
  15. package/src/engine/ecs/terrain/ecs/layers/TerrainLayer.js +37 -31
  16. package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.js +8 -7
  17. package/src/engine/graphics/render/RendererPool.js +36 -40
  18. package/src/engine/graphics/render/buffer/FrameBuffer.js +25 -24
  19. package/src/engine/graphics/render/buffer/RenderGraph.js +21 -21
  20. package/src/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +1 -1
  21. package/src/engine/graphics/render/frame_graph/IRenderContext.js +31 -1
  22. package/src/engine/graphics/render/frame_graph/RenderGraph.js +5 -5
  23. package/src/engine/graphics/render/frame_graph/RenderTarget.js +9 -0
  24. package/src/engine/graphics/render/frame_graph/RenderTextureManager.js +57 -0
  25. package/src/engine/graphics/render/frame_graph/ResourceEntry.js +7 -5
  26. package/src/engine/graphics/render/frame_graph/TextureDescriptor.js +48 -33
  27. package/src/engine/graphics/render/frame_graph/TextureInitialState.js +14 -0
  28. package/src/engine/graphics/render/frame_graph/sample/deferred/CopyPass.js +20 -0
  29. package/src/engine/graphics/render/frame_graph/sample/deferred/LightingPass.js +4 -0
  30. package/src/engine/graphics/render/frame_graph/sample/deferred/run.js +34 -6
  31. package/src/engine/graphics/render/frame_graph/webgl/WebGLRenderContext.js +34 -0
  32. package/src/engine/graphics/render/visibility/hiz/prototypeHiZ.js +3 -2
  33. package/src/engine/graphics/sh3/gi/prototypeSHGI.js +92 -0
  34. package/src/engine/graphics/texture/virtual/{v2/VirtualTextureMemoryMapping.js → VirtualTextureMemoryMapping.js} +2 -26
  35. package/src/engine/graphics/texture/virtual/{v2/VirtualTexturePage.js → VirtualTexturePage.js} +10 -10
  36. package/src/engine/graphics/texture/virtual/{v2/VirtualTextureTileLoader.js → VirtualTextureTileLoader.js} +7 -7
  37. package/src/engine/graphics/texture/virtual/{v2/VirtualTextureUsage.js → VirtualTextureUsage.js} +1 -1
  38. package/src/engine/graphics/texture/virtual/{v2/VirtualTextureUsageUpdater.js → VirtualTextureUsageUpdater.js} +7 -7
  39. package/src/engine/graphics/texture/virtual/{v2/debug → debug}/ResidencyDebugView.js +4 -4
  40. package/src/engine/graphics/texture/virtual/{v2/debug → debug}/UsageDebugView.js +2 -2
  41. package/src/engine/graphics/texture/virtual/{v2/debug → debug}/UsagePyramidDebugView.js +4 -4
  42. package/src/engine/graphics/texture/virtual/{v2/prototype.js → prototype.js} +7 -7
  43. package/src/engine/graphics/texture/virtual/{v2/tile → tile}/compose_finger_print.js +1 -1
  44. package/src/engine/graphics/texture/virtual/{v2/tile → tile}/compose_tile_address.js +2 -2
  45. package/src/engine/graphics/texture/virtual/{v2/tile → tile}/tile_address_to_finger_print.js +1 -1
  46. package/src/engine/ecs/storage/json/Blueprint.js +0 -129
  47. package/src/engine/ecs/storage/json/EntityFactory.js +0 -207
  48. package/src/engine/ecs/storage/json/JSONDeSerializer.js +0 -148
  49. package/src/engine/ecs/storage/json/JSONSerializer.js +0 -132
  50. package/src/engine/ecs/storage/json/README.md +0 -5
  51. package/src/engine/graphics/render/webgpu/sample/MeshInstance.js +0 -108
  52. package/src/engine/graphics/render/webgpu/sample/fragmentDeferredRendering.wgsl +0 -71
  53. package/src/engine/graphics/render/webgpu/sample/fragmentGBuffersDebugView.wgsl +0 -39
  54. package/src/engine/graphics/render/webgpu/sample/fragmentWriteGBuffers.wgsl +0 -21
  55. package/src/engine/graphics/render/webgpu/sample/lightUpdate.wgsl +0 -41
  56. package/src/engine/graphics/render/webgpu/sample/main.js +0 -605
  57. package/src/engine/graphics/render/webgpu/sample/vertexTextureQuad.wgsl +0 -9
  58. package/src/engine/graphics/render/webgpu/sample/vertexWriteGBuffers.wgsl +0 -30
  59. package/src/engine/graphics/texture/virtual/TileOperation.js +0 -13
  60. package/src/engine/graphics/texture/virtual/TileTree.js +0 -150
  61. package/src/engine/graphics/texture/virtual/TileTree.spec.js +0 -58
  62. package/src/engine/graphics/texture/virtual/TileUsage.js +0 -137
  63. package/src/engine/graphics/texture/virtual/VirtualTexture.js +0 -238
  64. package/src/engine/graphics/texture/virtual/VirtualTexture.spec.js +0 -39
  65. package/src/engine/graphics/texture/virtual/page/TilePage.js +0 -148
  66. package/src/engine/graphics/texture/virtual/page/TilePageSlot.js +0 -36
  67. package/src/engine/graphics/texture/virtual/tile/Tile.js +0 -44
  68. package/src/engine/graphics/texture/virtual/tile/Tile.spec.js +0 -11
  69. package/src/engine/graphics/texture/virtual/tile/TileAddress.js +0 -63
  70. package/src/engine/graphics/texture/virtual/tile/TileAddress.spec.js +0 -30
  71. package/src/engine/graphics/texture/virtual/tile/TileLoader.js +0 -178
  72. package/src/engine/graphics/texture/virtual/tile/TileRequest.js +0 -40
  73. package/src/engine/graphics/texture/virtual/tile/TileStatus.js +0 -10
  74. /package/src/engine/graphics/texture/virtual/{v2/NOTES.md → NOTES.md} +0 -0
  75. /package/src/engine/graphics/texture/virtual/{v2/VirtualTextureMaterial.js → VirtualTextureMaterial.js} +0 -0
  76. /package/src/engine/graphics/texture/virtual/{v2/VirtualTextureUsageShader.js → VirtualTextureUsageShader.js} +0 -0
  77. /package/src/engine/graphics/texture/virtual/{v2/tile → tile}/VirtualTextureTile.js +0 -0
  78. /package/src/engine/graphics/texture/virtual/{v2/tile → tile}/decompose_finger_print.js +0 -0
  79. /package/src/engine/graphics/texture/virtual/{v2/tile → tile}/finger_print_to_tile_address.js +0 -0
@@ -1,132 +0,0 @@
1
- /**
2
- * Created by Alex on 12/10/2016.
3
- */
4
-
5
-
6
-
7
- function JSONSerializer() {
8
-
9
- }
10
-
11
- /**
12
- *
13
- * @param {EntityComponentDataset} entityDataset
14
- * @returns {{blueprints, objects: Array}}
15
- */
16
- JSONSerializer.prototype.process = function (entityDataset) {
17
- console.time('serializing');
18
-
19
- const blueprintsHash = {};
20
- const objects = [];
21
-
22
- let blueprintCount = 0;
23
-
24
- function computeBlueprintHash(components, componentCount) {
25
- let hash = "";
26
- let i = 0;
27
- for (; i < componentCount; i++) {
28
- const component = components[i];
29
- hash += component.constructor.typeName + "#";
30
-
31
- }
32
- return hash;
33
- }
34
-
35
- function createBlueprint(components, componentCount) {
36
- const blueprint = {};
37
- const blueprintComponents = [];
38
- let i = 0;
39
- for (; i < componentCount; i++) {
40
- const component = components[i];
41
- const ComponentClass = component.constructor;
42
- const typeName = ComponentClass.typeName;
43
- if (typeName === undefined) {
44
- console.error("typeName is not defined for component class " + ComponentClass);
45
- }
46
- blueprintComponents.push({
47
- type: typeName
48
- });
49
- }
50
- blueprint.components = blueprintComponents;
51
- blueprint.id = (blueprintCount++);
52
-
53
- return blueprint;
54
- }
55
-
56
- function obtainBlueprint(components, componentCount) {
57
- const blueprintId = computeBlueprintHash(components, componentCount);
58
-
59
- let blueprint = blueprintsHash[blueprintId];
60
- if (blueprint === undefined) {
61
- blueprint = createBlueprint(components, componentCount, blueprintId);
62
- blueprintsHash[blueprintId] = blueprint;
63
- }
64
- return blueprint;
65
- }
66
-
67
- function isEmptyObject(o) {
68
- let result = true;
69
- if (typeof o === 'object') {
70
- for (let p in o) {
71
- if (o.hasOwnProperty(p)) {
72
- result = false;
73
- break;
74
- }
75
- }
76
- } else {
77
- result = false;
78
- }
79
- return result;
80
- }
81
-
82
- const serializableComponentTypes = entityDataset.getComponentTypeMap().filter(function (componentClass) {
83
- return componentClass.serializable !== false;
84
-
85
- });
86
-
87
-
88
- entityDataset.traverseEntitiesCompactedFiltered(serializableComponentTypes, function (entity, components, componentCount) {
89
- const blueprint = obtainBlueprint(components, componentCount);
90
-
91
- const objectParameters = {};
92
- const object = {
93
- blueprint: blueprint.id
94
- };
95
-
96
- let i = 0;
97
- for (; i < componentCount; i++) {
98
- const component = components[i];
99
- if (typeof component.toJSON !== 'function') {
100
- console.error("toJSON is not a function", component);
101
- continue;
102
- }
103
- const json = component.toJSON();
104
- if (!isEmptyObject(json)) {
105
- objectParameters[component.constructor.typeName] = json;
106
- }
107
- }
108
- if (!isEmptyObject(objectParameters)) {
109
- object.parameters = objectParameters;
110
- }
111
-
112
- objects.push(object);
113
- });
114
-
115
-
116
- //rebuild blueprints into ID based structure
117
- const blueprints = {};
118
- for (let h in blueprintsHash) {
119
- const blueprint = blueprintsHash[h];
120
- blueprints[blueprint.id] = blueprint;
121
- //remove id
122
- delete blueprint.id;
123
- }
124
-
125
- console.timeEnd('serializing');
126
- return {
127
- blueprints: blueprints,
128
- objects: objects
129
- };
130
- };
131
-
132
- export default JSONSerializer;
@@ -1,5 +0,0 @@
1
- This is a framework for json serialization/deserialization of `EntityComponentDataset`s
2
-
3
- Meep has been using binary format for datasets since ~2017
4
-
5
- This is largely obsolete.
@@ -1,108 +0,0 @@
1
- import { array_copy } from "../../../../../core/collection/array/array_copy.js";
2
-
3
- const BIND_GROUP_MATERIAL = 1;
4
-
5
- export class MeshInstance {
6
- constructor() {
7
-
8
- /**
9
- *
10
- * @type {THREE.BufferGeometry|null}
11
- */
12
- this.geometry = null;
13
-
14
- /**
15
- *
16
- * @type {null}
17
- */
18
- this.material = null;
19
-
20
- /**
21
- *
22
- * @type {GPUBuffer|null}
23
- */
24
- this.vertex_buffer = null;
25
-
26
- /**
27
- *
28
- * @type {GPUBuffer|null}
29
- */
30
- this.index_buffer = null;
31
- }
32
-
33
- /**
34
- *
35
- * @param {GPUDevice} device
36
- */
37
- init(device) {
38
- const mesh = this.geometry;
39
-
40
- const kVertexStride = 8;
41
- const attribute_position = mesh.getAttribute('position');
42
- const vertexBuffer = device.createBuffer({
43
- // position: vec3, normal: vec3, uv: vec2
44
- size: attribute_position.array.length * kVertexStride * Float32Array.BYTES_PER_ELEMENT,
45
- usage: GPUBufferUsage.VERTEX,
46
- mappedAtCreation: true,
47
- });
48
-
49
- {
50
- const mapping = new Float32Array(vertexBuffer.getMappedRange());
51
-
52
- const attribute_normal = mesh.getAttribute('normal');
53
- const attribute_uv = mesh.getAttribute('uv');
54
-
55
- const vertex_count = attribute_position.count;
56
-
57
- for (let i = 0; i < vertex_count; ++i) {
58
- const address = kVertexStride * i;
59
- array_copy(attribute_position.array, i * 3, mapping, address, 3);
60
- array_copy(attribute_normal.array, i * 3, mapping, address + 3, 3);
61
- array_copy(attribute_uv.array, i * 2, mapping, address + 6, 2);
62
- }
63
- vertexBuffer.unmap();
64
- }
65
-
66
- this.vertex_buffer = vertexBuffer;
67
-
68
- const indexCount = mesh.getIndex().array.length;
69
- const indexBuffer = device.createBuffer({
70
- size: indexCount * Uint32Array.BYTES_PER_ELEMENT,
71
- usage: GPUBufferUsage.INDEX,
72
- mappedAtCreation: true,
73
- });
74
- {
75
- const mapping = new Uint32Array(indexBuffer.getMappedRange());
76
-
77
- mapping.set(mesh.getIndex().array);
78
-
79
- indexBuffer.unmap();
80
- }
81
-
82
- this.index_buffer = indexBuffer;
83
-
84
- }
85
-
86
- /**
87
- *
88
- * @param {GPURenderPassEncoder} pass
89
- */
90
- preparePass(pass) {
91
-
92
- }
93
-
94
- /**
95
- *
96
- * @param {GPURenderPassEncoder} pass
97
- */
98
- draw(pass) {
99
- // set material bindings
100
-
101
- // pass.setBindGroup(BIND_GROUP_MATERIAL, {});
102
-
103
- pass.setVertexBuffer(0, this.vertex_buffer);
104
- pass.setIndexBuffer(this.index_buffer, 'uint32');
105
-
106
- pass.drawIndexed(this.geometry.getIndex().array.length);
107
- }
108
- }
@@ -1,71 +0,0 @@
1
- [[group(0), binding(0)]] var gBufferPosition: texture_2d<f32>;
2
- [[group(0), binding(1)]] var gBufferNormal: texture_2d<f32>;
3
- [[group(0), binding(2)]] var gBufferAlbedo: texture_2d<f32>;
4
-
5
- struct LightData {
6
- position : vec4<f32>;
7
- color : vec3<f32>;
8
- radius : f32;
9
- };
10
-
11
- struct LightsBuffer {
12
- lights: array<LightData>;
13
- };
14
-
15
- [[group(1), binding(0)]] var<storage, read> lightsBuffer: LightsBuffer;
16
-
17
- struct Config {
18
- numLights : u32;
19
- };
20
-
21
- [[group(1), binding(1)]] var<uniform> config: Config;
22
-
23
- struct CanvasConstants {
24
- size: vec2<f32>;
25
- };
26
-
27
- [[group(2), binding(0)]] var<uniform> canvas : CanvasConstants;
28
-
29
- [[stage(fragment)]]
30
- fn main([[builtin(position)]] coord : vec4<f32>)
31
- -> [[location(0)]] vec4<f32> {
32
- var result = vec3<f32>(0.0, 0.0, 0.0);
33
-
34
- let position = textureLoad(
35
- gBufferPosition,
36
- vec2<i32>(floor(coord.xy)),
37
- 0
38
- ).xyz;
39
-
40
- if (position.z > 10000.0) {
41
- discard;
42
- }
43
-
44
- let normal = textureLoad(
45
- gBufferNormal,
46
- vec2<i32>(floor(coord.xy)),
47
- 0
48
- ).xyz;
49
-
50
- let albedo = textureLoad(
51
- gBufferAlbedo,
52
- vec2<i32>(floor(coord.xy)),
53
- 0
54
- ).rgb;
55
-
56
- for (var i : u32 = 0u; i < config.numLights; i = i + 1u) {
57
- let L = lightsBuffer.lights[i].position.xyz - position;
58
- let distance = length(L);
59
- if (distance > lightsBuffer.lights[i].radius) {
60
- continue;
61
- }
62
- let lambert = max(dot(normal, normalize(L)), 0.0);
63
- result = result + vec3<f32>(
64
- lambert * pow(1.0 - distance / lightsBuffer.lights[i].radius, 2.0) * lightsBuffer.lights[i].color * albedo);
65
- }
66
-
67
- // some manual ambient
68
- result = result + vec3<f32>(0.2, 0.2, 0.2);
69
-
70
- return vec4<f32>(result, 1.0);
71
- }
@@ -1,39 +0,0 @@
1
- [[group(0), binding(0)]] var gBufferPosition: texture_2d<f32>;
2
- [[group(0), binding(1)]] var gBufferNormal: texture_2d<f32>;
3
- [[group(0), binding(2)]] var gBufferAlbedo: texture_2d<f32>;
4
-
5
- struct CanvasConstants {
6
- size: vec2<f32>;
7
- };
8
-
9
- [[group(1), binding(0)]] var<uniform> canvas : CanvasConstants;
10
-
11
- [[stage(fragment)]]
12
- fn main([[builtin(position)]] coord : vec4<f32>)
13
- -> [[location(0)]] vec4<f32> {
14
- var result : vec4<f32>;
15
- let c = coord.xy / canvas.size;
16
- if (c.x < 0.33333) {
17
- result = textureLoad(
18
- gBufferPosition,
19
- vec2<i32>(floor(coord.xy)),
20
- 0
21
- );
22
- } else if (c.x < 0.66667) {
23
- result = textureLoad(
24
- gBufferNormal,
25
- vec2<i32>(floor(coord.xy)),
26
- 0
27
- );
28
- result.x = (result.x + 1.0) * 0.5;
29
- result.y = (result.y + 1.0) * 0.5;
30
- result.z = (result.z + 1.0) * 0.5;
31
- } else {
32
- result = textureLoad(
33
- gBufferAlbedo,
34
- vec2<i32>(floor(coord.xy)),
35
- 0
36
- );
37
- }
38
- return result;
39
- }
@@ -1,21 +0,0 @@
1
- struct GBufferOutput {
2
- [[location(0)]] position : vec4<f32>;
3
- [[location(1)]] normal : vec4<f32>;
4
-
5
- // Textures: diffuse color, specular color, smoothness, emissive etc. could go here
6
- [[location(2)]] albedo : vec4<f32>;
7
- };
8
-
9
- [[stage(fragment)]]
10
- fn main([[location(0)]] fragPosition: vec3<f32>,
11
- [[location(1)]] fragNormal: vec3<f32>,
12
- [[location(2)]] fragUV : vec2<f32>) -> GBufferOutput {
13
- var output : GBufferOutput;
14
- output.position = vec4<f32>(fragPosition, 1.0);
15
- output.normal = vec4<f32>(fragNormal, 1.0);
16
- // faking some kind of checkerboard texture
17
- let uv = floor(30.0 * fragUV);
18
- let c = 0.2 + 0.5 * ((uv.x + uv.y) - 2.0 * floor((uv.x + uv.y) / 2.0));
19
- output.albedo = vec4<f32>(c, c, c, 1.0);
20
- return output;
21
- }
@@ -1,41 +0,0 @@
1
- struct LightData {
2
- position : vec4<f32>;
3
- color : vec3<f32>;
4
- radius : f32;
5
- };
6
- struct LightsBuffer {
7
- lights: array<LightData>;
8
- };
9
- [[group(0), binding(0)]] var<storage, read_write> lightsBuffer: LightsBuffer;
10
-
11
- struct Config {
12
- numLights : u32;
13
- };
14
-
15
- [[group(0), binding(1)]] var<uniform> config: Config;
16
-
17
- struct LightExtent {
18
- min : vec4<f32>;
19
- max : vec4<f32>;
20
- };
21
-
22
- [[group(0), binding(2)]] var<uniform> lightExtent: LightExtent;
23
-
24
- [[stage(compute), workgroup_size(64, 1, 1)]]
25
- fn main([[builtin(global_invocation_id)]] GlobalInvocationID : vec3<u32>) {
26
- var index = GlobalInvocationID.x;
27
- if (index >= config.numLights) {
28
- return;
29
- }
30
-
31
- let light = &lightsBuffer.lights[index];
32
-
33
- (*light).position.y = (*light).position.y - 0.001 - 0.003 * (f32(index) - 64.0 * floor(f32(index) / 64.0));
34
-
35
- if ((*light).position.y < lightExtent.min.y) {
36
- (*light).position.y = lightExtent.max.y;
37
- }
38
-
39
- // write out
40
- // lightBuffer.lighs[index] = light;
41
- }