From 62a42c13a6e86255a0118688a60c9248030c95a9 Mon Sep 17 00:00:00 2001 From: Chris Craik Date: Fri, 15 Feb 2013 11:58:14 -0800 Subject: [PATCH] Adjust offset for non-AA line drawing bug:8114304 The original .375 was chosen to make GL_LINES align with Skia drawing. The new value of .065 is chosen to be as small as possible to make triangle-based lines align with Skia, while keeping lines drawn on integer coordinates unambiguous as to which column/row they draw on. Also adds more lines in CanvasCompare test to highlight the difference Change-Id: If578684f2db320682219c3caa625cf79bc62d88f --- libs/hwui/Program.cpp | 2 +- .../test/hwuicompare/DisplayModifier.java | 35 ++++++++++++++++--- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/libs/hwui/Program.cpp b/libs/hwui/Program.cpp index f0b5553a79a74..14a23765b301b 100644 --- a/libs/hwui/Program.cpp +++ b/libs/hwui/Program.cpp @@ -160,7 +160,7 @@ void Program::set(const mat4& projectionMatrix, const mat4& modelViewMatrix, // up and to the left. // This offset value is based on an assumption that some hardware may use as // little as 12.4 precision, so we offset by slightly more than 1/16. - p.translate(.375, .375, 0); + p.translate(.065, .065, 0); } mat4 t(transformMatrix); diff --git a/tests/CanvasCompare/src/com/android/test/hwuicompare/DisplayModifier.java b/tests/CanvasCompare/src/com/android/test/hwuicompare/DisplayModifier.java index fb818d480c61c..9939c0826b825 100644 --- a/tests/CanvasCompare/src/com/android/test/hwuicompare/DisplayModifier.java +++ b/tests/CanvasCompare/src/com/android/test/hwuicompare/DisplayModifier.java @@ -41,13 +41,40 @@ public abstract class DisplayModifier { protected int mask() { return 0x0; }; private static final RectF gRect = new RectF(0, 0, 200, 175); - private static final float[] gLinePts = new float[] { - 100, 0, 200, 200, 200, 200, 0, 200, 0, 200, 100, 0 - }; private static final float[] gPts = new float[] { 0, 100, 100, 0, 100, 200, 200, 100 }; + private static final int NUM_PARALLEL_LINES = 24; + private static final float[] gTriPts = new float[] { + 75, 0, 130, 130, 130, 130, 0, 130, 0, 130, 75, 0 + }; + private static final float[] gLinePts = new float[NUM_PARALLEL_LINES * 8 + gTriPts.length]; + static { + int index; + for (index = 0; index < gTriPts.length; index++) { + gLinePts[index] = gTriPts[index]; + } + float val = 0; + for (int i = 0; i < NUM_PARALLEL_LINES; i++) { + gLinePts[index + 0] = 150; + gLinePts[index + 1] = val; + gLinePts[index + 2] = 300; + gLinePts[index + 3] = val; + index += 4; + val += 8 + (2.0f/NUM_PARALLEL_LINES); + } + val = 0; + for (int i = 0; i < NUM_PARALLEL_LINES; i++) { + gLinePts[index + 0] = val; + gLinePts[index + 1] = 150; + gLinePts[index + 2] = val; + gLinePts[index + 3] = 300; + index += 4; + val += 8 + (2.0f/NUM_PARALLEL_LINES); + } + }; + @SuppressWarnings("serial") private static final LinkedHashMap> gMaps = new LinkedHashMap>() { { @@ -307,7 +334,7 @@ public abstract class DisplayModifier { canvas.drawOval(gRect, paint); } }); - put("triLines", new DisplayModifier() { + put("lines", new DisplayModifier() { @Override public void modifyDrawing(Paint paint, Canvas canvas) { canvas.drawLines(gLinePts, paint);