@woosh/meep-engine 2.36.26 → 2.36.27
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/engine/graphics/ecs/mesh-v2/render/adapters/AbstractRenderAdapter.js +9 -0
- package/engine/graphics/ecs/mesh-v2/render/optimization/RuntimeDrawMethodOptimizer.js +5 -0
- package/engine/graphics/ecs/mesh-v2/sample/load_gltf.js +3 -0
- package/engine/graphics/micron/plugin/MicronRenderPlugin.js +0 -82
- package/engine/graphics/micron/plugin/shaded_geometry/MicronShadedGeometryRenderAdapter.js +28 -3
- package/package.json +1 -1
|
@@ -27,6 +27,15 @@ export class AbstractRenderAdapter {
|
|
|
27
27
|
return 0;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
/**
|
|
31
|
+
* Express intent to draw
|
|
32
|
+
* @param {ShadedGeometry} sg
|
|
33
|
+
* @returns {boolean} true if able to draw immediately, false otherwise
|
|
34
|
+
*/
|
|
35
|
+
intend_draw(sg) {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
|
|
30
39
|
/**
|
|
31
40
|
*
|
|
32
41
|
* @param {ShadedGeometry} sg
|
|
@@ -102,6 +102,11 @@ export class RuntimeDrawMethodOptimizer {
|
|
|
102
102
|
return false;
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
+
if (!adapters[best_adapter].intend_draw(sg)) {
|
|
106
|
+
// unable to draw, don't do anything
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
|
|
105
110
|
sg.draw_method = best_adapter;
|
|
106
111
|
|
|
107
112
|
return true;
|
|
@@ -7,6 +7,7 @@ import { three_object_to_entity_composition } from "../three_object_to_entity_co
|
|
|
7
7
|
import { AttachmentSystem } from "../../../../ecs/attachment/AttachmentSystem.js";
|
|
8
8
|
import { TransformAttachmentSystem } from "../../../../ecs/transform-attachment/TransformAttachmentSystem.js";
|
|
9
9
|
import { Camera } from "../../camera/Camera.js";
|
|
10
|
+
import { MicronRenderPlugin } from "../../../micron/plugin/MicronRenderPlugin.js";
|
|
10
11
|
|
|
11
12
|
const eh = new EngineHarness();
|
|
12
13
|
|
|
@@ -25,6 +26,8 @@ async function init(harness) {
|
|
|
25
26
|
config.addSystem(new TransformAttachmentSystem());
|
|
26
27
|
config.addLoader(GameAssetType.ModelGLTF_JSON, new GLTFAssetLoader());
|
|
27
28
|
|
|
29
|
+
config.addPlugin( MicronRenderPlugin);
|
|
30
|
+
|
|
28
31
|
await config.apply(engine);
|
|
29
32
|
|
|
30
33
|
eh.initialize().then(main);
|
|
@@ -37,13 +37,6 @@ export class MicronRenderPlugin extends EnginePlugin {
|
|
|
37
37
|
layer.managed = true;
|
|
38
38
|
layer.renderPass = RenderPassType.Opaque;
|
|
39
39
|
|
|
40
|
-
/**
|
|
41
|
-
*
|
|
42
|
-
* @type {RenderLayer|null}
|
|
43
|
-
* @private
|
|
44
|
-
*/
|
|
45
|
-
this.__micron_render_layer = layer;
|
|
46
|
-
|
|
47
40
|
this.__vgtr.on.contextAdded.add(ctx => {
|
|
48
41
|
const visibleSet = layer.visibleSet;
|
|
49
42
|
|
|
@@ -54,8 +47,6 @@ export class MicronRenderPlugin extends EnginePlugin {
|
|
|
54
47
|
|
|
55
48
|
});
|
|
56
49
|
|
|
57
|
-
this.__view_observers = new Map();
|
|
58
|
-
|
|
59
50
|
/**
|
|
60
51
|
*
|
|
61
52
|
* @type {AsyncRemoteHashMap}
|
|
@@ -97,55 +88,6 @@ export class MicronRenderPlugin extends EnginePlugin {
|
|
|
97
88
|
this.__sg_system = null;
|
|
98
89
|
}
|
|
99
90
|
|
|
100
|
-
/**
|
|
101
|
-
*
|
|
102
|
-
* @param {THREE.WebGLRenderer} renderer
|
|
103
|
-
* @param {THREE.Camera} camera
|
|
104
|
-
* @param {THREE.Object3D[]} elements
|
|
105
|
-
* @param element_count
|
|
106
|
-
*/
|
|
107
|
-
render(renderer, camera, elements, element_count = elements.length) {
|
|
108
|
-
const vgtr = this.__vgtr;
|
|
109
|
-
|
|
110
|
-
vgtr.clear();
|
|
111
|
-
|
|
112
|
-
vgtr.attachMany(elements, element_count);
|
|
113
|
-
|
|
114
|
-
vgtr.update(renderer, camera);
|
|
115
|
-
vgtr.render();
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
*
|
|
120
|
-
* @param {CameraView} view
|
|
121
|
-
* @private
|
|
122
|
-
*/
|
|
123
|
-
__handle_view_added(view) {
|
|
124
|
-
const observer = () => {
|
|
125
|
-
const ge = this.engine.graphics;
|
|
126
|
-
|
|
127
|
-
this.render(ge.renderer, view.camera, view.visible_objects.elements, view.visible_objects.size);
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
this.__view_observers.set(view, observer);
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
view.on.preRender.add(observer);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
*
|
|
138
|
-
* @param {CameraView} view
|
|
139
|
-
* @private
|
|
140
|
-
*/
|
|
141
|
-
__handle_view_removed(view) {
|
|
142
|
-
const observer = this.__view_observers.get(view);
|
|
143
|
-
|
|
144
|
-
this.__view_observers.delete(view);
|
|
145
|
-
|
|
146
|
-
view.on.preRender.remove(observer);
|
|
147
|
-
}
|
|
148
|
-
|
|
149
91
|
/**
|
|
150
92
|
*
|
|
151
93
|
* @param {System} system
|
|
@@ -214,20 +156,6 @@ export class MicronRenderPlugin extends EnginePlugin {
|
|
|
214
156
|
am.registerTransformer("model/gltf", this.__asset_transformer);
|
|
215
157
|
am.registerTransformer("model/gltf+json", this.__asset_transformer);
|
|
216
158
|
|
|
217
|
-
/**
|
|
218
|
-
*
|
|
219
|
-
* @type {GraphicsEngine}
|
|
220
|
-
*/
|
|
221
|
-
const ge = engine.graphics;
|
|
222
|
-
|
|
223
|
-
ge.layers.add(this.__micron_render_layer);
|
|
224
|
-
|
|
225
|
-
ge.views.elements.on.added.add(this.__handle_view_added, this);
|
|
226
|
-
ge.views.elements.on.removed.add(this.__handle_view_removed, this);
|
|
227
|
-
|
|
228
|
-
// link all views
|
|
229
|
-
ge.views.elements.forEach(this.__handle_view_added, this);
|
|
230
|
-
|
|
231
159
|
this.__persisted_geometry.attach_storage(engine.storage);
|
|
232
160
|
|
|
233
161
|
engine.entityManager.on.systemAdded.add(this.__handle_system_added, this);
|
|
@@ -250,16 +178,6 @@ export class MicronRenderPlugin extends EnginePlugin {
|
|
|
250
178
|
|
|
251
179
|
this.__asset_transformer.assetManager = null;
|
|
252
180
|
|
|
253
|
-
const ge = engine.graphics;
|
|
254
|
-
|
|
255
|
-
ge.layers.remove(this.__micron_render_layer);
|
|
256
|
-
|
|
257
|
-
ge.views.elements.on.added.remove(this.__handle_view_added, this);
|
|
258
|
-
ge.views.elements.on.removed.remove(this.__handle_view_removed, this);
|
|
259
|
-
|
|
260
|
-
// clear all observer
|
|
261
|
-
ge.views.elements.forEach(this.__handle_view_removed, this);
|
|
262
|
-
|
|
263
181
|
engine.entityManager.on.systemAdded.remove(this.__handle_system_added, this);
|
|
264
182
|
engine.entityManager.on.systemRemoved.remove(this.__handle_system_removed, this);
|
|
265
183
|
|
|
@@ -56,13 +56,22 @@ export class MicronShadedGeometryRenderAdapter extends AbstractRenderAdapter {
|
|
|
56
56
|
return inverseLerp(MICRON_POLYCOUNT_THRESHOLD_MIN, MICRON_POLYCOUNT_THRESHOLD_MAX, polycount);
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
/**
|
|
60
|
+
*
|
|
61
|
+
* @param {ShadedGeometry} sg
|
|
62
|
+
* @returns {MicronGeometry}
|
|
63
|
+
* @private
|
|
64
|
+
*/
|
|
65
|
+
__obtain_micron_geometry(sg) {
|
|
61
66
|
const geometry_id = sg.geometry.id;
|
|
62
67
|
|
|
63
68
|
const micron_geometry = this.__geometry_map.get(geometry_id);
|
|
64
69
|
|
|
65
|
-
if (micron_geometry
|
|
70
|
+
if (micron_geometry !== undefined) {
|
|
71
|
+
|
|
72
|
+
return micron_geometry;
|
|
73
|
+
|
|
74
|
+
} else {
|
|
66
75
|
// no micron geometry
|
|
67
76
|
if (!this.__geometry_building_promises.has(geometry_id)) {
|
|
68
77
|
const p = buildMicronGeometryFromBufferGeometry(sg.geometry);
|
|
@@ -71,6 +80,20 @@ export class MicronShadedGeometryRenderAdapter extends AbstractRenderAdapter {
|
|
|
71
80
|
|
|
72
81
|
p.then(mg => this.__geometry_map.set(geometry_id, mg));
|
|
73
82
|
}
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
intend_draw(sg) {
|
|
89
|
+
return this.__obtain_micron_geometry(sg) !== undefined;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
add(sg) {
|
|
93
|
+
const micron_geometry = this.__obtain_micron_geometry(sg);
|
|
94
|
+
|
|
95
|
+
if (micron_geometry === undefined) {
|
|
96
|
+
// no micron geometry
|
|
74
97
|
return;
|
|
75
98
|
}
|
|
76
99
|
|
|
@@ -94,6 +117,8 @@ export class MicronShadedGeometryRenderAdapter extends AbstractRenderAdapter {
|
|
|
94
117
|
* @param {CameraView} view
|
|
95
118
|
*/
|
|
96
119
|
build_start(renderer, view) {
|
|
120
|
+
this.__object_count = 0;
|
|
121
|
+
|
|
97
122
|
const resolution = new Vector2();
|
|
98
123
|
let pixelRatio = 1;
|
|
99
124
|
|
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.36.
|
|
8
|
+
"version": "2.36.27",
|
|
9
9
|
"dependencies": {
|
|
10
10
|
"gl-matrix": "3.4.3",
|
|
11
11
|
"fast-levenshtein": "2.0.6",
|