@woosh/meep-engine 2.33.58 → 2.33.62

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 (120) hide show
  1. package/core/bvh2/aabb3/AABB3.js +4 -1
  2. package/core/bvh2/traversal/traverseBinaryNodeUsingVisitor.js +6 -6
  3. package/core/cache/Cache.js +7 -0
  4. package/core/collection/array/fastArrayEquals.js +17 -0
  5. package/core/collection/array/typed/is_typed_array_equals.js +58 -0
  6. package/core/collection/map/AbstractAsyncMap.js +30 -0
  7. package/core/collection/map/AsyncMapWrapper.js +16 -0
  8. package/core/collection/map/AsyncRemoteHashMap.js +358 -0
  9. package/core/collection/map/CachedAsyncMap.js +34 -0
  10. package/core/geom/3d/SurfacePoint3.js +44 -5
  11. package/core/geom/Vector2.d.ts +2 -0
  12. package/core/geom/Vector4.js +5 -5
  13. package/core/geom/packing/MaxRectangles.js +13 -4
  14. package/core/math/hash/murmur3_32.js +3 -3
  15. package/editor/actions/concrete/PaintTerrainOverlayAction.js +1 -1
  16. package/editor/process/ObstacleGridDisplayProcess.js +1 -1
  17. package/editor/process/symbolic/makeGridPositionSymbolDisplay.js +1 -1
  18. package/editor/tools/FoliagePaintTool.js +1 -1
  19. package/editor/tools/GridPaintTool.js +1 -1
  20. package/editor/tools/paint/TerrainPaintTool.js +1 -1
  21. package/editor/tools/paint/TerrainTexturePaintTool.js +1 -1
  22. package/editor/view/EditorView.js +1 -1
  23. package/editor/view/GridPickCoordinateView.js +1 -1
  24. package/engine/animation/removeEntityGenericEffect.js +22 -31
  25. package/engine/asset/Asset.js +0 -45
  26. package/engine/asset/AssetDescription.js +51 -0
  27. package/engine/asset/AssetManager.d.ts +7 -0
  28. package/engine/asset/AssetManager.js +98 -2
  29. package/engine/asset/AssetTransformer.d.ts +5 -0
  30. package/engine/asset/AssetTransformer.js +15 -0
  31. package/engine/asset/loaders/GLTFAssetLoader.js +27 -25
  32. package/engine/asset/loaders/material/computeImageBitmapEquality.js +2 -2
  33. package/engine/asset/loaders/material/computeTextureEquality.js +2 -2
  34. package/engine/asset/loaders/material/computeTextureHash.js +7 -13
  35. package/engine/ecs/animation/InverseKinematicsSystem.js +1 -1
  36. package/engine/ecs/attachment/AttachmentSystem.js +18 -17
  37. package/engine/ecs/evaluation/world/ReadTerrainLayerWeightPointFitness.js +1 -1
  38. package/engine/ecs/fow/FogOfWarRevealerSystem.js +1 -1
  39. package/engine/ecs/grid/HeightMap2NormalMap.js +1 -1
  40. package/engine/ecs/grid/NormalMap2AOMap.js +1 -1
  41. package/engine/ecs/gui/GUIElement.js +0 -106
  42. package/engine/ecs/gui/GUIElementSerializationAdapter.js +108 -0
  43. package/engine/ecs/gui/hud/HeadsUpDisplaySystem.js +60 -45
  44. package/engine/ecs/gui/position/ViewportPositionSystem.js +5 -5
  45. package/engine/ecs/parent/EntityNode.d.ts +20 -0
  46. package/engine/ecs/parent/EntityNode.js +284 -0
  47. package/engine/ecs/parent/FaceEditor.js +137 -0
  48. package/engine/ecs/parent/testCompositionEntityNode.js +153 -0
  49. package/engine/ecs/parent/testHuDPerf.js +123 -0
  50. package/engine/ecs/storage/binary/BinaryClassUpgrader.js +1 -0
  51. package/engine/ecs/terrain/ecs/ClingToTerrainSystem.js +2 -2
  52. package/engine/ecs/terrain/ecs/Terrain.js +14 -5
  53. package/engine/ecs/terrain/util/loadVisibleTerrainTiles.js +112 -0
  54. package/engine/ecs/terrain/util/obtainTerrain.js +23 -0
  55. package/engine/ecs/util/removeComponentsExcept.js +3 -3
  56. package/engine/graphics/GraphicsEngine.js +4 -5
  57. package/engine/graphics/camera/testClippingPlaneComputation.js +0 -4
  58. package/engine/graphics/ecs/camera/topdown/TopDownCameraController.js +0 -1
  59. package/engine/graphics/ecs/camera/topdown/TopDownCameraController.spec.js +8 -0
  60. package/engine/graphics/ecs/camera/topdown/TopDownCameraLanderSystem.js +1 -1
  61. package/engine/graphics/ecs/light/LightSystem.js +1 -1
  62. package/engine/graphics/ecs/mesh/Mesh.js +5 -5
  63. package/engine/graphics/ecs/mesh/MeshSystem.js +12 -20
  64. package/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +29 -0
  65. package/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.js +158 -1
  66. package/engine/graphics/ecs/path/testPathDisplaySystem.js +0 -2
  67. package/engine/graphics/ecs/trail2d/Trail2D.js +35 -1
  68. package/engine/graphics/ecs/trail2d/Trail2DSystem.js +26 -19
  69. package/engine/graphics/ecs/trail2d/makeGradientTrail.js +68 -0
  70. package/engine/graphics/ecs/water/WaterSystem.js +1 -1
  71. package/engine/graphics/ecs/water2/shader/testWaterShader.js +1 -1
  72. package/engine/graphics/geometry/buffered/query/GeometrySpatialQueryAccelerator.js +55 -11
  73. package/engine/graphics/micron/convert_three_object_to_micron.js +24 -7
  74. package/engine/graphics/micron/plugin/MicronRenderPlugin.js +107 -4
  75. package/engine/graphics/micron/plugin/serialization/BufferGeometrySerializationAdapter.js +176 -0
  76. package/engine/graphics/micron/render/v1/MaterialContext.js +1 -0
  77. package/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.js +19 -3
  78. package/engine/graphics/particles/particular/engine/utils/volume/ParticleVolume.d.ts +2 -0
  79. package/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +2 -5
  80. package/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +0 -2
  81. package/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +1 -3
  82. package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.js +3 -1
  83. package/engine/graphics/render/frame_graph/FrameGraphBuilder.js +36 -0
  84. package/engine/graphics/render/frame_graph/IRenderContext.js +8 -0
  85. package/engine/graphics/render/frame_graph/RenderPass.js +32 -0
  86. package/engine/graphics/render/frame_graph/RenderPassFlags.js +6 -0
  87. package/engine/graphics/render/frame_graph/RenderPassResources.js +15 -0
  88. package/engine/graphics/render/frame_graph/Resource.js +21 -0
  89. package/engine/graphics/render/frame_graph/ResourceReference.js +14 -0
  90. package/engine/graphics/render/frame_graph/TextureDescriptor.js +30 -0
  91. package/engine/graphics/render/frame_graph/UsageModeType.js +5 -0
  92. package/engine/graphics/render/frame_graph/sample/deferred/GBufferDrawPass.js +27 -0
  93. package/engine/graphics/render/frame_graph/sample/deferred/PresentPass.js +17 -0
  94. package/engine/graphics/render/visibility/hiz/prototypeHiZ.js +0 -2
  95. package/engine/graphics/render/webgpu/sample/MeshInstance.js +87 -0
  96. package/engine/graphics/render/webgpu/sample/fragmentDeferredRendering.wgsl +71 -0
  97. package/engine/graphics/render/webgpu/sample/fragmentGBuffersDebugView.wgsl +39 -0
  98. package/engine/graphics/render/webgpu/sample/fragmentWriteGBuffers.wgsl +21 -0
  99. package/engine/graphics/render/webgpu/sample/lightUpdate.wgsl +41 -0
  100. package/engine/graphics/render/webgpu/sample/main.js +604 -0
  101. package/engine/graphics/render/webgpu/sample/vertexTextureQuad.wgsl +9 -0
  102. package/engine/graphics/render/webgpu/sample/vertexWriteGBuffers.wgsl +30 -0
  103. package/engine/graphics/shadows/ShadowMapRenderer.js +10 -4
  104. package/engine/graphics/shadows/testShadowMapRendering.js +0 -2
  105. package/engine/graphics/texture/sampler/Sampler2D.js +24 -45
  106. package/engine/{ecs/grid → graphics/texture/sampler}/sampler2DToFloat32Texture.js +1 -1
  107. package/engine/grid/systems/GridPosition2TransformSystem.js +1 -1
  108. package/engine/grid/systems/ViewportGridProjectionSystem.js +1 -1
  109. package/engine/grid/transform2grid/Transform2GridPositionSystem.js +1 -1
  110. package/engine/intelligence/behavior/ecs/WaitForEventBehavior.js +3 -0
  111. package/engine/save/storage/IndexedDBStorage.js +8 -1
  112. package/engine/scene/transitionToScene.js +1 -1
  113. package/generation/grid/actions/ContinuousGridCellActionSetTerrainHeight.js +1 -1
  114. package/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.js +1 -1
  115. package/generation/markers/debug/visualizeMarkers.js +1 -1
  116. package/generation/theme/ThemeEngine.js +1 -1
  117. package/package.json +1 -1
  118. package/samples/terrain/main.js +117 -0
  119. package/view/minimap/Minimap.js +1 -1
  120. package/engine/ecs/sockets/AttachmentSocketsSystem.js +0 -10
@@ -0,0 +1,176 @@
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
+ }
@@ -82,6 +82,7 @@ export class MaterialContext {
82
82
 
83
83
  if (material[MATERIAL_FLAG] === undefined) {
84
84
  material.onBeforeCompile = composeCompile(this.material.onBeforeCompile, rewrite_material);
85
+ material.needsUpdate = true;
85
86
 
86
87
  material[MATERIAL_FLAG] = true;
87
88
  material[MATERIAL_VERTEX_DISPLACED] = true;
@@ -10,11 +10,26 @@ import {
10
10
  } from "../emitter/PARTICLE_ATTRIBUTES.js";
11
11
  import { update_parameters } from "./update_parameters.js";
12
12
 
13
- const velocity = [];
14
- const position = [];
13
+ /**
14
+ * Common buffer for better memory layout
15
+ * @type {ArrayBuffer}
16
+ */
17
+ const scratch_common_buffer = new ArrayBuffer(4 * 3 * 2);
18
+ /**
19
+ *
20
+ * @type {Float32Array|number[]|vec3}
21
+ */
22
+ const velocity = new Float32Array(scratch_common_buffer, 0, 3);
23
+
24
+ /**
25
+ *
26
+ * @type {Float32Array|number[]|vec3}
27
+ */
28
+ const position = new Float32Array(scratch_common_buffer, 3 * 4, 3);
15
29
 
16
30
  export class SimulationStepFixedPhysics extends AbstractSimulationStep {
17
31
  execute() {
32
+ let i = 0;
18
33
  const particles = this.particles;
19
34
  const timeDelta = this.timeDelta;
20
35
 
@@ -31,7 +46,7 @@ export class SimulationStepFixedPhysics extends AbstractSimulationStep {
31
46
  */
32
47
  const layers = emitter.layers.asArray();
33
48
 
34
- for (let i = 0; i < liveParticleCount; i++) {
49
+ for (; i < liveParticleCount; i++) {
35
50
 
36
51
  const layer_position = particles.readAttributeScalar(i, PARTICLE_ATTRIBUTE_LAYER_POSITION);
37
52
 
@@ -70,6 +85,7 @@ export class SimulationStepFixedPhysics extends AbstractSimulationStep {
70
85
 
71
86
  particles.readAttributeVector3(i, PARTICLE_ATTRIBUTE_POSITION, position);
72
87
 
88
+ // Verlet integration
73
89
  const p_x = position[0] + velocity[0] * timeDelta;
74
90
  const p_y = position[1] + velocity[1] * timeDelta;
75
91
  const p_z = position[2] + velocity[2] * timeDelta;
@@ -19,6 +19,8 @@ export class ParticleVolume {
19
19
 
20
20
  from(args?: Args): void
21
21
 
22
+ fromJSON(json: any): void
23
+
22
24
  build(): void
23
25
 
24
26
  readonly attributes: Attributes
@@ -3,7 +3,6 @@ import { EngineConfiguration } from "../../../../../../EngineConfiguration.js";
3
3
  import GUIElementSystem from "../../../../../../ecs/gui/GUIElementSystem.js";
4
4
  import HeadsUpDisplaySystem from "../../../../../../ecs/gui/hud/HeadsUpDisplaySystem.js";
5
5
  import TagSystem from "../../../../../../ecs/systems/TagSystem.js";
6
- import { AttachmentSocketsSystem } from "../../../../../../ecs/sockets/AttachmentSocketsSystem.js";
7
6
  import { AttachmentSystem } from "../../../../../../ecs/attachment/AttachmentSystem.js";
8
7
  import { SoundEmitterSystem } from "../../../../../../sound/ecs/emitter/SoundEmitterSystem.js";
9
8
  import SoundControllerSystem from "../../../../../../sound/ecs/SoundControllerSystem.js";
@@ -44,7 +43,6 @@ import { ActionBehavior } from "../../../../../../intelligence/behavior/primitiv
44
43
  import { pingpong } from "../../../../../../../core/math/pingpong.js";
45
44
  import { ParameterLookupTable } from "../../parameter/ParameterLookupTable.js";
46
45
  import { pick } from "../../../../../../../../model/game/util/ScreenGridPicker.js";
47
- import { obtainTerrain } from "../../../../../../../../model/game/scenes/SceneUtils.js";
48
46
  import GUIElement from "../../../../../../ecs/gui/GUIElement.js";
49
47
  import EmptyView from "../../../../../../../view/elements/EmptyView.js";
50
48
  import HeadsUpDisplay from "../../../../../../ecs/gui/hud/HeadsUpDisplay.js";
@@ -78,6 +76,7 @@ import { UnitSphereShape3D } from "../../../../../../../core/geom/3d/shape/UnitS
78
76
  import TopDownCameraController from "../../../../../ecs/camera/topdown/TopDownCameraController.js";
79
77
  import { randomFloatBetween } from "../../../../../../../core/math/random/randomFloatBetween.js";
80
78
  import { MicronRenderPlugin } from "../../../../../micron/plugin/MicronRenderPlugin.js";
79
+ import { obtainTerrain } from "../../../../../../ecs/terrain/util/obtainTerrain.js";
81
80
 
82
81
  const engineHarness = new EngineHarness();
83
82
 
@@ -99,7 +98,6 @@ function makeConfig(engine) {
99
98
 
100
99
  config.systems.push(
101
100
  new TagSystem(),
102
- new AttachmentSocketsSystem(),
103
101
  new AttachmentSystem(),
104
102
  new SoundEmitterSystem(assetManager, sound.destination, sound.context),
105
103
  new SoundControllerSystem(),
@@ -132,6 +130,7 @@ function makeConfig(engine) {
132
130
 
133
131
  // Plugins
134
132
  config.addPlugin(MicronRenderPlugin);
133
+ config.addPlugin(AmbientOcclusionPostProcessEffect);
135
134
 
136
135
 
137
136
  // Knowledge
@@ -159,8 +158,6 @@ async function init(harness) {
159
158
  await engine.graphics.loadEnvironmentMap(buildCubeURLs('data/textures/cubemaps/hip_miramar/32/', '.png'));
160
159
 
161
160
 
162
- await engine.plugins.acquire(AmbientOcclusionPostProcessEffect);
163
-
164
161
  await harness.initialize();
165
162
 
166
163
  main(engine);
@@ -8,7 +8,6 @@ import PathFollowingSystem from "../../../../navigation/ecs/path_following/PathF
8
8
  import SteeringSystem from "../../../../ecs/systems/SteeringSystem.js";
9
9
  import MotionSystem from "../../../../ecs/systems/MotionSystem.js";
10
10
  import TagSystem from "../../../../ecs/systems/TagSystem.js";
11
- import { AttachmentSocketsSystem } from "../../../../ecs/sockets/AttachmentSocketsSystem.js";
12
11
  import { AttachmentSystem } from "../../../../ecs/attachment/AttachmentSystem.js";
13
12
  import { SoundEmitterSystem } from "../../../../sound/ecs/emitter/SoundEmitterSystem.js";
14
13
  import SoundControllerSystem from "../../../../sound/ecs/SoundControllerSystem.js";
@@ -93,7 +92,6 @@ function makeConfig(engine) {
93
92
  new SteeringSystem(),
94
93
  new MotionSystem(),
95
94
  new TagSystem(),
96
- new AttachmentSocketsSystem(),
97
95
  new AttachmentSystem(),
98
96
  new SoundEmitterSystem(assetManager, sound.destination, sound.context),
99
97
  new SoundControllerSystem(),
@@ -9,7 +9,6 @@ import PathFollowingSystem from "../../../../navigation/ecs/path_following/PathF
9
9
  import SteeringSystem from "../../../../ecs/systems/SteeringSystem.js";
10
10
  import MotionSystem from "../../../../ecs/systems/MotionSystem.js";
11
11
  import TagSystem from "../../../../ecs/systems/TagSystem.js";
12
- import { AttachmentSocketsSystem } from "../../../../ecs/sockets/AttachmentSocketsSystem.js";
13
12
  import { AttachmentSystem } from "../../../../ecs/attachment/AttachmentSystem.js";
14
13
  import { SoundEmitterSystem } from "../../../../sound/ecs/emitter/SoundEmitterSystem.js";
15
14
  import SoundControllerSystem from "../../../../sound/ecs/SoundControllerSystem.js";
@@ -70,7 +69,6 @@ import Renderable from "../../../../ecs/components/Renderable.js";
70
69
  import { makeHelperSphereGeometry } from "../../../../../editor/process/symbolic/makeHelperSphereGeometry.js";
71
70
  import TopDownCameraController from "../../../ecs/camera/topdown/TopDownCameraController.js";
72
71
  import ThreeFactory from "../../../three/ThreeFactory.js";
73
- import { obtainTerrain } from "../../../../../../model/game/scenes/SceneUtils.js";
74
72
  import { JsonAssetLoader } from "../../../../asset/loaders/JsonAssetLoader.js";
75
73
  import { TextureAssetLoader } from "../../../../asset/loaders/texture/TextureAssetLoader.js";
76
74
  import { GameAssetType } from "../../../../asset/GameAssetType.js";
@@ -84,6 +82,7 @@ import { FogOfWar } from "../../../../ecs/fow/FogOfWar.js";
84
82
  import { FogOfWarRevealer } from "../../../../ecs/fow/FogOfWarRevealer.js";
85
83
  import Team from "../../../../../../model/game/ecs/component/Team.js";
86
84
  import { AmbientOcclusionPostProcessEffect } from "../../buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.js";
85
+ import { obtainTerrain } from "../../../../ecs/terrain/util/obtainTerrain.js";
87
86
 
88
87
  const geo_light_center_octahedron = new BoxBufferGeometry(0.1, 0.1, 0.1);
89
88
  const engineHarness = new EngineHarness();
@@ -120,7 +119,6 @@ function makeConfig(engine) {
120
119
  new SteeringSystem(),
121
120
  new MotionSystem(),
122
121
  new TagSystem(),
123
- new AttachmentSocketsSystem(),
124
122
  new AttachmentSystem(),
125
123
  new SoundEmitterSystem(assetManager, sound.destination, sound.context),
126
124
  new SoundControllerSystem(),
@@ -116,14 +116,16 @@ export function query_bvh_frustum_from_texture(
116
116
  const radius = source_data[light_address + 3];
117
117
 
118
118
  if (!point_light_inside_volume(light_x, light_y, light_z, radius, points, planes)) {
119
+ // cull
119
120
  continue;
120
121
  }
122
+
121
123
  } else if (light_type === 3) {
122
124
  // decal
123
125
  debugger;
124
126
 
125
127
  } else {
126
- throw new Error('Unsupported light type');
128
+ throw new Error(`Unsupported light type ${light_type}`);
127
129
  }
128
130
 
129
131
  // write to output
@@ -0,0 +1,36 @@
1
+ import { assert } from "../../../../core/assert.js";
2
+
3
+ export class FrameGraphBuilder {
4
+ /**
5
+ *
6
+ * @param {TextureDescriptor} descriptor
7
+ * @returns {Resource}
8
+ */
9
+ createTexture(descriptor) {
10
+ throw new Error('Not Implemented');
11
+ }
12
+
13
+ /**
14
+ *
15
+ * @param {Resource} resource
16
+ * @param {number} flags
17
+ * @returns {ResourceReference}
18
+ */
19
+ read(resource, flags) {
20
+ assert.equal(resource.isResource, true, 'resource.isResource !== true');
21
+
22
+ throw new Error('Not Implemented');
23
+ }
24
+
25
+ /**
26
+ *
27
+ * @param {Resource} resource
28
+ * @param {number} flags
29
+ * @returns {ResourceReference}
30
+ */
31
+ write(resource, flags) {
32
+ assert.equal(resource.isResource, true, 'resource.isResource !== true');
33
+
34
+ throw new Error('Not Implemented');
35
+ }
36
+ }
@@ -0,0 +1,8 @@
1
+ //
2
+
3
+ /**
4
+ * Abstracts rendering context, such as "WebGLRenderer" in THREE.js or WebGL/WebGPU
5
+ */
6
+ export class IRenderContext {
7
+ //TODO implement
8
+ }
@@ -0,0 +1,32 @@
1
+ const DEFAULT_FLAGS = 0;
2
+
3
+ export class RenderPass {
4
+
5
+ constructor() {
6
+ this.ref_count = 0;
7
+ /**
8
+ *
9
+ * @type {number|RenderPassFlags}
10
+ */
11
+ this.flags = DEFAULT_FLAGS;
12
+ }
13
+
14
+ /**
15
+ *
16
+ * @param {FrameGraphBuilder} builder
17
+ * @param {Object<Resource>} inputs
18
+ * @returns {Object<Resource>}
19
+ */
20
+ setup(builder, inputs) {
21
+ throw new Error('Not Implemented');
22
+ }
23
+
24
+ /**
25
+ *
26
+ * @param {RenderPassResources} resources
27
+ * @param {IRenderContext} render_context
28
+ */
29
+ execute(resources, render_context) {
30
+ throw new Error('Not Implemented');
31
+ }
32
+ }
@@ -0,0 +1,6 @@
1
+ export const RenderPassFlags = {
2
+ /**
3
+ * Render pass hidden effects, accessing data from outside
4
+ */
5
+ HasSideEffects: 1
6
+ };
@@ -0,0 +1,15 @@
1
+ //
2
+
3
+ /**
4
+ * Built by FrameGraphBuilder, maps abstract resource handles to concrete, allocated GPU resources
5
+ */
6
+ export class RenderPassResources {
7
+ /**
8
+ *
9
+ * @param {Resource} resource
10
+ * @returns {Texture}
11
+ */
12
+ getTexture(resource) {
13
+ throw new Error('Not Implemented');
14
+ }
15
+ }
@@ -0,0 +1,21 @@
1
+ export class Resource {
2
+ constructor() {
3
+ /**
4
+ *
5
+ * @type {number}
6
+ */
7
+ this.ref_count = 0;
8
+
9
+ /**
10
+ *
11
+ * @type {TextureDescriptor}
12
+ */
13
+ this.descriptor = null;
14
+ }
15
+ }
16
+
17
+ /**
18
+ * @readonly
19
+ * @type {boolean}
20
+ */
21
+ Resource.prototype.isResource = true;
@@ -0,0 +1,14 @@
1
+ export class ResourceReference {
2
+ constructor() {
3
+ /**
4
+ *
5
+ * @type {Resource|null}
6
+ */
7
+ this.resource = null;
8
+ /**
9
+ *
10
+ * @type {number|UsageModeType}
11
+ */
12
+ this.usage = 0;
13
+ }
14
+ }
@@ -0,0 +1,30 @@
1
+ import { FloatType } from "three";
2
+
3
+ const TextureInitialState = {
4
+ /**
5
+ * Clear the texture.
6
+ */
7
+ Clear: 0,
8
+ /**
9
+ * Doesn't matter. No need to clear
10
+ */
11
+ Undefined: 1
12
+ };
13
+
14
+ export class TextureDescriptor {
15
+ constructor() {
16
+ this.height = 0;
17
+ this.width = 0;
18
+ /**
19
+ * Render texture type
20
+ * @type {number}
21
+ */
22
+ this.format = FloatType;
23
+
24
+ /**
25
+ * What should the texture be initialized to
26
+ * @type {number}
27
+ */
28
+ this.initialState = TextureInitialState.Clear;
29
+ }
30
+ }
@@ -0,0 +1,5 @@
1
+ export const UsageModeType = {
2
+ Read: 1,
3
+ Write: 2,
4
+ Create: 4
5
+ }
@@ -0,0 +1,27 @@
1
+ import { RenderPass } from "../../RenderPass.js";
2
+ import { TextureDescriptor } from "../../TextureDescriptor.js";
3
+
4
+ export class GBufferDrawPass extends RenderPass {
5
+ setup(builder, inputs) {
6
+ // ignore inputs
7
+
8
+ const out_albedo = new TextureDescriptor();
9
+ const res_albedo = builder.createTexture(out_albedo);
10
+
11
+ const out_normal = new TextureDescriptor();
12
+ const res_normal = builder.createTexture(out_normal);
13
+
14
+ const out_depth = new TextureDescriptor();
15
+ const res_depth = builder.createTexture(out_depth);
16
+
17
+ return {
18
+ albedo: res_albedo,
19
+ normal: res_normal,
20
+ depth: res_depth
21
+ };
22
+ }
23
+
24
+ execute(resources, render_context) {
25
+
26
+ }
27
+ }
@@ -0,0 +1,17 @@
1
+ import { RenderPass } from "../../RenderPass.js";
2
+
3
+ export class PresentPass extends RenderPass {
4
+ /**
5
+ *
6
+ * @param builder
7
+ * @param {Resource} data
8
+ * @return {{data: ResourceReference}}
9
+ */
10
+ setup(builder, { data }) {
11
+ const input_ref = builder.read(data, 0);
12
+
13
+ return {
14
+ data: input_ref
15
+ };
16
+ }
17
+ }
@@ -8,7 +8,6 @@ import PathFollowingSystem from "../../../../navigation/ecs/path_following/PathF
8
8
  import SteeringSystem from "../../../../ecs/systems/SteeringSystem.js";
9
9
  import MotionSystem from "../../../../ecs/systems/MotionSystem.js";
10
10
  import TagSystem from "../../../../ecs/systems/TagSystem.js";
11
- import { AttachmentSocketsSystem } from "../../../../ecs/sockets/AttachmentSocketsSystem.js";
12
11
  import { AttachmentSystem } from "../../../../ecs/attachment/AttachmentSystem.js";
13
12
  import { SoundEmitterSystem } from "../../../../sound/ecs/emitter/SoundEmitterSystem.js";
14
13
  import SoundControllerSystem from "../../../../sound/ecs/SoundControllerSystem.js";
@@ -97,7 +96,6 @@ function makeConfig(engine) {
97
96
  new SteeringSystem(),
98
97
  new MotionSystem(),
99
98
  new TagSystem(),
100
- new AttachmentSocketsSystem(),
101
99
  new AttachmentSystem(),
102
100
  new SoundEmitterSystem(assetManager, sound.destination, sound.context),
103
101
  new SoundControllerSystem(),