diff --git a/demo/client/html/benchmark.html.hbs b/demo/client/html/benchmark.html.hbs index 3958252d..0ea43734 100644 --- a/demo/client/html/benchmark.html.hbs +++ b/demo/client/html/benchmark.html.hbs @@ -19,7 +19,7 @@ - + diff --git a/demo/client/src/benchmark.ts b/demo/client/src/benchmark.ts index 285d54b9..b2fdc76f 100644 --- a/demo/client/src/benchmark.ts +++ b/demo/client/src/benchmark.ts @@ -280,7 +280,7 @@ class BenchmarkTestView extends MonochromePathfinderView { private _pixelsPerEm: number = 32.0; - readonly bgColor: glmatrix.vec4 = glmatrix.vec4.clone([1.0, 1.0, 1.0, 1.0]); + readonly bgColor: glmatrix.vec4 = glmatrix.vec4.clone([1.0, 1.0, 1.0, 0.0]); readonly fgColor: glmatrix.vec4 = glmatrix.vec4.clone([0.0, 0.0, 0.0, 1.0]); protected directCurveProgramName: keyof ShaderMap = 'directCurve'; diff --git a/demo/client/src/ecaa-strategy.ts b/demo/client/src/ecaa-strategy.ts index 657b1def..1f07cc18 100644 --- a/demo/client/src/ecaa-strategy.ts +++ b/demo/client/src/ecaa-strategy.ts @@ -402,7 +402,10 @@ export abstract class ECAAStrategy extends AntialiasingStrategy { view.gl.enable(view.gl.SCISSOR_TEST); this.setResolveDepthState(view); view.gl.disable(view.gl.BLEND); - view.drawBuffersExt.drawBuffersWEBGL([view.drawBuffersExt.COLOR_ATTACHMENT0_WEBGL]); + if (view.destFramebuffer != null) + view.drawBuffersExt.drawBuffersWEBGL([view.drawBuffersExt.COLOR_ATTACHMENT0_WEBGL]); + else + view.drawBuffersExt.drawBuffersWEBGL([view.gl.BACK]); // Clear out the resolve buffer, if necessary. this.clearForResolve(view); @@ -428,7 +431,9 @@ export abstract class ECAAStrategy extends AntialiasingStrategy { view.gl.disable(view.gl.DEPTH_TEST); } - protected setResolveDepthState(view: MonochromePathfinderView): void {} + protected setResolveDepthState(view: MonochromePathfinderView): void { + view.gl.disable(view.gl.DEPTH_TEST); + } protected supersampledUsedSize(view: MonochromePathfinderView): glmatrix.vec2 { const usedSize = glmatrix.vec2.create(); diff --git a/demo/client/src/text.ts b/demo/client/src/text.ts index d824a7ff..43439623 100644 --- a/demo/client/src/text.ts +++ b/demo/client/src/text.ts @@ -84,12 +84,23 @@ export class TextFrame { const bVertexPathIDs = new Uint16Array(meshes.bVertexPathIDs); const bVertexLoopBlinnData = new Uint32Array(meshes.bVertexLoopBlinnData); + const edgeUpperCurveIndices = new Uint32Array(meshes.edgeUpperCurveIndices); + const edgeLowerCurveIndices = new Uint32Array(meshes.edgeLowerCurveIndices); + for (let indexIndex = 3; indexIndex < edgeUpperCurveIndices.length; indexIndex += 4) + edgeUpperCurveIndices[indexIndex] = 0; + for (let indexIndex = 3; indexIndex < edgeLowerCurveIndices.length; indexIndex += 4) + edgeLowerCurveIndices[indexIndex] = 0; + const expandedBQuads: number[] = []; const expandedBVertexPositions: number[] = []; const expandedBVertexPathIDs: number[] = []; const expandedBVertexLoopBlinnData: number[] = []; const expandedCoverInteriorIndices: number[] = []; const expandedCoverCurveIndices: number[] = []; + const expandedEdgeUpperCurveIndices: number[] = []; + const expandedEdgeUpperLineIndices: number[] = []; + const expandedEdgeLowerCurveIndices: number[] = []; + const expandedEdgeLowerLineIndices: number[] = []; let textGlyphIndex = 0; for (const textRun of this.runs) { @@ -125,6 +136,29 @@ export class TextFrame { firstBVertexIndex, bVertexIndex); + copyIndices(expandedEdgeUpperLineIndices, + new Uint32Array(meshes.edgeUpperLineIndices), + firstExpandedBVertexIndex, + firstBVertexIndex, + bVertexIndex); + copyIndices(expandedEdgeUpperCurveIndices, + new Uint32Array(edgeUpperCurveIndices), + firstExpandedBVertexIndex, + firstBVertexIndex, + bVertexIndex, + indexIndex => indexIndex % 4 < 3); + copyIndices(expandedEdgeLowerLineIndices, + new Uint32Array(meshes.edgeLowerLineIndices), + firstExpandedBVertexIndex, + firstBVertexIndex, + bVertexIndex); + copyIndices(expandedEdgeLowerCurveIndices, + new Uint32Array(edgeLowerCurveIndices), + firstExpandedBVertexIndex, + firstBVertexIndex, + bVertexIndex, + indexIndex => indexIndex % 4 < 3); + // Copy over B-quads. let firstBQuadIndex = _.findIndex(bQuads, bQuad => bVertexPathIDs[bQuad[0]] == uniqueGlyphIndex + 1); @@ -159,10 +193,14 @@ export class TextFrame { ArrayBuffer, coverCurveIndices: new Uint32Array(expandedCoverCurveIndices).buffer as ArrayBuffer, - edgeUpperCurveIndices: new ArrayBuffer(0), - edgeUpperLineIndices: new ArrayBuffer(0), - edgeLowerCurveIndices: new ArrayBuffer(0), - edgeLowerLineIndices: new ArrayBuffer(0), + edgeUpperCurveIndices: new Uint32Array(expandedEdgeUpperCurveIndices).buffer as + ArrayBuffer, + edgeUpperLineIndices: new Uint32Array(expandedEdgeUpperLineIndices).buffer as + ArrayBuffer, + edgeLowerCurveIndices: new Uint32Array(expandedEdgeLowerCurveIndices).buffer as + ArrayBuffer, + edgeLowerLineIndices: new Uint32Array(expandedEdgeLowerLineIndices).buffer as + ArrayBuffer, }) } } @@ -423,18 +461,28 @@ function copyIndices(destIndices: number[], srcIndices: Uint32Array, firstExpandedIndex: number, firstIndex: number, - lastIndex: number) { + lastIndex: number, + validateIndex?: (indexIndex: number) => boolean) { + if (firstIndex === lastIndex) + return; + // FIXME(pcwalton): Use binary search instead of linear search. - const indexDelta = firstExpandedIndex - firstIndex; - let indexIndex = _.findIndex(srcIndices, - srcIndex => srcIndex >= firstIndex && srcIndex < lastIndex); + let indexIndex = _.findIndex(srcIndices, srcIndex => { + return srcIndex >= firstIndex && srcIndex < lastIndex; + }); if (indexIndex < 0) return; + + const indexDelta = firstExpandedIndex - firstIndex; while (indexIndex < srcIndices.length) { const index = srcIndices[indexIndex]; - if (index < firstIndex || index >= lastIndex) - break; - destIndices.push(index + indexDelta); + if (validateIndex == null || validateIndex(indexIndex)) { + if (index < firstIndex || index >= lastIndex) + break; + destIndices.push(index + indexDelta); + } else { + destIndices.push(index); + } indexIndex++; } }