| Index: src/gpu/GrContext.cpp
|
| ===================================================================
|
| --- src/gpu/GrContext.cpp (revision 8570)
|
| +++ src/gpu/GrContext.cpp (working copy)
|
| @@ -682,7 +682,7 @@
|
|
|
| static bool apply_aa_to_rect(GrDrawTarget* target,
|
| const GrRect& rect,
|
| - SkScalar width,
|
| + SkScalar strokeWidth,
|
| const SkMatrix* matrix,
|
| SkMatrix* combinedMatrix,
|
| GrRect* devRect,
|
| @@ -711,29 +711,54 @@
|
| return false;
|
| }
|
|
|
| - if (0 == width && target->willUseHWAALines()) {
|
| + if (0 == strokeWidth && target->willUseHWAALines()) {
|
| return false;
|
| }
|
|
|
| - if (!drawState.getViewMatrix().preservesAxisAlignment()) {
|
| - return false;
|
| - }
|
| +#ifdef SHADER_AA_FILL_RECT
|
| + if (strokeWidth >= 0) {
|
| +#endif
|
| + if (!drawState.getViewMatrix().preservesAxisAlignment()) {
|
| + return false;
|
| + }
|
|
|
| - if (NULL != matrix &&
|
| - !matrix->preservesAxisAlignment()) {
|
| - return false;
|
| + if (NULL != matrix && !matrix->preservesAxisAlignment()) {
|
| + return false;
|
| + }
|
| +#ifdef SHADER_AA_FILL_RECT
|
| + } else {
|
| + if (!drawState.getViewMatrix().preservesAxisAlignment() &&
|
| + !drawState.getViewMatrix().preservesRightAngles()) {
|
| + return false;
|
| + }
|
| +
|
| + if (NULL != matrix && !matrix->preservesRightAngles()) {
|
| + return false;
|
| + }
|
| }
|
| +#endif
|
|
|
| *combinedMatrix = drawState.getViewMatrix();
|
| if (NULL != matrix) {
|
| combinedMatrix->preConcat(*matrix);
|
| - GrAssert(combinedMatrix->preservesAxisAlignment());
|
| +
|
| +#if GR_DEBUG
|
| +#ifdef SHADER_AA_FILL_RECT
|
| + if (strokeWidth >= 0) {
|
| +#endif
|
| + GrAssert(combinedMatrix->preservesAxisAlignment());
|
| +#ifdef SHADER_AA_FILL_RECT
|
| + } else {
|
| + GrAssert(combinedMatrix->preservesRightAngles());
|
| + }
|
| +#endif
|
| +#endif
|
| }
|
|
|
| combinedMatrix->mapRect(devRect, rect);
|
| devRect->sort();
|
|
|
| - if (width < 0) {
|
| + if (strokeWidth < 0) {
|
| return !isIRect(*devRect);
|
| } else {
|
| return true;
|
| @@ -757,7 +782,6 @@
|
| bool doAA = needAA && apply_aa_to_rect(target, rect, width, matrix,
|
| &combinedMatrix, &devRect,
|
| &useVertexCoverage);
|
| -
|
| if (doAA) {
|
| GrDrawState::AutoDeviceCoordDraw adcd(target->drawState());
|
| if (!adcd.succeeded()) {
|
| @@ -773,10 +797,17 @@
|
| strokeSize.set(SK_Scalar1, SK_Scalar1);
|
| }
|
| fAARectRenderer->strokeAARect(this->getGpu(), target, devRect,
|
| - strokeSize, useVertexCoverage);
|
| + strokeSize, useVertexCoverage);
|
| } else {
|
| + // filled AA rect
|
| +#ifdef SHADER_AA_FILL_RECT
|
| + fAARectRenderer->shaderFillAARect(this->getGpu(), target,
|
| + rect, combinedMatrix, devRect,
|
| + useVertexCoverage);
|
| +#else
|
| fAARectRenderer->fillAARect(this->getGpu(), target,
|
| - devRect, useVertexCoverage);
|
| + devRect, useVertexCoverage);
|
| +#endif
|
| }
|
| return;
|
| }
|
| @@ -822,6 +853,7 @@
|
|
|
| target->drawNonIndexed(primType, 0, vertCount);
|
| } else {
|
| + // filled BW rect
|
| #if GR_STATIC_RECT_VB
|
| const GrVertexBuffer* sqVB = fGpu->getUnitSquareVertexBuffer();
|
| if (NULL == sqVB) {
|
|
|