Michael Ludwig | 0f80902 | 2019-06-04 09:14:37 -0400 | [diff] [blame] | 1 | /* |
| 2 | * Copyright 2019 Google LLC |
| 3 | * |
| 4 | * Use of this source code is governed by a BSD-style license that can be |
| 5 | * found in the LICENSE file. |
| 6 | */ |
| 7 | |
| 8 | #include "src/gpu/geometry/GrQuadUtils.h" |
| 9 | |
| 10 | #include "include/private/GrTypesPriv.h" |
| 11 | #include "src/gpu/geometry/GrQuad.h" |
| 12 | |
| 13 | namespace GrQuadUtils { |
| 14 | |
| 15 | void ResolveAAType(GrAAType requestedAAType, GrQuadAAFlags requestedEdgeFlags, const GrQuad& quad, |
| 16 | GrAAType* outAAType, GrQuadAAFlags* outEdgeFlags) { |
| 17 | // Most cases will keep the requested types unchanged |
| 18 | *outAAType = requestedAAType; |
| 19 | *outEdgeFlags = requestedEdgeFlags; |
| 20 | |
| 21 | switch (requestedAAType) { |
| 22 | // When aa type is coverage, disable AA if the edge configuration doesn't actually need it |
| 23 | case GrAAType::kCoverage: |
| 24 | if (requestedEdgeFlags == GrQuadAAFlags::kNone) { |
| 25 | // Turn off anti-aliasing |
| 26 | *outAAType = GrAAType::kNone; |
| 27 | } else { |
| 28 | // For coverage AA, if the quad is a rect and it lines up with pixel boundaries |
| 29 | // then overall aa and per-edge aa can be completely disabled |
| 30 | if (quad.quadType() == GrQuad::Type::kAxisAligned && !quad.aaHasEffectOnRect()) { |
| 31 | *outAAType = GrAAType::kNone; |
| 32 | *outEdgeFlags = GrQuadAAFlags::kNone; |
| 33 | } |
| 34 | } |
| 35 | break; |
| 36 | // For no or msaa anti aliasing, override the edge flags since edge flags only make sense |
| 37 | // when coverage aa is being used. |
| 38 | case GrAAType::kNone: |
| 39 | *outEdgeFlags = GrQuadAAFlags::kNone; |
| 40 | break; |
| 41 | case GrAAType::kMSAA: |
| 42 | *outEdgeFlags = GrQuadAAFlags::kAll; |
| 43 | break; |
| 44 | case GrAAType::kMixedSamples: |
| 45 | SK_ABORT("Should not use mixed sample AA with edge AA flags"); |
| 46 | break; |
| 47 | } |
Brian Salomon | 7694b90 | 2019-06-18 21:00:21 +0000 | [diff] [blame] | 48 | }; |
Michael Ludwig | 0f80902 | 2019-06-04 09:14:37 -0400 | [diff] [blame] | 49 | |
| 50 | }; // namespace GrQuadUtils |