@woosh/meep-engine 2.39.35 → 2.39.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +13 -0
- package/core/assert.js +14 -5
- package/core/bvh2/aabb3/AABB3.js +2 -2
- package/core/bvh2/aabb3/aabb3_detailed_volume_intersection.js +3 -2
- package/core/bvh2/aabb3/aabb3_intersects_frustum_array.js +2 -2
- package/core/bvh2/bvh3/ExplicitBinaryBoundingVolumeHierarchy.js +7 -0
- package/core/bvh2/bvh3/bvh_query_user_data_overlaps_frustum.js +12 -11
- package/core/bvh2/bvh3/query/compute_tight_near_far_clipping_planes.js +149 -6
- package/core/bvh2/bvh3/query/compute_tight_near_far_clipping_planes.spec.js +41 -0
- package/core/bvh2/traversal/ThreeClippingPlaneComputingBVHVisitor.js +2 -2
- package/core/bvh2/traversal/__process_point_if_within_planes.js +2 -2
- package/core/bvh2/traversal/aabb3_detailed_volume_intersection_callback_based.js +3 -0
- package/core/collection/array/computeHashArray.d.ts +1 -0
- package/core/collection/array/computeHashIntegerArray.d.ts +1 -0
- package/core/collection/array/computeHashIntegerArray.js +4 -9
- package/core/geom/3d/aabb/aabb3_computeDistanceAbovePlane_max.spec.js +8 -0
- package/core/geom/3d/aabb/{aabb3_computeDistanceAbovePlane.js → aabb3_compute_distance_above_plane_max.js} +3 -2
- package/core/geom/3d/aabb/computeAABB3PlaneSide.js +3 -3
- package/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +3 -2
- package/core/geom/3d/plane/is_point_within_planes.js +2 -2
- package/core/geom/3d/plane/plane3_projectPoint.js +2 -2
- package/core/geom/3d/plane/plane3_projectPoint.spec.js +54 -0
- package/core/geom/Plane.js +0 -19
- package/core/geom/v3_distance_above_plane.js +20 -0
- package/core/geom/v3_distance_above_plane.spec.js +40 -0
- package/core/math/statistics/halton_sequence.js +26 -0
- package/core/primitives/array/computeIntegerArrayHash.js +1 -1
- package/engine/asset/loaders/ArrayBufferLoader.js +76 -16
- package/engine/ecs/EntityComponentDataset.js +18 -28
- package/engine/graphics/GraphicsEngine.d.ts +2 -2
- package/engine/graphics/GraphicsEngine.js +11 -15
- package/engine/graphics/composit/LayerCompositer.js +1 -0
- package/engine/graphics/ecs/animation/animator/AnimationGraphSystem.js +5 -0
- package/engine/graphics/ecs/animation/animator/graph/AnimationGraph.js +8 -2
- package/engine/graphics/ecs/camera/Camera.js +2 -2
- package/engine/graphics/ecs/camera/CameraSystem.js +6 -0
- package/engine/graphics/ecs/light/binding/three/ThreeLightBinding.js +1 -1
- package/engine/graphics/ecs/mesh-v2/aggregate/prototypeSGMesh.js +17 -20
- package/engine/graphics/filter/FlipArrayInPlace.js +11 -6
- package/engine/graphics/geometry/clipping/ClippedGeometry.js +4 -4
- package/engine/graphics/micron/prototypeVirtualGeometry.js +3 -1
- package/engine/graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.js +2 -0
- package/engine/graphics/render/buffer/simple-fx/taa/TemporalSupersamplingRenderPlugin.js +95 -0
- package/engine/graphics/render/buffer/simple-fx/taa/prototypeTAA.js +61 -0
- package/engine/graphics/render/forward_plus/LightManager.js +4 -4
- package/engine/graphics/render/forward_plus/plugin/ForwardPlusRenderingPlugin.js +6 -7
- package/engine/graphics/render/forward_plus/plugin/MaterialTransformer.js +6 -2
- package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_objects.js +4 -2
- package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.js +4 -2
- package/engine/graphics/render/frame_graph/GraphNode.js +22 -0
- package/engine/graphics/render/frame_graph/RenderGraph.js +405 -0
- package/engine/graphics/render/frame_graph/RenderGraphBuilder.js +77 -0
- package/engine/graphics/render/frame_graph/RenderPass.js +30 -12
- package/engine/graphics/render/frame_graph/RenderPassNode.js +103 -0
- package/engine/graphics/render/frame_graph/RenderPassResources.js +54 -4
- package/engine/graphics/render/frame_graph/ResourceEntry.js +77 -0
- package/engine/graphics/render/frame_graph/ResourceNode.js +23 -0
- package/engine/graphics/render/frame_graph/TextureDescriptor.js +38 -4
- package/engine/graphics/render/frame_graph/sample/deferred/GBufferDrawPass.js +11 -5
- package/engine/graphics/render/frame_graph/sample/deferred/LightingPass.js +24 -0
- package/engine/graphics/render/frame_graph/sample/deferred/run.js +31 -0
- package/engine/graphics/render/frame_graph/sample/meep-v1/ColorDepthPass.js +38 -0
- package/engine/graphics/render/frame_graph/sample/meep-v1/OutlinePass.js +9 -0
- package/engine/graphics/render/frame_graph/sample/meep-v1/SSAOPass.js +5 -0
- package/engine/graphics/render/frame_graph/sample/meep-v1/render.js +7 -0
- package/engine/graphics/render/frame_graph/webgl/WebGLRenderContext.js +5 -0
- package/engine/graphics/render/layers/RenderLayerUtils.js +5 -3
- package/engine/graphics/render/view/CameraView.js +38 -0
- package/engine/knowledge/database/DATABASE_SERIALIZATION_IGNORE_PROPERTY.js +1 -0
- package/engine/knowledge/database/StaticKnowledgeDataTable.js +28 -5
- package/engine/plugin/EnginePluginManager.js +1 -2
- package/package.json +1 -1
- package/core/geom/Plane.spec.js +0 -12
- package/engine/graphics/render/frame_graph/FrameGraphBuilder.js +0 -36
- package/engine/graphics/render/frame_graph/Resource.js +0 -21
- package/engine/graphics/render/frame_graph/ResourceReference.js +0 -14
- package/engine/graphics/render/frame_graph/UsageModeType.js +0 -5
- package/engine/graphics/render/frame_graph/sample/deferred/PresentPass.js +0 -17
|
@@ -6,6 +6,8 @@ import { read_frustum_planes_to_array } from "../../../../core/geom/3d/frustum/r
|
|
|
6
6
|
import Signal from "../../../../core/events/signal/Signal.js";
|
|
7
7
|
import { compare_three_objects } from "../../three/compare_three_objects.js";
|
|
8
8
|
import { frustum_from_camera } from "../../ecs/camera/frustum_from_camera.js";
|
|
9
|
+
import { array_copy } from "../../../../core/collection/array/copyArray.js";
|
|
10
|
+
import { array_remove_first } from "../../../../core/collection/array/array_remove_first.js";
|
|
9
11
|
|
|
10
12
|
const DEFAULT_FLAGS = CameraViewFlags.Active
|
|
11
13
|
| CameraViewFlags.AdaptivePlaneNear
|
|
@@ -13,6 +15,8 @@ const DEFAULT_FLAGS = CameraViewFlags.Active
|
|
|
13
15
|
|
|
14
16
|
const scratch_frustum = new Frustum();
|
|
15
17
|
|
|
18
|
+
const scratch_mat4 = new Float32Array(16);
|
|
19
|
+
|
|
16
20
|
export class CameraView {
|
|
17
21
|
constructor() {
|
|
18
22
|
|
|
@@ -66,6 +70,20 @@ export class CameraView {
|
|
|
66
70
|
postVisibilityBuild: new Signal(),
|
|
67
71
|
preRender: new Signal()
|
|
68
72
|
};
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
*
|
|
76
|
+
* @type {{transform:(Float32Array, Float32Array)=>void, context:*}[]}
|
|
77
|
+
*/
|
|
78
|
+
this.projection_modifiers = [];
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
addProjectionModifier(mod) {
|
|
82
|
+
this.projection_modifiers.push(mod);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
removeProjectionModifier(mod) {
|
|
86
|
+
return array_remove_first(this.projection_modifiers, mod);
|
|
69
87
|
}
|
|
70
88
|
|
|
71
89
|
/**
|
|
@@ -83,6 +101,26 @@ export class CameraView {
|
|
|
83
101
|
|
|
84
102
|
// read projection matrix
|
|
85
103
|
// TODO
|
|
104
|
+
|
|
105
|
+
array_copy(camera.projectionMatrix.elements, 0, this.projection_matrix, 0, 16);
|
|
106
|
+
let ts = this.projection_matrix;
|
|
107
|
+
let td = scratch_mat4;
|
|
108
|
+
for (let i = 0; i < this.projection_modifiers.length; i++) {
|
|
109
|
+
const modifier = this.projection_modifiers[i];
|
|
110
|
+
|
|
111
|
+
modifier.transform.call(modifier.context, ts, td);
|
|
112
|
+
|
|
113
|
+
const swap = ts;
|
|
114
|
+
|
|
115
|
+
ts = td;
|
|
116
|
+
td = swap;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
if (ts !== this.projection_matrix) {
|
|
120
|
+
array_copy(ts, 0, this.projection_matrix, 0, 16);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
array_copy(this.projection_matrix, 0, this.__camera.projectionMatrix.elements, 0, 16);
|
|
86
124
|
}
|
|
87
125
|
|
|
88
126
|
/**
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const DATABASE_SERIALIZATION_IGNORE_PROPERTY = '@ignore';
|
|
@@ -3,6 +3,7 @@ import { countTask } from "../../../core/process/task/TaskUtils.js";
|
|
|
3
3
|
import Task from "../../../core/process/task/Task.js";
|
|
4
4
|
import { assert } from "../../../core/assert.js";
|
|
5
5
|
import { TaskSignal } from "../../../core/process/task/TaskSignal.js";
|
|
6
|
+
import { DATABASE_SERIALIZATION_IGNORE_PROPERTY } from "./DATABASE_SERIALIZATION_IGNORE_PROPERTY.js";
|
|
6
7
|
|
|
7
8
|
let id_seed = 0;
|
|
8
9
|
|
|
@@ -64,6 +65,13 @@ export class StaticKnowledgeDataTable {
|
|
|
64
65
|
*/
|
|
65
66
|
__automatic_ids = false;
|
|
66
67
|
|
|
68
|
+
/**
|
|
69
|
+
*
|
|
70
|
+
* @type {string}
|
|
71
|
+
* @protected
|
|
72
|
+
*/
|
|
73
|
+
__element_type_name = 'element';
|
|
74
|
+
|
|
67
75
|
reset() {
|
|
68
76
|
Object.keys(this.elements).forEach(id => {
|
|
69
77
|
delete this.elements[id];
|
|
@@ -134,7 +142,7 @@ export class StaticKnowledgeDataTable {
|
|
|
134
142
|
const element = this.get(id);
|
|
135
143
|
|
|
136
144
|
if (element === null) {
|
|
137
|
-
throw new Error(`Failed to get
|
|
145
|
+
throw new Error(`Failed to get ${this.__element_type_name} '${id}' from the database'`);
|
|
138
146
|
}
|
|
139
147
|
|
|
140
148
|
result.push(element);
|
|
@@ -248,6 +256,17 @@ export class StaticKnowledgeDataTable {
|
|
|
248
256
|
|
|
249
257
|
}
|
|
250
258
|
|
|
259
|
+
const flag_ignore = datum[DATABASE_SERIALIZATION_IGNORE_PROPERTY];
|
|
260
|
+
if (flag_ignore !== undefined) {
|
|
261
|
+
if (typeof flag_ignore !== "boolean") {
|
|
262
|
+
console.warn(`${DATABASE_SERIALIZATION_IGNORE_PROPERTY} flag is present on ${this.__element_type_name} '${id}'. ${DATABASE_SERIALIZATION_IGNORE_PROPERTY} must be a boolean (true/false), instead was '${typeof flag_ignore}'(=${flag_ignore})`);
|
|
263
|
+
} else if (flag_ignore) {
|
|
264
|
+
console.warn(`[${this.__element_type_name}:${id}] ${DATABASE_SERIALIZATION_IGNORE_PROPERTY} flag is set to true, skipping`);
|
|
265
|
+
} else {
|
|
266
|
+
console.warn(`[${this.__element_type_name}:${id}] ${DATABASE_SERIALIZATION_IGNORE_PROPERTY} flag is set to false and has no effect, please remove this field from JSON`);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
251
270
|
let element;
|
|
252
271
|
|
|
253
272
|
try {
|
|
@@ -262,7 +281,7 @@ export class StaticKnowledgeDataTable {
|
|
|
262
281
|
_id = 'ERROR';
|
|
263
282
|
}
|
|
264
283
|
|
|
265
|
-
console.error(`Failed to parse
|
|
284
|
+
console.error(`Failed to parse ${this.__element_type_name} (id=${_id})`, e, datum);
|
|
266
285
|
return;
|
|
267
286
|
}
|
|
268
287
|
|
|
@@ -291,7 +310,7 @@ export class StaticKnowledgeDataTable {
|
|
|
291
310
|
const added = this.add(element);
|
|
292
311
|
|
|
293
312
|
if (!added) {
|
|
294
|
-
console.error(`Failed to add
|
|
313
|
+
console.error(`Failed to add ${this.__element_type_name} '${id}', most likely this a duplicate key`);
|
|
295
314
|
}
|
|
296
315
|
});
|
|
297
316
|
|
|
@@ -344,10 +363,14 @@ export class StaticKnowledgeDataTable {
|
|
|
344
363
|
try {
|
|
345
364
|
promise = this.linkOne(element, json, database, assetManager);
|
|
346
365
|
} catch (e) {
|
|
347
|
-
|
|
366
|
+
const wrap = new Error(`.linkOne(#id=${id}) threw unexpectedly: ${e.message}`);
|
|
367
|
+
|
|
368
|
+
if (e.stack !== undefined) {
|
|
369
|
+
wrap.stack = e.stack;
|
|
370
|
+
}
|
|
348
371
|
|
|
349
372
|
//re-throw to fail
|
|
350
|
-
throw
|
|
373
|
+
throw wrap;
|
|
351
374
|
}
|
|
352
375
|
|
|
353
376
|
if (promise === undefined) {
|
|
@@ -153,7 +153,6 @@ export class EnginePluginManager extends BaseProcess {
|
|
|
153
153
|
const removed = this.__plugins.delete(PluginClass);
|
|
154
154
|
|
|
155
155
|
if (!removed) {
|
|
156
|
-
console.error('Plugin was not found', PluginClass);
|
|
157
156
|
return;
|
|
158
157
|
}
|
|
159
158
|
|
|
@@ -259,7 +258,7 @@ export class EnginePluginManager extends BaseProcess {
|
|
|
259
258
|
|
|
260
259
|
const engine = this.engine;
|
|
261
260
|
|
|
262
|
-
await ctx.transition(manager_state_value,engine);
|
|
261
|
+
await ctx.transition(manager_state_value, engine);
|
|
263
262
|
|
|
264
263
|
return reference;
|
|
265
264
|
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"productName": "Meep",
|
|
6
6
|
"description": "production-ready JavaScript game engine based on Entity Component System Architecture",
|
|
7
7
|
"author": "Alexander Goldring",
|
|
8
|
-
"version": "2.39.
|
|
8
|
+
"version": "2.39.38",
|
|
9
9
|
"dependencies": {
|
|
10
10
|
"gl-matrix": "3.4.3",
|
|
11
11
|
"fast-levenshtein": "2.0.6",
|
package/core/geom/Plane.spec.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { computePointDistanceToPlane } from "./Plane.js";
|
|
2
|
-
|
|
3
|
-
test('computePointDistanceToPlane', () => {
|
|
4
|
-
expect(computePointDistanceToPlane(1, 0, 0, 1, 0, 0, 0)).toBe(1);
|
|
5
|
-
expect(computePointDistanceToPlane(-1, 0, 0, 1, 0, 0, 0)).toBe(-1);
|
|
6
|
-
|
|
7
|
-
expect(computePointDistanceToPlane(0, 1, 0, 0, 1, 0, 0)).toBe(1);
|
|
8
|
-
expect(computePointDistanceToPlane(0, -1, 0, 0, 1, 0, 0)).toBe(-1);
|
|
9
|
-
|
|
10
|
-
expect(computePointDistanceToPlane(0, 0, 1, 0, 0, 1, 0)).toBe(1);
|
|
11
|
-
expect(computePointDistanceToPlane(0, 0, -1, 0, 0, 1, 0)).toBe(-1);
|
|
12
|
-
});
|
|
@@ -1,36 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
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;
|
|
@@ -1,17 +0,0 @@
|
|
|
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
|
-
}
|