Index: src/gpu/effects/GrConvexPolyEffect.cpp |
diff --git a/src/gpu/effects/GrConvexPolyEffect.cpp b/src/gpu/effects/GrConvexPolyEffect.cpp |
index cf874cfa52604e1666ddecad3fec720d1063279a..082ea230f961a838b4b0fd9dd717d884a338252b 100644 |
--- a/src/gpu/effects/GrConvexPolyEffect.cpp |
+++ b/src/gpu/effects/GrConvexPolyEffect.cpp |
@@ -5,6 +5,7 @@ |
* found in the LICENSE file. |
*/ |
+#include <effects/GrConstColorProcessor.h> |
egdaniel
2016/03/28 21:42:13
using <...> here?
bsalomon
2016/03/28 21:52:54
Ugh, my IDE inserted this without me realizing it.
|
#include "GrConvexPolyEffect.h" |
#include "GrInvariantOutput.h" |
#include "SkPathPriv.h" |
@@ -254,7 +255,16 @@ GrFragmentProcessor* GrConvexPolyEffect::Create(GrPrimitiveEdgeType type, const |
SkScalar edges[3 * kMaxEdges]; |
SkPathPriv::FirstDirection dir; |
- SkAssertResult(SkPathPriv::CheapComputeFirstDirection(path, &dir)); |
+ // The only way this should fail is if the clip is effectively a infinitely thin line. In that |
+ // case nothing is inside the clip. It'd be nice to detect this at a higher level and either |
+ // skip the draw or omit the clip element. |
+ if (!SkPathPriv::CheapComputeFirstDirection(path, &dir)) { |
+ if (GrProcessorEdgeTypeIsInverseFill(type)) { |
+ return GrConstColorProcessor::Create(0xFFFFFFFF, |
+ GrConstColorProcessor::kModulateRGBA_InputMode); |
+ } |
+ return GrConstColorProcessor::Create(0, GrConstColorProcessor::kIgnore_InputMode); |
+ } |
SkVector t; |
if (nullptr == offset) { |