diff --git a/demo/client/src/renderer.ts b/demo/client/src/renderer.ts index ad4620b8..6530c2dd 100644 --- a/demo/client/src/renderer.ts +++ b/demo/client/src/renderer.ts @@ -17,7 +17,7 @@ import {TileInfo} from './aa-strategy'; import {NoAAStrategy, StemDarkeningMode, SubpixelAAType} from './aa-strategy'; import {AAOptions} from './app-controller'; import PathfinderBufferTexture from "./buffer-texture"; -import {UniformMap} from './gl-utils'; +import {UniformMap, WebGLQuery} from './gl-utils'; import {PathfinderPackedMeshBuffers, PathfinderPackedMeshes} from "./meshes"; import {ShaderMap} from './shader-loader'; import {FLOAT32_SIZE, Range, UINT16_SIZE, UINT32_SIZE, unwrapNull, unwrapUndef} from './utils'; @@ -146,7 +146,9 @@ export abstract class Renderer { this.clearDestFramebuffer(); // Start timing rendering. - if (this.timerQueryPollInterval == null) { + if (this.timerQueryPollInterval == null && + renderContext.timerQueryExt != null && + renderContext.atlasRenderingTimerQuery != null) { renderContext.timerQueryExt.beginQueryEXT(renderContext.timerQueryExt.TIME_ELAPSED_EXT, renderContext.atlasRenderingTimerQuery); } @@ -180,13 +182,16 @@ export abstract class Renderer { // End the timer, and start a new one. // FIXME(pcwalton): This is kinda bogus for multipass. - if (this.timerQueryPollInterval == null && objectIndex === objectCount - 1 && - pass === passCount - 1) { + if (this.timerQueryPollInterval == null && + objectIndex === objectCount - 1 && + pass === passCount - 1 && + renderContext.timerQueryExt != null && + renderContext.compositingTimerQuery != null) { renderContext.timerQueryExt .endQueryEXT(renderContext.timerQueryExt.TIME_ELAPSED_EXT); renderContext.timerQueryExt .beginQueryEXT(renderContext.timerQueryExt.TIME_ELAPSED_EXT, - renderContext.compositingTimerQuery); + renderContext.compositingTimerQuery); } // Perform post-antialiasing tasks. @@ -590,16 +595,26 @@ export abstract class Renderer { private finishTiming(): void { const renderContext = this.renderContext; - if (this.timerQueryPollInterval != null) + if (this.timerQueryPollInterval != null || + renderContext.timerQueryExt == null || + renderContext.atlasRenderingTimerQuery == null || + renderContext.compositingTimerQuery == null) { return; + } renderContext.timerQueryExt.endQueryEXT(renderContext.timerQueryExt.TIME_ELAPSED_EXT); this.timerQueryPollInterval = window.setInterval(() => { + if (renderContext.timerQueryExt == null || + renderContext.atlasRenderingTimerQuery == null || + renderContext.compositingTimerQuery == null) { + return; + } + for (const queryName of ['atlasRenderingTimerQuery', 'compositingTimerQuery'] as Array<'atlasRenderingTimerQuery' | 'compositingTimerQuery'>) { if (renderContext.timerQueryExt - .getQueryObjectEXT(renderContext[queryName], + .getQueryObjectEXT(renderContext[queryName] as WebGLQuery, renderContext.timerQueryExt .QUERY_RESULT_AVAILABLE_EXT) === 0) { diff --git a/demo/client/src/view.ts b/demo/client/src/view.ts index 509ce024..2e017d73 100644 --- a/demo/client/src/view.ts +++ b/demo/client/src/view.ts @@ -148,15 +148,15 @@ export abstract class DemoView extends PathfinderView implements RenderContext { instancedArraysExt!: ANGLE_instanced_arrays; textureHalfFloatExt!: OESTextureHalfFloat; - timerQueryExt!: EXTDisjointTimerQuery; + timerQueryExt!: EXTDisjointTimerQuery | null; vertexArrayObjectExt!: OESVertexArrayObject; quadPositionsBuffer!: WebGLBuffer; quadTexCoordsBuffer!: WebGLBuffer; quadElementsBuffer!: WebGLBuffer; - atlasRenderingTimerQuery!: WebGLQuery; - compositingTimerQuery!: WebGLQuery; + atlasRenderingTimerQuery!: WebGLQuery | null; + compositingTimerQuery!: WebGLQuery | null; meshes: PathfinderPackedMeshBuffers[]; meshData: PathfinderPackedMeshes[]; @@ -295,8 +295,13 @@ export abstract class DemoView extends PathfinderView implements RenderContext { this.gl.bufferData(this.gl.ELEMENT_ARRAY_BUFFER, QUAD_ELEMENTS, this.gl.STATIC_DRAW); // Set up our timer queries for profiling. - this.atlasRenderingTimerQuery = this.timerQueryExt.createQueryEXT(); - this.compositingTimerQuery = this.timerQueryExt.createQueryEXT(); + if (this.timerQueryExt != null) { + this.atlasRenderingTimerQuery = this.timerQueryExt.createQueryEXT(); + this.compositingTimerQuery = this.timerQueryExt.createQueryEXT(); + } else { + this.atlasRenderingTimerQuery = null; + this.compositingTimerQuery = null; + } } protected renderingFinished(): void {} @@ -369,7 +374,7 @@ export interface RenderContext { readonly instancedArraysExt: ANGLEInstancedArrays; readonly textureHalfFloatExt: OESTextureHalfFloat; - readonly timerQueryExt: EXTDisjointTimerQuery; + readonly timerQueryExt: EXTDisjointTimerQuery | null; readonly vertexArrayObjectExt: OESVertexArrayObject; readonly colorAlphaFormat: ColorAlphaFormat; @@ -381,8 +386,8 @@ export interface RenderContext { readonly quadPositionsBuffer: WebGLBuffer; readonly quadElementsBuffer: WebGLBuffer; - readonly atlasRenderingTimerQuery: WebGLQuery; - readonly compositingTimerQuery: WebGLQuery; + readonly atlasRenderingTimerQuery: WebGLQuery | null; + readonly compositingTimerQuery: WebGLQuery | null; initQuadVAO(attributes: any): void; setDirty(): void; diff --git a/gfx-utils/Cargo.toml b/gfx-utils/Cargo.toml index 39b25118..143c015b 100644 --- a/gfx-utils/Cargo.toml +++ b/gfx-utils/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "gfx-utils" +name = "pathfinder_gfx_utils" version = "0.1.0" authors = ["Patrick Walton "]