Update dependencies and fix TypeScript build failures.

Closes #68.
This commit is contained in:
Patrick Walton 2018-02-19 11:52:00 -08:00
parent a84b7c7cbd
commit 82be5d12d1
19 changed files with 209 additions and 188 deletions

View File

@ -183,6 +183,9 @@ button > svg path {
label.pf-disabled {
color: gray;
}
.btn-group input[type="radio"] {
-moz-appearance: none;
}
/*
* Arrow

View File

@ -11,34 +11,34 @@
"license": "MIT OR Apache-2.0",
"dependencies": {
"@types/base64-js": "^1.2.5",
"@types/gl-matrix": "^2.3.0",
"@types/lodash": "^4.14.74",
"@types/node": "^8.0.28",
"@types/gl-matrix": "^2.4.0",
"@types/lodash": "^4.14.104",
"@types/node": "^8.9.4",
"@types/opentype.js": "0.0.0",
"@types/papaparse": "^4.1.31",
"@types/papaparse": "^4.1.33",
"@types/webgl-ext": "0.0.29",
"base64-js": "^1.2.1",
"bootstrap": "^4.0.0-beta",
"base64-js": "^1.2.3",
"bootstrap": "^4.0.0",
"gl-matrix": "^2.4.0",
"handlebars": "^4.0.10",
"handlebars": "^4.0.11",
"handlebars-loader": "^1.6.0",
"handlebars-webpack-plugin": "^1.2.0",
"html-loader": "^0.5.1",
"handlebars-webpack-plugin": "^1.3.2",
"html-loader": "^0.5.5",
"image-ssim": "^0.2.0",
"jquery": "^3.2.1",
"lodash": "^4.17.4",
"jquery": "^3.3.1",
"lodash": "^4.17.5",
"opentype.js": "^0.7.3",
"papaparse": "^4.3.6",
"papaparse": "^4.3.7",
"parse-color": "^1.0.0",
"path-data-polyfill.js": "^1.0.2",
"popper.js": "^1.12.5",
"popper.js": "^1.13.0",
"rustdoc-webpack-plugin": "file:./build/rustdoc-webpack-plugin",
"ts-loader": "^2.3.7",
"typescript": "^2.5.2",
"webpack": "^3.5.6"
"typescript": "^2.7.2",
"webpack": "^3.11.0"
},
"devDependencies": {
"tslint": "^5.7.0",
"tslint": "^5.9.1",
"tslint-loader": "^3.5.3"
}
}

View File

@ -125,18 +125,18 @@ interface MeshDescriptor {
}
class ThreeDController extends DemoAppController<ThreeDView> {
font: PathfinderFont;
textFrames: TextFrame[];
glyphStore: GlyphStore;
meshDescriptors: MeshDescriptor[];
font!: PathfinderFont;
textFrames!: TextFrame[];
glyphStore!: GlyphStore;
meshDescriptors!: MeshDescriptor[];
atlasGlyphs: AtlasGlyph[];
atlas: Atlas;
atlasGlyphs!: AtlasGlyph[];
atlas!: Atlas;
baseMeshes: PathfinderMeshData;
private expandedMeshes: PathfinderMeshData[];
baseMeshes!: PathfinderMeshData;
private expandedMeshes!: PathfinderMeshData[];
private monumentPromise: Promise<MonumentSide[]>;
private monumentPromise!: Promise<MonumentSide[]>;
start() {
super.start();
@ -360,7 +360,7 @@ class ThreeDView extends DemoView implements TextRenderContext {
}
class ThreeDRenderer extends Renderer {
renderContext: ThreeDView;
renderContext!: ThreeDView;
camera: PerspectiveCamera;
@ -412,7 +412,7 @@ class ThreeDRenderer extends Renderer {
private cubeVertexPositionBuffer: WebGLBuffer;
private cubeIndexBuffer: WebGLBuffer;
private glyphPositionsBuffer: WebGLBuffer;
private glyphPositionsBuffer!: WebGLBuffer;
private glyphPositions: number[];
private glyphPositionRanges: Range[];
private glyphTexCoords: glmatrix.vec4[];
@ -425,6 +425,13 @@ class ThreeDRenderer extends Renderer {
const gl = renderContext.gl;
this.glyphPositions = [];
this.glyphPositionRanges = [];
this.glyphTexCoords = [];
this.glyphSizes = [];
this.distantGlyphVAO = null;
this.camera = new PerspectiveCamera(renderContext.canvas, {
innerCollisionExtent: MONUMENT_SCALE[0],
});
@ -924,6 +931,8 @@ class ThreeDAtlasRenderer extends TextRenderer {
constructor(renderContext: ThreeDView, atlasGlyphs: AtlasGlyph[]) {
super(renderContext);
this.allAtlasGlyphs = atlasGlyphs;
this.glyphTexCoords = [];
this.glyphSizes = [];
}
renderAtlas(): void {

View File

@ -73,11 +73,9 @@ interface Switches {
}
export abstract class AppController {
protected canvas: HTMLCanvasElement;
protected selectFileElement: HTMLSelectElement | null;
protected screenshotButton: HTMLButtonElement | null;
protected canvas!: HTMLCanvasElement;
protected selectFileElement: HTMLSelectElement | null = null;
protected screenshotButton: HTMLButtonElement | null = null;
start(): void {
this.selectFileElement = document.getElementById('pf-select-file') as HTMLSelectElement |
@ -111,19 +109,19 @@ export abstract class AppController {
export abstract class DemoAppController<View extends DemoView> extends AppController
implements Switches {
view: Promise<View>;
view!: Promise<View>;
subpixelAASwitchInputs: SwitchInputs | null;
gammaCorrectionSwitchInputs: SwitchInputs | null;
stemDarkeningSwitchInputs: SwitchInputs | null;
subpixelAASwitchInputs: SwitchInputs | null = null;
gammaCorrectionSwitchInputs: SwitchInputs | null = null;
stemDarkeningSwitchInputs: SwitchInputs | null = null;
protected abstract readonly builtinFileURI: string;
protected filePickerView: FilePickerView | null;
protected filePickerView: FilePickerView | null = null;
protected aaLevelSelect: HTMLSelectElement | null;
protected aaLevelSelect: HTMLSelectElement | null = null;
private fpsLabel: HTMLElement | null;
private fpsLabel: HTMLElement | null = null;
constructor() {
super();

View File

@ -77,12 +77,12 @@ const TEST_SIZES: BenchmarkModeMap<TestParameter> = {
};
class BenchmarkAppController extends DemoAppController<BenchmarkTestView> {
font: PathfinderFont | null;
textRun: TextRun | null;
font: PathfinderFont | null = null;
textRun: TextRun | null = null;
svgLoader: SVGLoader;
svgLoader!: SVGLoader;
mode: BenchmarkMode;
mode!: BenchmarkMode;
protected get defaultFile(): string {
if (this.mode === 'text')
@ -96,22 +96,22 @@ class BenchmarkAppController extends DemoAppController<BenchmarkTestView> {
return BUILTIN_SVG_URI;
}
private optionsModal: HTMLDivElement;
private optionsModal!: HTMLDivElement;
private resultsModal: HTMLDivElement;
private resultsTableHeader: HTMLTableSectionElement;
private resultsTableBody: HTMLTableSectionElement;
private resultsPartitioningTimeLabel: HTMLSpanElement;
private resultsModal!: HTMLDivElement;
private resultsTableHeader!: HTMLTableSectionElement;
private resultsTableBody!: HTMLTableSectionElement;
private resultsPartitioningTimeLabel!: HTMLSpanElement;
private glyphStore: GlyphStore;
private baseMeshes: PathfinderMeshData;
private expandedMeshes: ExpandedMeshData;
private glyphStore!: GlyphStore;
private baseMeshes!: PathfinderMeshData;
private expandedMeshes!: ExpandedMeshData;
private size: number;
private currentRun: number;
private startTime: number;
private elapsedTimes: ElapsedTime[];
private partitionTime: number;
private size!: number;
private currentRun!: number;
private startTime!: number;
private elapsedTimes!: ElapsedTime[];
private partitionTime!: number;
start(): void {
super.start();
@ -360,11 +360,11 @@ class BenchmarkAppController extends DemoAppController<BenchmarkTestView> {
}
class BenchmarkTestView extends DemoView {
renderer: BenchmarkTextRenderer | BenchmarkSVGRenderer;
renderer!: BenchmarkTextRenderer | BenchmarkSVGRenderer;
readonly appController: BenchmarkAppController;
renderingPromiseCallback: ((time: number) => void) | null;
renderingPromiseCallback: ((time: number) => void) | null = null;
get camera(): OrthographicCamera {
return this.renderer.camera;
@ -419,7 +419,7 @@ class BenchmarkTestView extends DemoView {
}
class BenchmarkTextRenderer extends Renderer {
renderContext: BenchmarkTestView;
renderContext!: BenchmarkTestView;
camera: OrthographicCamera;
@ -600,7 +600,7 @@ class BenchmarkTextRenderer extends Renderer {
}
class BenchmarkSVGRenderer extends SVGRenderer {
renderContext: BenchmarkTestView;
renderContext!: BenchmarkTestView;
protected get loader(): SVGLoader {
return this.renderContext.appController.svgLoader;

View File

@ -98,9 +98,9 @@ export class OrthographicCamera extends Camera {
onZoom: (() => void) | null;
onRotate: (() => void) | null;
translation: glmatrix.vec2;
scale: number;
rotationAngle: number;
translation!: glmatrix.vec2;
scale!: number;
rotationAngle!: number;
private _bounds: glmatrix.vec4;
@ -315,7 +315,7 @@ export class OrthographicCamera extends Camera {
}
export class PerspectiveCamera extends Camera {
canvas: HTMLCanvasElement;
canvas!: HTMLCanvasElement;
get usesSTTransform(): boolean {
return false;

View File

@ -86,21 +86,21 @@ interface NormalsTable<T> {
}
class MeshDebuggerAppController extends AppController {
meshes: PathfinderMeshData | null;
meshes: PathfinderMeshData | null = null;
protected readonly defaultFile: string = FONT;
private file: PathfinderFont | SVGLoader | null;
private fileType: FileType;
private fileData: ArrayBuffer | null;
private file: PathfinderFont | SVGLoader | null = null;
private fileType!: FileType;
private fileData: ArrayBuffer | null = null;
private openModal: HTMLElement;
private openFileSelect: HTMLSelectElement;
private fontPathSelectGroup: HTMLElement;
private fontPathSelect: HTMLSelectElement;
private openModal!: HTMLElement;
private openFileSelect!: HTMLSelectElement;
private fontPathSelectGroup!: HTMLElement;
private fontPathSelect!: HTMLSelectElement;
private filePicker: FilePickerView;
private view: MeshDebuggerView;
private filePicker!: FilePickerView;
private view!: MeshDebuggerView;
start() {
super.start();

View File

@ -174,27 +174,27 @@ interface PathRanges {
}
export class PathfinderMeshData implements Meshes<ArrayBuffer>, MeshDataCounts, PathRanges {
readonly bQuadVertexPositions: ArrayBuffer;
readonly bQuadVertexInteriorIndices: ArrayBuffer;
readonly bBoxes: ArrayBuffer;
readonly bBoxSigns: ArrayBuffer;
readonly bBoxIndices: ArrayBuffer;
readonly stencilSegments: ArrayBuffer;
readonly stencilNormals: ArrayBuffer;
readonly bQuadVertexPositions!: ArrayBuffer;
readonly bQuadVertexInteriorIndices!: ArrayBuffer;
readonly bBoxes!: ArrayBuffer;
readonly bBoxSigns!: ArrayBuffer;
readonly bBoxIndices!: ArrayBuffer;
readonly stencilSegments!: ArrayBuffer;
readonly stencilNormals!: ArrayBuffer;
readonly bQuadVertexPositionCount: number;
readonly bQuadVertexInteriorIndexCount: number;
readonly bBoxCount: number;
readonly stencilSegmentCount: number;
bQuadVertexPositionPathIDs: ArrayBuffer;
bBoxPathIDs: ArrayBuffer;
stencilSegmentPathIDs: ArrayBuffer;
bQuadVertexPositionPathIDs!: ArrayBuffer;
bBoxPathIDs!: ArrayBuffer;
stencilSegmentPathIDs!: ArrayBuffer;
bQuadVertexPositionPathRanges: Range[];
bQuadVertexInteriorIndexPathRanges: Range[];
bBoxPathRanges: Range[];
stencilSegmentPathRanges: Range[];
bQuadVertexPositionPathRanges!: Range[];
bQuadVertexInteriorIndexPathRanges!: Range[];
bBoxPathRanges!: Range[];
stencilSegmentPathRanges!: Range[];
constructor(meshes: ArrayBuffer | Meshes<ArrayBuffer>, optionalRanges?: PathRanges) {
if (meshes instanceof ArrayBuffer) {
@ -383,21 +383,21 @@ export class PathfinderMeshData implements Meshes<ArrayBuffer>, MeshDataCounts,
}
export class PathfinderMeshBuffers implements Meshes<WebGLBuffer>, PathRanges {
readonly bQuadVertexPositions: WebGLBuffer;
readonly bQuadVertexPositionPathIDs: WebGLBuffer;
readonly bQuadVertexInteriorIndices: WebGLBuffer;
readonly bBoxes: WebGLBuffer;
readonly bBoxSigns: WebGLBuffer;
readonly bBoxIndices: WebGLBuffer;
readonly bBoxPathIDs: WebGLBuffer;
readonly stencilSegments: WebGLBuffer;
readonly stencilSegmentPathIDs: WebGLBuffer;
readonly stencilNormals: WebGLBuffer;
readonly bQuadVertexPositions!: WebGLBuffer;
readonly bQuadVertexPositionPathIDs!: WebGLBuffer;
readonly bQuadVertexInteriorIndices!: WebGLBuffer;
readonly bBoxes!: WebGLBuffer;
readonly bBoxSigns!: WebGLBuffer;
readonly bBoxIndices!: WebGLBuffer;
readonly bBoxPathIDs!: WebGLBuffer;
readonly stencilSegments!: WebGLBuffer;
readonly stencilSegmentPathIDs!: WebGLBuffer;
readonly stencilNormals!: WebGLBuffer;
readonly bQuadVertexPositionPathRanges: Range[];
readonly bQuadVertexInteriorIndexPathRanges: Range[];
readonly bBoxPathRanges: Range[];
readonly stencilSegmentPathRanges: Range[];
readonly bQuadVertexPositionPathRanges!: Range[];
readonly bQuadVertexInteriorIndexPathRanges!: Range[];
readonly bBoxPathRanges!: Range[];
readonly stencilSegmentPathRanges!: Range[];
constructor(gl: WebGLRenderingContext, meshData: PathfinderMeshData) {
for (const bufferName of Object.keys(BUFFER_TYPES) as Array<keyof Meshes<void>>) {

View File

@ -95,17 +95,17 @@ interface AntialiasingStrategyTable {
}
class ReferenceTestAppController extends DemoAppController<ReferenceTestView> {
font: PathfinderFont | null;
textRun: TextRun | null;
font: PathfinderFont | null = null;
textRun: TextRun | null = null;
svgLoader: SVGLoader;
builtinSvgName: string | null;
svgLoader!: SVGLoader;
builtinSvgName: string | null = null;
referenceCanvas: HTMLCanvasElement;
referenceCanvas!: HTMLCanvasElement;
tests: Promise<ReferenceTestGroup[]>;
tests!: Promise<ReferenceTestGroup[]>;
currentTestType: 'font' | 'svg';
currentTestType!: 'font' | 'svg';
protected readonly defaultFile: string = FONT;
@ -115,29 +115,29 @@ class ReferenceTestAppController extends DemoAppController<ReferenceTestView> {
return BUILTIN_SVG_URI;
}
private glyphStore: GlyphStore;
private baseMeshes: PathfinderMeshData;
private expandedMeshes: ExpandedMeshData;
private glyphStore!: GlyphStore;
private baseMeshes!: PathfinderMeshData;
private expandedMeshes!: ExpandedMeshData;
private fontSizeInput: HTMLInputElement;
private characterInput: HTMLInputElement;
private referenceRendererSelect: HTMLSelectElement;
private fontSizeInput!: HTMLInputElement;
private characterInput!: HTMLInputElement;
private referenceRendererSelect!: HTMLSelectElement;
private differenceCanvas: HTMLCanvasElement;
private differenceCanvas!: HTMLCanvasElement;
private aaLevelGroup: HTMLElement;
private aaLevelGroup!: HTMLElement;
private customTabs: PerTestType<HTMLElement>;
private customTestForms: PerTestType<HTMLFormElement>;
private selectFileGroups: PerTestType<HTMLElement>;
private runTestsButtons: PerTestType<HTMLButtonElement>;
private ssimGroups: PerTestType<HTMLElement>;
private ssimLabels: PerTestType<HTMLElement>;
private resultsTables: PerTestType<HTMLTableElement>;
private customTabs!: PerTestType<HTMLElement>;
private customTestForms!: PerTestType<HTMLFormElement>;
private selectFileGroups!: PerTestType<HTMLElement>;
private runTestsButtons!: PerTestType<HTMLButtonElement>;
private ssimGroups!: PerTestType<HTMLElement>;
private ssimLabels!: PerTestType<HTMLElement>;
private resultsTables!: PerTestType<HTMLTableElement>;
private currentTestGroupIndex: number | null;
private currentTestCaseIndex: number | null;
private currentGlobalTestCaseIndex: number | null;
private currentTestGroupIndex: number | null = null;
private currentTestCaseIndex: number | null = null;
private currentGlobalTestCaseIndex: number | null = null;
get currentFontSize(): number {
return parseInt(this.fontSizeInput.value, 10);
@ -583,7 +583,7 @@ class ReferenceTestAppController extends DemoAppController<ReferenceTestView> {
}
class ReferenceTestView extends DemoView {
renderer: ReferenceTestTextRenderer | ReferenceTestSVGRenderer;
renderer!: ReferenceTestTextRenderer | ReferenceTestSVGRenderer;
readonly appController: ReferenceTestAppController;
get camera(): OrthographicCamera {
@ -656,7 +656,7 @@ class ReferenceTestView extends DemoView {
}
class ReferenceTestTextRenderer extends Renderer {
renderContext: ReferenceTestView;
renderContext!: ReferenceTestView;
camera: OrthographicCamera;
needsStencil: boolean = false;
@ -823,7 +823,7 @@ class ReferenceTestTextRenderer extends Renderer {
}
class ReferenceTestSVGRenderer extends SVGRenderer {
renderContext: ReferenceTestView;
renderContext!: ReferenceTestView;
protected get loader(): SVGLoader {
return this.renderContext.appController.svgLoader;

View File

@ -90,14 +90,14 @@ export abstract class Renderer {
protected abstract get usedSizeFactor(): glmatrix.vec2;
protected abstract get worldTransform(): glmatrix.mat4;
private implicitCoverInteriorVAO: WebGLVertexArrayObjectOES | null;
private implicitCoverCurveVAO: WebGLVertexArrayObjectOES | null;
private implicitCoverInteriorVAO: WebGLVertexArrayObjectOES | null = null;
private implicitCoverCurveVAO: WebGLVertexArrayObjectOES | null = null;
private gammaLUTTexture: WebGLTexture | null;
private gammaLUTTexture: WebGLTexture | null = null;
private instancedPathIDVBO: WebGLBuffer | null;
private vertexIDVBO: WebGLBuffer | null;
private timerQueryPollInterval: number | null;
private instancedPathIDVBO: WebGLBuffer | null = null;
private vertexIDVBO: WebGLBuffer | null = null;
private timerQueryPollInterval: number | null = null;
constructor(renderContext: RenderContext) {
this.renderContext = renderContext;

View File

@ -122,8 +122,8 @@ interface ShaderProgramURLs {
}
export class ShaderLoader {
common: Promise<string>;
shaders: Promise<ShaderMap<ShaderProgramSource>>;
common!: Promise<string>;
shaders!: Promise<ShaderMap<ShaderProgramSource>>;
load(): void {
this.common = window.fetch(COMMON_SHADER_URL).then(response => response.text());

View File

@ -33,9 +33,9 @@ export default class SSAAStrategy extends AntialiasingStrategy {
private destFramebufferSize: glmatrix.vec2;
private supersampledFramebufferSize: glmatrix.vec2;
private supersampledColorTexture: WebGLTexture;
private supersampledDepthTexture: WebGLTexture;
private supersampledFramebuffer: WebGLFramebuffer;
private supersampledColorTexture!: WebGLTexture;
private supersampledDepthTexture!: WebGLTexture;
private supersampledFramebuffer!: WebGLFramebuffer;
constructor(level: number, subpixelAA: SubpixelAAType) {
super();

View File

@ -26,11 +26,11 @@ const SVG_NS: string = "http://www.w3.org/2000/svg";
const DEFAULT_FILE: string = 'tiger';
class SVGDemoController extends DemoAppController<SVGDemoView> {
loader: SVGLoader;
loader!: SVGLoader;
protected readonly builtinFileURI: string = BUILTIN_SVG_URI;
private meshes: PathfinderMeshData;
private meshes!: PathfinderMeshData;
start() {
super.start();
@ -93,7 +93,7 @@ class SVGDemoView extends DemoView {
}
class SVGDemoRenderer extends SVGRenderer {
renderContext: SVGDemoView;
renderContext!: SVGDemoView;
needsStencil: boolean = false;

View File

@ -99,7 +99,7 @@ export class SVGLoader {
isMonochrome: boolean;
private svg: SVGSVGElement;
private fileData: ArrayBuffer;
private fileData!: ArrayBuffer;
private paths: any[];
private clipPathIDs: ClipPathIDTable;
@ -108,7 +108,10 @@ export class SVGLoader {
this.scale = 1.0;
this.pathInstances = [];
this.pathBounds = [];
this.paths = [];
this.clipPathIDs = {};
this.svgBounds = glmatrix.vec4.create();
this.svgViewBox = glmatrix.vec4.create();
this.svg = unwrapNull(document.getElementById('pf-svg')) as Element as SVGSVGElement;
this.isMonochrome = false;
}

View File

@ -42,7 +42,7 @@ export interface SVGRendererOptions {
}
export abstract class SVGRenderer extends Renderer {
renderContext: RenderContext;
renderContext!: RenderContext;
camera: OrthographicCamera;
@ -95,10 +95,12 @@ export abstract class SVGRenderer extends Renderer {
this.options = options;
this.camera = new OrthographicCamera(this.canvas, {
// FIXME(pcwalton): Get the canvas a better way?
this.camera = new OrthographicCamera((this as any).canvas, {
fixed: !!this.options.fixed,
scaleBounds: true,
});
this.camera.onPan = () => this.renderContext.setDirty();
this.camera.onZoom = () => this.renderContext.setDirty();
this.camera.onRotate = () => this.renderContext.setDirty();

View File

@ -120,24 +120,24 @@ declare module 'opentype.js' {
}
class TextDemoController extends DemoAppController<TextDemoView> {
font: PathfinderFont;
layout: SimpleTextLayout;
glyphStore: GlyphStore;
atlasGlyphs: AtlasGlyph[];
font!: PathfinderFont;
layout!: SimpleTextLayout;
glyphStore!: GlyphStore;
atlasGlyphs!: AtlasGlyph[];
private hintingSelect: HTMLSelectElement;
private emboldenInput: HTMLInputElement;
private hintingSelect!: HTMLSelectElement;
private emboldenInput!: HTMLInputElement;
private editTextModal: HTMLElement;
private editTextArea: HTMLTextAreaElement;
private editTextModal!: HTMLElement;
private editTextArea!: HTMLTextAreaElement;
private _atlas: Atlas;
private meshes: PathfinderMeshData;
private meshes!: PathfinderMeshData;
private _fontSize: number;
private _rotationAngle: number;
private _emboldenAmount: number;
private _fontSize!: number;
private _rotationAngle!: number;
private _emboldenAmount!: number;
private text: string;
@ -440,13 +440,13 @@ class TextDemoView extends DemoView implements TextRenderContext {
}
class TextDemoRenderer extends TextRenderer {
renderContext: TextDemoView;
renderContext!: TextDemoView;
glyphPositionsBuffer: WebGLBuffer;
glyphTexCoordsBuffer: WebGLBuffer;
glyphElementsBuffer: WebGLBuffer;
glyphPositionsBuffer!: WebGLBuffer;
glyphTexCoordsBuffer!: WebGLBuffer;
glyphElementsBuffer!: WebGLBuffer;
private glyphBounds: Float32Array;
private glyphBounds!: Float32Array;
get layout(): SimpleTextLayout {
return this.renderContext.appController.layout;

View File

@ -58,12 +58,12 @@ export interface TextRenderContext extends RenderContext {
}
export abstract class TextRenderer extends Renderer {
renderContext: TextRenderContext;
renderContext!: TextRenderContext;
camera: OrthographicCamera;
atlasFramebuffer: WebGLFramebuffer;
atlasDepthTexture: WebGLTexture;
atlasFramebuffer!: WebGLFramebuffer;
atlasDepthTexture!: WebGLTexture;
get isMulticolor(): boolean {
return false;
@ -142,8 +142,8 @@ export abstract class TextRenderer extends Renderer {
return glmatrix.vec2.create();
}
private stemDarkening: StemDarkeningMode;
private subpixelAA: SubpixelAAType;
private stemDarkening!: StemDarkeningMode;
private subpixelAA!: SubpixelAAType;
constructor(renderContext: TextRenderContext) {
super(renderContext);

View File

@ -63,6 +63,7 @@ export abstract class PathfinderView {
constructor() {
this.dirty = false;
this.pulseHandle = 0;
this.suppressAutomaticRedraw = false;
this.canvas = unwrapNull(document.getElementById('pf-canvas')) as HTMLCanvasElement;
window.addEventListener('resize', () => this.resizeToFit(false), false);
@ -137,24 +138,24 @@ export abstract class PathfinderView {
}
export abstract class DemoView extends PathfinderView implements RenderContext {
readonly renderer: Renderer;
readonly renderer!: Renderer;
gl: WebGLRenderingContext;
gl!: WebGLRenderingContext;
shaderPrograms: ShaderMap<PathfinderShaderProgram>;
gammaLUT: HTMLImageElement;
instancedArraysExt: ANGLEInstancedArrays;
textureHalfFloatExt: OESTextureHalfFloat;
timerQueryExt: EXTDisjointTimerQuery;
vertexArrayObjectExt: OESVertexArrayObject;
instancedArraysExt!: ANGLE_instanced_arrays;
textureHalfFloatExt!: OESTextureHalfFloat;
timerQueryExt!: EXTDisjointTimerQuery;
vertexArrayObjectExt!: OESVertexArrayObject;
quadPositionsBuffer: WebGLBuffer;
quadTexCoordsBuffer: WebGLBuffer;
quadElementsBuffer: WebGLBuffer;
quadPositionsBuffer!: WebGLBuffer;
quadTexCoordsBuffer!: WebGLBuffer;
quadElementsBuffer!: WebGLBuffer;
atlasRenderingTimerQuery: WebGLQuery;
compositingTimerQuery: WebGLQuery;
atlasRenderingTimerQuery!: WebGLQuery;
compositingTimerQuery!: WebGLQuery;
meshes: PathfinderMeshBuffers[];
meshData: PathfinderMeshData[];
@ -179,6 +180,9 @@ export abstract class DemoView extends PathfinderView implements RenderContext {
shaderSources: ShaderMap<ShaderProgramSource>) {
super();
this.meshes = [];
this.meshData = [];
this.initContext();
const shaderSource = this.compileShaders(commonShaderSource, shaderSources);
@ -266,10 +270,10 @@ export abstract class DemoView extends PathfinderView implements RenderContext {
this.gl = expectNotNull(this.canvas.getContext('webgl', { antialias: false, depth: true }),
"Failed to initialize WebGL! Check that your browser supports it.");
this.colorBufferHalfFloatExt = this.gl.getExtension('EXT_color_buffer_half_float');
this.instancedArraysExt = this.gl.getExtension('ANGLE_instanced_arrays');
this.textureHalfFloatExt = this.gl.getExtension('OES_texture_half_float');
this.instancedArraysExt = unwrapNull(this.gl.getExtension('ANGLE_instanced_arrays'));
this.textureHalfFloatExt = unwrapNull(this.gl.getExtension('OES_texture_half_float'));
this.timerQueryExt = this.gl.getExtension('EXT_disjoint_timer_query');
this.vertexArrayObjectExt = this.gl.getExtension('OES_vertex_array_object');
this.vertexArrayObjectExt = unwrapNull(this.gl.getExtension('OES_vertex_array_object'));
this.gl.getExtension('EXT_frag_depth');
this.gl.getExtension('OES_element_index_uint');
this.gl.getExtension('OES_standard_derivatives');

View File

@ -49,8 +49,8 @@ export type TransformType = 'dilation' | 'affine' | '3d';
export abstract class XCAAStrategy extends AntialiasingStrategy {
abstract readonly directRenderingMode: DirectRenderingMode;
protected patchVertexBuffer: WebGLBuffer | null;
protected patchIndexBuffer: WebGLBuffer | null;
protected patchVertexBuffer: WebGLBuffer | null = null;
protected patchIndexBuffer: WebGLBuffer | null = null;
get passCount(): number {
return 1;
@ -69,9 +69,9 @@ export abstract class XCAAStrategy extends AntialiasingStrategy {
protected resolveVAO: WebGLVertexArrayObject | null;
protected aaAlphaTexture: WebGLTexture | null;
protected aaDepthTexture: WebGLTexture | null;
protected aaFramebuffer: WebGLFramebuffer | null;
protected aaAlphaTexture: WebGLTexture | null = null;
protected aaDepthTexture: WebGLTexture | null = null;
protected aaFramebuffer: WebGLFramebuffer | null = null;
protected abstract get mightUseAAFramebuffer(): boolean;
@ -82,6 +82,8 @@ export abstract class XCAAStrategy extends AntialiasingStrategy {
this.supersampledFramebufferSize = glmatrix.vec2.create();
this.destFramebufferSize = glmatrix.vec2.create();
this.pathBoundsBufferTextures = [];
}
init(renderer: Renderer): void {