aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar robertphillips@google.com <robertphillips@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-05-28 13:16:20 +0000
committerGravatar robertphillips@google.com <robertphillips@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-05-28 13:16:20 +0000
commit908aed802566db64212b9ff802a2b5119c7a0be0 (patch)
tree2afb889b328301b97a708cbb16710c542689d412 /src
parentc7d624ec535adcc388cad35b3475872b08cd90c0 (diff)
Decrease GPU drawn brightness for < 1 pixel wide/high rects
Diffstat (limited to 'src')
-rw-r--r--src/gpu/GrAARectRenderer.cpp22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/gpu/GrAARectRenderer.cpp b/src/gpu/GrAARectRenderer.cpp
index d13a12d23e..f28d914563 100644
--- a/src/gpu/GrAARectRenderer.cpp
+++ b/src/gpu/GrAARectRenderer.cpp
@@ -10,6 +10,7 @@
#include "GrGpu.h"
#include "gl/GrGLEffect.h"
#include "GrTBackendEffectFactory.h"
+#include "SkColorPriv.h"
SK_DEFINE_INST_COUNT(GrAARectRenderer)
@@ -389,6 +390,9 @@ void GrAARectRenderer::geometryFillAARect(GrGpu* gpu,
GrPoint* fan0Pos = reinterpret_cast<GrPoint*>(verts);
GrPoint* fan1Pos = reinterpret_cast<GrPoint*>(verts + 4 * vsize);
+ SkScalar inset = SkMinScalar(devRect.width(), SK_Scalar1);
+ inset = SK_ScalarHalf * SkMinScalar(inset, devRect.height());
+
if (combinedMatrix.rectStaysRect()) {
// Temporarily #if'ed out. We don't want to pass in the devRect but
// right now it is computed in GrContext::apply_aa_to_rect and we don't
@@ -399,7 +403,7 @@ void GrAARectRenderer::geometryFillAARect(GrGpu* gpu,
#endif
set_inset_fan(fan0Pos, vsize, devRect, -SK_ScalarHalf, -SK_ScalarHalf);
- set_inset_fan(fan1Pos, vsize, devRect, SK_ScalarHalf, SK_ScalarHalf);
+ set_inset_fan(fan1Pos, vsize, devRect, inset, inset);
} else {
// compute transformed (1, 0) and (0, 1) vectors
SkVector vec[2] = {
@@ -443,11 +447,23 @@ void GrAARectRenderer::geometryFillAARect(GrGpu* gpu,
*reinterpret_cast<GrColor*>(verts + i * vsize) = 0;
}
+ int scale;
+ if (inset < SK_ScalarHalf) {
+ scale = SkScalarFloorToInt(512.0f * inset / (inset + SK_ScalarHalf));
+ SkASSERT(scale >= 0 && scale <= 255);
+ } else {
+ scale = 0xff;
+ }
+
GrColor innerColor;
if (useVertexCoverage) {
- innerColor = 0xffffffff;
+ innerColor = scale | (scale << 8) | (scale << 16) | (scale << 24);
} else {
- innerColor = target->getDrawState().getColor();
+ if (0xff == scale) {
+ innerColor = target->getDrawState().getColor();
+ } else {
+ innerColor = SkAlphaMulQ(target->getDrawState().getColor(), scale);
+ }
}
verts += 4 * vsize;