@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.
@@ -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
- add(sg) {
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 === undefined) {
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.26",
8
+ "version": "2.36.27",
9
9
  "dependencies": {
10
10
  "gl-matrix": "3.4.3",
11
11
  "fast-levenshtein": "2.0.6",