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 {NoAAStrategy, StemDarkeningMode, SubpixelAAType} from './aa-strategy';
|
||||||
import {AAOptions} from './app-controller';
|
import {AAOptions} from './app-controller';
|
||||||
import PathfinderBufferTexture from "./buffer-texture";
|
import PathfinderBufferTexture from "./buffer-texture";
|
||||||
import {UniformMap} from './gl-utils';
|
import {UniformMap, WebGLQuery} from './gl-utils';
|
||||||
import {PathfinderPackedMeshBuffers, PathfinderPackedMeshes} from "./meshes";
|
import {PathfinderPackedMeshBuffers, PathfinderPackedMeshes} from "./meshes";
|
||||||
import {ShaderMap} from './shader-loader';
|
import {ShaderMap} from './shader-loader';
|
||||||
import {FLOAT32_SIZE, Range, UINT16_SIZE, UINT32_SIZE, unwrapNull, unwrapUndef} from './utils';
|
import {FLOAT32_SIZE, Range, UINT16_SIZE, UINT32_SIZE, unwrapNull, unwrapUndef} from './utils';
|
||||||
|
@ -146,7 +146,9 @@ export abstract class Renderer {
|
||||||
this.clearDestFramebuffer();
|
this.clearDestFramebuffer();
|
||||||
|
|
||||||
// Start timing rendering.
|
// 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.timerQueryExt.beginQueryEXT(renderContext.timerQueryExt.TIME_ELAPSED_EXT,
|
||||||
renderContext.atlasRenderingTimerQuery);
|
renderContext.atlasRenderingTimerQuery);
|
||||||
}
|
}
|
||||||
|
@ -180,8 +182,11 @@ export abstract class Renderer {
|
||||||
|
|
||||||
// End the timer, and start a new one.
|
// End the timer, and start a new one.
|
||||||
// FIXME(pcwalton): This is kinda bogus for multipass.
|
// FIXME(pcwalton): This is kinda bogus for multipass.
|
||||||
if (this.timerQueryPollInterval == null && objectIndex === objectCount - 1 &&
|
if (this.timerQueryPollInterval == null &&
|
||||||
pass === passCount - 1) {
|
objectIndex === objectCount - 1 &&
|
||||||
|
pass === passCount - 1 &&
|
||||||
|
renderContext.timerQueryExt != null &&
|
||||||
|
renderContext.compositingTimerQuery != null) {
|
||||||
renderContext.timerQueryExt
|
renderContext.timerQueryExt
|
||||||
.endQueryEXT(renderContext.timerQueryExt.TIME_ELAPSED_EXT);
|
.endQueryEXT(renderContext.timerQueryExt.TIME_ELAPSED_EXT);
|
||||||
renderContext.timerQueryExt
|
renderContext.timerQueryExt
|
||||||
|
@ -590,16 +595,26 @@ export abstract class Renderer {
|
||||||
private finishTiming(): void {
|
private finishTiming(): void {
|
||||||
const renderContext = this.renderContext;
|
const renderContext = this.renderContext;
|
||||||
|
|
||||||
if (this.timerQueryPollInterval != null)
|
if (this.timerQueryPollInterval != null ||
|
||||||
|
renderContext.timerQueryExt == null ||
|
||||||
|
renderContext.atlasRenderingTimerQuery == null ||
|
||||||
|
renderContext.compositingTimerQuery == null) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
renderContext.timerQueryExt.endQueryEXT(renderContext.timerQueryExt.TIME_ELAPSED_EXT);
|
renderContext.timerQueryExt.endQueryEXT(renderContext.timerQueryExt.TIME_ELAPSED_EXT);
|
||||||
|
|
||||||
this.timerQueryPollInterval = window.setInterval(() => {
|
this.timerQueryPollInterval = window.setInterval(() => {
|
||||||
|
if (renderContext.timerQueryExt == null ||
|
||||||
|
renderContext.atlasRenderingTimerQuery == null ||
|
||||||
|
renderContext.compositingTimerQuery == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for (const queryName of ['atlasRenderingTimerQuery', 'compositingTimerQuery'] as
|
for (const queryName of ['atlasRenderingTimerQuery', 'compositingTimerQuery'] as
|
||||||
Array<'atlasRenderingTimerQuery' | 'compositingTimerQuery'>) {
|
Array<'atlasRenderingTimerQuery' | 'compositingTimerQuery'>) {
|
||||||
if (renderContext.timerQueryExt
|
if (renderContext.timerQueryExt
|
||||||
.getQueryObjectEXT(renderContext[queryName],
|
.getQueryObjectEXT(renderContext[queryName] as WebGLQuery,
|
||||||
renderContext.timerQueryExt
|
renderContext.timerQueryExt
|
||||||
.QUERY_RESULT_AVAILABLE_EXT) ===
|
.QUERY_RESULT_AVAILABLE_EXT) ===
|
||||||
0) {
|
0) {
|
||||||
|
|
|
@ -148,15 +148,15 @@ export abstract class DemoView extends PathfinderView implements RenderContext {
|
||||||
|
|
||||||
instancedArraysExt!: ANGLE_instanced_arrays;
|
instancedArraysExt!: ANGLE_instanced_arrays;
|
||||||
textureHalfFloatExt!: OESTextureHalfFloat;
|
textureHalfFloatExt!: OESTextureHalfFloat;
|
||||||
timerQueryExt!: EXTDisjointTimerQuery;
|
timerQueryExt!: EXTDisjointTimerQuery | null;
|
||||||
vertexArrayObjectExt!: OESVertexArrayObject;
|
vertexArrayObjectExt!: OESVertexArrayObject;
|
||||||
|
|
||||||
quadPositionsBuffer!: WebGLBuffer;
|
quadPositionsBuffer!: WebGLBuffer;
|
||||||
quadTexCoordsBuffer!: WebGLBuffer;
|
quadTexCoordsBuffer!: WebGLBuffer;
|
||||||
quadElementsBuffer!: WebGLBuffer;
|
quadElementsBuffer!: WebGLBuffer;
|
||||||
|
|
||||||
atlasRenderingTimerQuery!: WebGLQuery;
|
atlasRenderingTimerQuery!: WebGLQuery | null;
|
||||||
compositingTimerQuery!: WebGLQuery;
|
compositingTimerQuery!: WebGLQuery | null;
|
||||||
|
|
||||||
meshes: PathfinderPackedMeshBuffers[];
|
meshes: PathfinderPackedMeshBuffers[];
|
||||||
meshData: PathfinderPackedMeshes[];
|
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);
|
this.gl.bufferData(this.gl.ELEMENT_ARRAY_BUFFER, QUAD_ELEMENTS, this.gl.STATIC_DRAW);
|
||||||
|
|
||||||
// Set up our timer queries for profiling.
|
// Set up our timer queries for profiling.
|
||||||
|
if (this.timerQueryExt != null) {
|
||||||
this.atlasRenderingTimerQuery = this.timerQueryExt.createQueryEXT();
|
this.atlasRenderingTimerQuery = this.timerQueryExt.createQueryEXT();
|
||||||
this.compositingTimerQuery = this.timerQueryExt.createQueryEXT();
|
this.compositingTimerQuery = this.timerQueryExt.createQueryEXT();
|
||||||
|
} else {
|
||||||
|
this.atlasRenderingTimerQuery = null;
|
||||||
|
this.compositingTimerQuery = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected renderingFinished(): void {}
|
protected renderingFinished(): void {}
|
||||||
|
@ -369,7 +374,7 @@ export interface RenderContext {
|
||||||
|
|
||||||
readonly instancedArraysExt: ANGLEInstancedArrays;
|
readonly instancedArraysExt: ANGLEInstancedArrays;
|
||||||
readonly textureHalfFloatExt: OESTextureHalfFloat;
|
readonly textureHalfFloatExt: OESTextureHalfFloat;
|
||||||
readonly timerQueryExt: EXTDisjointTimerQuery;
|
readonly timerQueryExt: EXTDisjointTimerQuery | null;
|
||||||
readonly vertexArrayObjectExt: OESVertexArrayObject;
|
readonly vertexArrayObjectExt: OESVertexArrayObject;
|
||||||
|
|
||||||
readonly colorAlphaFormat: ColorAlphaFormat;
|
readonly colorAlphaFormat: ColorAlphaFormat;
|
||||||
|
@ -381,8 +386,8 @@ export interface RenderContext {
|
||||||
readonly quadPositionsBuffer: WebGLBuffer;
|
readonly quadPositionsBuffer: WebGLBuffer;
|
||||||
readonly quadElementsBuffer: WebGLBuffer;
|
readonly quadElementsBuffer: WebGLBuffer;
|
||||||
|
|
||||||
readonly atlasRenderingTimerQuery: WebGLQuery;
|
readonly atlasRenderingTimerQuery: WebGLQuery | null;
|
||||||
readonly compositingTimerQuery: WebGLQuery;
|
readonly compositingTimerQuery: WebGLQuery | null;
|
||||||
|
|
||||||
initQuadVAO(attributes: any): void;
|
initQuadVAO(attributes: any): void;
|
||||||
setDirty(): void;
|
setDirty(): void;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
[package]
|
[package]
|
||||||
name = "gfx-utils"
|
name = "pathfinder_gfx_utils"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
authors = ["Patrick Walton <pcwalton@mimiga.net>"]
|
authors = ["Patrick Walton <pcwalton@mimiga.net>"]
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue