Procházet zdrojové kódy

End the session if the initialization of the scene fails

customisations
alemart před 11 měsíci
rodič
revize
3c5efa2363
2 změnil soubory, kde provedl 23 přidání a 14 odebrání
  1. 4
    3
      demos/hello-three/demo.js
  2. 19
    11
      plugins/three-with-encantar.js

+ 4
- 3
demos/hello-three/demo.js Zobrazit soubor

@@ -110,8 +110,6 @@ class DemoScene extends ARScene
110 110
             );
111 111
         }
112 112
 
113
-        //AR.Settings.powerPreference = 'low-power';
114
-
115 113
         const tracker = AR.Tracker.ImageTracker();
116 114
         await tracker.database.add([{
117 115
             name: 'my-reference-image',
@@ -232,7 +230,10 @@ class DemoScene extends ARScene
232 230
 function main()
233 231
 {
234 232
     const scene = new DemoScene();
235
-    encantar(scene);
233
+
234
+    encantar(scene).catch(error => {
235
+        alert(error.message);
236
+    });
236 237
 }
237 238
 
238 239
 document.addEventListener('DOMContentLoaded', main);

+ 19
- 11
plugins/three-with-encantar.js Zobrazit soubor

@@ -138,7 +138,7 @@ class ARPluginSystem
138 138
 /**
139 139
  * Do magic to connect encantar.js to three.js
140 140
  * @param {ARScene} scene
141
- * @returns {Promise<ARPluginSystem> | SpeedyPromise<ARPluginSystem>}
141
+ * @returns {Promise<ARPluginSystem>}
142 142
  */
143 143
 function encantar(scene)
144 144
 {
@@ -186,7 +186,11 @@ function encantar(scene)
186 186
         ar._session.requestAnimationFrame(animate);
187 187
     }
188 188
 
189
-    return scene.startSession().then(session => {
189
+    return Promise.resolve()
190
+    .then(() => {
191
+        return scene.startSession(); // Promise or SpeedyPromise
192
+    })
193
+    .then(session => {
190 194
 
191 195
         ar._session = session;
192 196
 
@@ -209,7 +213,6 @@ function encantar(scene)
209 213
 
210 214
         session.addEventListener('end', event => {
211 215
             ar._root.visible = false;
212
-            scene.release(ar);
213 216
             ar._frame = null;
214 217
         });
215 218
 
@@ -219,19 +222,24 @@ function encantar(scene)
219 222
             ar._renderer.setSize(size.width, size.height, false);
220 223
         });
221 224
 
222
-        let init = scene.init(ar);
223
-        if(!(typeof init === 'object' && 'then' in init))
224
-            init = Promise.resolve();
225
-
226
-        return init.then(() => {
227
-            ar.session.requestAnimationFrame(animate);
225
+        return Promise.resolve()
226
+        .then(() => {
227
+            return scene.init(ar);
228
+        })
229
+        .then(() => {
230
+            session.addEventListener('end', event => { scene.release(ar); });
231
+            session.requestAnimationFrame(animate);
228 232
             return ar;
233
+        })
234
+        .catch(error => {
235
+            session.end();
236
+            throw error;
229 237
         });
230 238
 
231
-    }).catch(error => {
239
+    })
240
+    .catch(error => {
232 241
         
233 242
         console.error(error);
234
-        alert(error.message);
235 243
         throw error;
236 244
    
237 245
     });

Načítá se…
Zrušit
Uložit