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++;
}
}