Fix zoomed-in rotation for text by taking extended path transforms into

account in the MCAA shader.
This commit is contained in:
Patrick Walton 2018-02-21 17:00:37 -08:00
parent dfcbd9dddd
commit 48aceb6291
2 changed files with 11 additions and 7 deletions

View File

@ -44,7 +44,7 @@ const PATCH_VERTICES: Float32Array = new Float32Array([
const MCAA_PATCH_INDICES: Uint8Array = new Uint8Array([0, 1, 2, 1, 3, 2]); const MCAA_PATCH_INDICES: Uint8Array = new Uint8Array([0, 1, 2, 1, 3, 2]);
export type TransformType = 'dilation' | 'affine' | '3d'; export type TransformType = 'affine' | '3d';
export abstract class XCAAStrategy extends AntialiasingStrategy { export abstract class XCAAStrategy extends AntialiasingStrategy {
abstract readonly directRenderingMode: DirectRenderingMode; abstract readonly directRenderingMode: DirectRenderingMode;
@ -258,9 +258,6 @@ export abstract class XCAAStrategy extends AntialiasingStrategy {
const gl = renderContext.gl; const gl = renderContext.gl;
switch (this.transformType) { switch (this.transformType) {
case 'dilation':
renderer.setTransformSTUniform(uniforms, 0);
break;
case 'affine': case 'affine':
renderer.setTransformAffineUniforms(uniforms, 0); renderer.setTransformAffineUniforms(uniforms, 0);
break; break;
@ -396,7 +393,6 @@ export class MCAAStrategy extends XCAAStrategy {
const gl = renderContext.gl; const gl = renderContext.gl;
this.vao = renderContext.vertexArrayObjectExt.createVertexArrayOES(); this.vao = renderContext.vertexArrayObjectExt.createVertexArrayOES();
} }
antialiasObject(renderer: Renderer, objectIndex: number): void { antialiasObject(renderer: Renderer, objectIndex: number): void {

View File

@ -43,6 +43,8 @@ uniform ivec2 uFramebufferSize;
uniform ivec2 uPathTransformSTDimensions; uniform ivec2 uPathTransformSTDimensions;
/// The path transform buffer texture, one dilation per path ID. /// The path transform buffer texture, one dilation per path ID.
uniform sampler2D uPathTransformST; uniform sampler2D uPathTransformST;
uniform ivec2 uPathTransformExtDimensions;
uniform sampler2D uPathTransformExt;
/// The size of the path colors buffer texture in texels. /// The size of the path colors buffer texture in texels.
uniform ivec2 uPathColorsDimensions; uniform ivec2 uPathColorsDimensions;
/// The path colors buffer texture, one color per path ID. /// The path colors buffer texture, one color per path ID.
@ -75,10 +77,16 @@ void main() {
else else
color = vec4(1.0); color = vec4(1.0);
vec4 transformST = fetchFloat4Data(uPathTransformST, pathID, uPathTransformSTDimensions); vec2 transformExt;
vec4 transformST = fetchPathAffineTransform(transformExt,
uPathTransformST,
uPathTransformSTDimensions,
uPathTransformExt,
uPathTransformExtDimensions,
pathID);
mat2 globalTransformLinear = mat2(uTransformST.x, uTransformExt, uTransformST.y); mat2 globalTransformLinear = mat2(uTransformST.x, uTransformExt, uTransformST.y);
mat2 localTransformLinear = mat2(transformST.x, 0.0, 0.0, transformST.y); mat2 localTransformLinear = mat2(transformST.x, -transformExt, transformST.y);
mat2 rectTransformLinear = mat2(aRect.z - aRect.x, 0.0, 0.0, aRect.w - aRect.y); mat2 rectTransformLinear = mat2(aRect.z - aRect.x, 0.0, 0.0, aRect.w - aRect.y);
mat2 transformLinear = globalTransformLinear * localTransformLinear * rectTransformLinear; mat2 transformLinear = globalTransformLinear * localTransformLinear * rectTransformLinear;