Fix on Chrome, which doesn't support WebGL queries
This commit is contained in:
parent
96d2f909ea
commit
5e5148df54
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[package]
|
||||
name = "gfx-utils"
|
||||
name = "pathfinder_gfx_utils"
|
||||
version = "0.1.0"
|
||||
authors = ["Patrick Walton <pcwalton@mimiga.net>"]
|
||||
|
||||
|
|
Loading…
Reference in New Issue