Improve rendering context typing and speed

This commit is contained in:
schmelczerandras 2020-10-13 22:34:58 +02:00
parent 4629cfd469
commit e53ca905af
4 changed files with 14 additions and 13 deletions

View file

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

View file

@ -1,4 +1,3 @@
import { UniversalRenderingContext } from '../universal-rendering-context';
import { enableExtension } from './enable-extension'; import { enableExtension } from './enable-extension';
/** @internal */ /** @internal */
@ -16,7 +15,7 @@ export class WebGlStopwatch {
private timerExtension: any; private timerExtension: any;
private timerQuery?: WebGLQuery; private timerQuery?: WebGLQuery;
constructor(private readonly gl: UniversalRenderingContext) { constructor(private readonly gl: WebGL2RenderingContext) {
this.timerExtension = enableExtension(gl, 'EXT_disjoint_timer_query_webgl2'); this.timerExtension = enableExtension(gl, 'EXT_disjoint_timer_query_webgl2');
} }

View file

@ -63,7 +63,6 @@ export class FragmentShaderOnlyProgram extends Program {
); );
if (this.gl.isWebGL2) { if (this.gl.isWebGL2) {
// can only return null on lost context
this.vao = this.gl.createVertexArray()!; this.vao = this.gl.createVertexArray()!;
this.gl.bindVertexArray(this.vao!); this.gl.bindVertexArray(this.vao!);
} else { } else {

View file

@ -1,8 +1,9 @@
import { Insights } from '../rendering/insights'; import { Insights } from '../rendering/insights';
/** @internal */ /** @internal */
export type UniversalRenderingContext = WebGL2RenderingContext & export type UniversalRenderingContext =
WebGLRenderingContext & { isWebGL2: boolean }; | (WebGL2RenderingContext & { isWebGL2: true })
| (WebGLRenderingContext & { isWebGL2: false });
/** @internal */ /** @internal */
export const getUniversalRenderingContext = ( export const getUniversalRenderingContext = (
@ -43,14 +44,14 @@ export const getUniversalRenderingContext = (
const contextLostHandler = { const contextLostHandler = {
get: function (target: UniversalRenderingContext, prop: string) { get: function (target: UniversalRenderingContext, prop: string) {
if (isDestroyed || target.isContextLost()) {
isDestroyed = true;
throw new Error('Context lost');
}
const value = (target as any)[prop]; const value = (target as any)[prop];
if (typeof value === 'function') { if (typeof value === 'function') {
if (isDestroyed || target.isContextLost()) {
isDestroyed = true;
throw new Error('Context lost');
}
return value.bind(target); return value.bind(target);
} }