浏览代码

End the session if the initialization of the scene fails

customisations
alemart 11 个月前
父节点
当前提交
3c5efa2363
共有 2 个文件被更改,包括 23 次插入14 次删除
  1. 4
    3
      demos/hello-three/demo.js
  2. 19
    11
      plugins/three-with-encantar.js

+ 4
- 3
demos/hello-three/demo.js 查看文件

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

+ 19
- 11
plugins/three-with-encantar.js 查看文件

138
 /**
138
 /**
139
  * Do magic to connect encantar.js to three.js
139
  * Do magic to connect encantar.js to three.js
140
  * @param {ARScene} scene
140
  * @param {ARScene} scene
141
- * @returns {Promise<ARPluginSystem> | SpeedyPromise<ARPluginSystem>}
141
+ * @returns {Promise<ARPluginSystem>}
142
  */
142
  */
143
 function encantar(scene)
143
 function encantar(scene)
144
 {
144
 {
186
         ar._session.requestAnimationFrame(animate);
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
         ar._session = session;
195
         ar._session = session;
192
 
196
 
209
 
213
 
210
         session.addEventListener('end', event => {
214
         session.addEventListener('end', event => {
211
             ar._root.visible = false;
215
             ar._root.visible = false;
212
-            scene.release(ar);
213
             ar._frame = null;
216
             ar._frame = null;
214
         });
217
         });
215
 
218
 
219
             ar._renderer.setSize(size.width, size.height, false);
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
             return ar;
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
         console.error(error);
242
         console.error(error);
234
-        alert(error.message);
235
         throw error;
243
         throw error;
236
    
244
    
237
     });
245
     });

正在加载...
取消
保存