Expose context lost simulator
This commit is contained in:
parent
32aebe9036
commit
69ad74ed73
8 changed files with 36 additions and 11 deletions
|
|
@ -1,3 +1,4 @@
|
|||
import { enableContextLostSimulator } from './graphics/graphics-library/helper/enable-context-lost-simulator';
|
||||
import { ContextAwareRenderer } from './graphics/rendering/renderer/context-aware-renderer';
|
||||
import { StartupSettings } from './graphics/rendering/settings/startup-settings';
|
||||
import { DrawableDescriptor, Renderer } from './main';
|
||||
|
|
@ -31,6 +32,9 @@ export async function compile(
|
|||
descriptors: Array<DrawableDescriptor>,
|
||||
settingsOverrides: Partial<StartupSettings> = {}
|
||||
): Promise<Renderer> {
|
||||
if (settingsOverrides.enableContextLostSimulator) {
|
||||
enableContextLostSimulator(canvas);
|
||||
}
|
||||
const renderer = new ContextAwareRenderer(canvas, descriptors, settingsOverrides);
|
||||
await renderer.initializedPromise;
|
||||
return renderer;
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
import { formatLog } from '../../../helper/format-log';
|
||||
|
||||
/** @internal */
|
||||
let isEnabled = false;
|
||||
|
||||
|
|
@ -14,12 +16,12 @@ export const enableContextLostSimulator = (canvas: HTMLCanvasElement) => {
|
|||
|
||||
const simulateContextLost = () => {
|
||||
ext.loseContext();
|
||||
console.log('lost');
|
||||
console.info(formatLog('context-lost-simulator', 'lost'));
|
||||
|
||||
const restoreTimeout = Math.random() * 500;
|
||||
setTimeout(() => {
|
||||
ext.restoreContext();
|
||||
console.log('restored');
|
||||
console.info(formatLog('context-lost-simulator', 'restored'));
|
||||
}, restoreTimeout);
|
||||
|
||||
setTimeout(() => simulateContextLost(), restoreTimeout + Math.random() * 500);
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
import { formatLog } from '../../helper/format-log';
|
||||
import { numberToGlslFloat } from '../../helper/number-to-glsl-float';
|
||||
import { wait } from '../../helper/wait';
|
||||
import { tryEnableExtension } from './helper/enable-extension';
|
||||
|
|
@ -138,9 +139,12 @@ export class ParallelCompiler {
|
|||
const line = Number.parseInt(match[1]);
|
||||
const error = match[2];
|
||||
console.error(
|
||||
`Error: ${error}\nSource (line ${line}):\n${
|
||||
shader.source.split('\n')[line - 1]
|
||||
}`
|
||||
formatLog(
|
||||
'parallel-compiler',
|
||||
`Error: ${error}\nSource (line ${line}):\n${
|
||||
shader.source.split('\n')[line - 1]
|
||||
}`
|
||||
)
|
||||
);
|
||||
}
|
||||
throw new Error('Error while compiling shader');
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import { ReadonlyVec2, vec2 } from 'gl-matrix';
|
||||
import { Drawable } from '../../../drawables/drawable';
|
||||
import { DrawableDescriptor } from '../../../drawables/drawable-descriptor';
|
||||
import { formatLog } from '../../../helper/format-log';
|
||||
import { RuntimeSettings } from '../settings/runtime-settings';
|
||||
import { StartupSettings } from '../settings/startup-settings';
|
||||
import { Renderer } from './renderer';
|
||||
|
|
@ -51,7 +52,6 @@ export class ContextAwareRenderer implements Renderer {
|
|||
if (!e.message.includes('Context lost')) {
|
||||
throw e;
|
||||
}
|
||||
console.warn(e.message);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -63,7 +63,6 @@ export class ContextAwareRenderer implements Renderer {
|
|||
if (!e.message.includes('Context lost')) {
|
||||
throw e;
|
||||
}
|
||||
console.warn(e.message);
|
||||
}
|
||||
|
||||
this.setRuntimeSettings(this.runtimeOverrides);
|
||||
|
|
@ -75,13 +74,12 @@ export class ContextAwareRenderer implements Renderer {
|
|||
private handleContextLost(event: Event) {
|
||||
this.isRendererReady = false;
|
||||
event.preventDefault();
|
||||
console.warn('Context lost');
|
||||
console.warn(formatLog('context-aware-renderer', 'Context lost'));
|
||||
}
|
||||
|
||||
private handleContextRestored(event: Event) {
|
||||
event.preventDefault();
|
||||
console.info('Context restored');
|
||||
|
||||
console.info(formatLog('context-aware-renderer', 'Context restored'));
|
||||
this.createRenderer();
|
||||
}
|
||||
|
||||
|
|
@ -92,7 +90,6 @@ export class ContextAwareRenderer implements Renderer {
|
|||
} catch (e) {
|
||||
if (e.message.includes('Context lost')) {
|
||||
this.isRendererReady = false;
|
||||
console.warn(e.message);
|
||||
return defaultValue;
|
||||
}
|
||||
throw e;
|
||||
|
|
|
|||
|
|
@ -11,4 +11,5 @@ export const defaultStartupSettings: StartupSettings = {
|
|||
backgroundColor: vec4.fromValues(1, 1, 1, 1),
|
||||
lightPenetrationRatio: 0.75,
|
||||
enableStopwatch: false,
|
||||
enableContextLostSimulator: false,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -41,6 +41,13 @@ export interface StartupSettings {
|
|||
*/
|
||||
paletteSize: number;
|
||||
|
||||
/**
|
||||
* Many context lost event will be simulated when enabled.
|
||||
*
|
||||
* Useful for testing.
|
||||
*/
|
||||
enableContextLostSimulator: boolean;
|
||||
|
||||
/**
|
||||
* The default background color of the scene, can have transparency on every platform.
|
||||
*/
|
||||
|
|
|
|||
6
src/helper/format-log.ts
Normal file
6
src/helper/format-log.ts
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
/**
|
||||
* @internal
|
||||
*/
|
||||
export const formatLog = (originator: string, message: any): string => {
|
||||
return `[SDF-2D][${originator}]: ${message}`;
|
||||
};
|
||||
|
|
@ -1,3 +1,4 @@
|
|||
import { enableContextLostSimulator } from './graphics/graphics-library/helper/enable-context-lost-simulator';
|
||||
import { FpsQualityAutoscaler } from './graphics/rendering/fps-quality-autoscaler';
|
||||
import { ContextAwareRenderer } from './graphics/rendering/renderer/context-aware-renderer';
|
||||
import { RuntimeSettings } from './graphics/rendering/settings/runtime-settings';
|
||||
|
|
@ -53,6 +54,9 @@ export async function runAnimation(
|
|||
startupSettingOverrides: Partial<StartupSettings> = {},
|
||||
initialRuntimeSettingOverrides: Partial<RuntimeSettings> = {}
|
||||
): Promise<void> {
|
||||
if (startupSettingOverrides.enableContextLostSimulator) {
|
||||
enableContextLostSimulator(canvas);
|
||||
}
|
||||
const renderer = new ContextAwareRenderer(canvas, descriptors, startupSettingOverrides);
|
||||
|
||||
const deltaTimeCalculator = new DeltaTimeCalculator();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue