Add better insights and FPS autoscaling

This commit is contained in:
schmelczerandras 2020-10-19 11:56:38 +02:00
parent 30296409ac
commit e5423212c3
11 changed files with 132 additions and 220 deletions

View file

@ -1,8 +1,8 @@
import { Insights } from '../../rendering/insights';
import { UniversalRenderingContext } from '../universal-rendering-context';
/** @internal */
export const tryEnableExtension = (
gl: WebGL2RenderingContext | WebGLRenderingContext,
gl: UniversalRenderingContext,
name: string
): any | null => {
let extension = null;
@ -10,16 +10,13 @@ export const tryEnableExtension = (
extension = gl.getExtension(name);
}
Insights.setValue(['extensions', name], extension !== null);
gl.insights.extensions[name] = extension !== null;
return extension;
};
/** @internal */
export const enableExtension = (
gl: WebGL2RenderingContext | WebGLRenderingContext,
name: string
): any => {
export const enableExtension = (gl: UniversalRenderingContext, name: string): any => {
const extension = tryEnableExtension(gl, name);
if (extension === null) {

View file

@ -1,6 +1,5 @@
import { numberToGlslFloat } from '../../helper/number-to-glsl-float';
import { wait } from '../../helper/wait';
import { Insights } from '../rendering/insights';
import { tryEnableExtension } from './helper/enable-extension';
import { UniversalRenderingContext } from './universal-rendering-context';
@ -60,11 +59,10 @@ export class ParallelCompiler {
return promise;
}
@Insights.measure('compile programs')
public async compilePrograms(): Promise<void> {
this.programs.forEach((p) => this.gl.linkProgram(p.program));
Insights.setValue('program count', this.programs.length);
this.gl.insights.programCount = this.programs.length;
while (this.programs.length > 0) {
this.resolveFinishedPrograms();

View file

@ -1,9 +1,10 @@
import { Insights } from '../rendering/insights';
import { RendererInfo } from '../rendering/renderer/renderer-info';
/** @internal */
export type UniversalRenderingContext =
export type UniversalRenderingContext = (
| (WebGL2RenderingContext & { isWebGL2: true })
| (WebGLRenderingContext & { isWebGL2: false });
| (WebGLRenderingContext & { isWebGL2: false })
) & { insights: RendererInfo };
/** @internal */
export const getUniversalRenderingContext = (
@ -31,7 +32,14 @@ export const getUniversalRenderingContext = (
result.isWebGL2 = false;
}
Insights.setValue('using WebGL2', result.isWebGL2);
result.insights = {
isWebGL2: result.isWebGL2,
extensions: {},
renderPasses: {
distance: {},
lights: {},
},
};
let isDestroyed = false;