|
@@ -26,7 +26,7 @@ import { SpeedyPromise } from 'speedy-vision/types/core/speedy-promise';
|
26
|
26
|
import { Nullable, Utils } from '../utils/utils';
|
27
|
27
|
import { AREvent, AREventTarget } from '../utils/ar-events';
|
28
|
28
|
import { IllegalArgumentError, IllegalOperationError, NotSupportedError } from '../utils/errors';
|
29
|
|
-import { Viewport, BaseViewport, ImmersiveViewport, InlineViewport } from './viewport';
|
|
29
|
+import { Viewport } from './viewport';
|
30
|
30
|
import { Settings } from './settings';
|
31
|
31
|
import { Stats } from './stats';
|
32
|
32
|
import { StatsPanel } from './stats-panel';
|
|
@@ -53,7 +53,7 @@ export interface SessionOptions
|
53
|
53
|
sources: Source[];
|
54
|
54
|
|
55
|
55
|
/** viewport */
|
56
|
|
- viewport: Nullable<BaseViewport>;
|
|
56
|
+ viewport: Nullable<Viewport>;
|
57
|
57
|
|
58
|
58
|
/** show stats? */
|
59
|
59
|
stats?: boolean;
|
|
@@ -141,7 +141,7 @@ export class Session extends AREventTarget<SessionEventType>
|
141
|
141
|
* @param stats render stats panel?
|
142
|
142
|
* @param gizmos render gizmos?
|
143
|
143
|
*/
|
144
|
|
- private constructor(sources: Source[], mode: SessionMode, viewport: BaseViewport, stats: boolean, gizmos: boolean)
|
|
144
|
+ private constructor(sources: Source[], mode: SessionMode, viewport: Viewport, stats: boolean, gizmos: boolean)
|
145
|
145
|
{
|
146
|
146
|
super();
|
147
|
147
|
|
|
@@ -157,17 +157,29 @@ export class Session extends AREventTarget<SessionEventType>
|
157
|
157
|
this._gizmos = new Gizmos();
|
158
|
158
|
this._gizmos.visible = gizmos;
|
159
|
159
|
|
|
160
|
+ // validate the mode
|
|
161
|
+ if(mode == 'immersive') {
|
|
162
|
+ if(viewport.style != 'best-fit' && viewport.style != 'stretch') {
|
|
163
|
+ Utils.warning(`Invalid viewport style \"${viewport.style}\" for the \"${mode}\" mode`);
|
|
164
|
+ viewport.style = 'best-fit';
|
|
165
|
+ }
|
|
166
|
+ }
|
|
167
|
+ else if(mode == 'inline') {
|
|
168
|
+ if(viewport.style != 'inline') {
|
|
169
|
+ Utils.warning(`Invalid viewport style \"${viewport.style}\" for the \"${mode}\" mode`);
|
|
170
|
+ viewport.style = 'inline';
|
|
171
|
+ }
|
|
172
|
+ }
|
|
173
|
+ else
|
|
174
|
+ throw new IllegalArgumentError(`Invalid session mode "${mode}"`);
|
|
175
|
+
|
160
|
176
|
// get media
|
161
|
177
|
const media = this.media;
|
|
178
|
+ const getMediaSize = () => media.size;
|
162
|
179
|
|
163
|
180
|
// setup the viewport
|
164
|
|
- if(mode == 'immersive')
|
165
|
|
- this._viewport = new ImmersiveViewport(viewport, () => media.size);
|
166
|
|
- else if(mode == 'inline')
|
167
|
|
- this._viewport = new InlineViewport(viewport, () => media.size);
|
168
|
|
- else
|
169
|
|
- throw new IllegalArgumentError(`Invalid session mode "${mode}"`);
|
170
|
|
- this._viewport._init();
|
|
181
|
+ this._viewport = viewport;
|
|
182
|
+ this._viewport._init(getMediaSize);
|
171
|
183
|
|
172
|
184
|
// setup the main loop
|
173
|
185
|
this._setupUpdateLoop();
|