-
Notifications
You must be signed in to change notification settings - Fork 3.4k
/
engineFactory.ts
29 lines (28 loc) · 1.15 KB
/
engineFactory.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import { Engine } from "./engine";
import { NullEngine } from "./nullEngine";
import { WebGPUEngine } from "./webgpuEngine";
/**
* Helper class to create the best engine depending on the current hardware
*/
export class EngineFactory {
/**
* Creates an engine based on the capabilities of the underlying hardware
* @param canvas Defines the canvas to use to display the result
* @param options Defines the options passed to the engine to create the context dependencies
* @returns a promise that resolves with the created engine
*/
public static CreateAsync(canvas: HTMLCanvasElement, options: any): Promise<Engine> {
return WebGPUEngine.IsSupportedAsync.then((supported) => {
if (supported) {
return WebGPUEngine.CreateAsync(canvas, options);
} else if (Engine.IsSupported) {
return new Promise((resolve) => {
resolve(new Engine(canvas, undefined, options));
});
}
return new Promise((resolve) => {
resolve(new NullEngine(options));
});
});
}
}