Fix zoomed-in rotation for text by taking extended path transforms into
account in the MCAA shader.
This commit is contained in:
parent
dfcbd9dddd
commit
48aceb6291
|
@ -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 {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue