Index: src/gpu/GrClipStackClip.h |
diff --git a/src/gpu/GrClipMaskManager.h b/src/gpu/GrClipStackClip.h |
similarity index 66% |
rename from src/gpu/GrClipMaskManager.h |
rename to src/gpu/GrClipStackClip.h |
index 5cf35690723a8bf827f0da7b20923ae9bf568262..38f9e2d671a3c16ed3c2bf15b8d4088bd7d5aaf1 100644 |
--- a/src/gpu/GrClipMaskManager.h |
+++ b/src/gpu/GrClipStackClip.h |
@@ -1,50 +1,44 @@ |
/* |
- * Copyright 2012 Google Inc. |
+ * Copyright 2016 Google Inc. |
* |
* Use of this source code is governed by a BSD-style license that can be |
* found in the LICENSE file. |
*/ |
-#ifndef GrClipMaskManager_DEFINED |
-#define GrClipMaskManager_DEFINED |
+#ifndef GrClipStackClip_DEFINED |
+#define GrClipStackClip_DEFINED |
+ |
+#include "GrClip.h" |
#include "GrReducedClip.h" |
#include "SkClipStack.h" |
-#include "SkTypes.h" |
-class GrAppliedClip; |
-class GrClipStackClip; |
-class GrContext; |
-class GrDrawContext; |
-class GrPathRenderer; |
-class GrTexture; |
class GrTextureProvider; |
-class GrUniqueKey; |
- |
+class GrPathRenderer; |
/** |
- * The clip mask creator handles the generation of the clip mask. If anti |
- * aliasing is requested it will (in the future) generate a single channel |
- * (8bit) mask. If no anti aliasing is requested it will generate a 1-bit |
- * mask in the stencil buffer. In the non anti-aliasing case, if the clip |
- * mask can be represented as a rectangle then scissoring is used. In all |
- * cases scissoring is used to bound the range of the clip mask. |
+ * GrClipStackClip can apply a generic SkClipStack to the draw state. It may need to generate an |
+ * 8-bit alpha clip mask and/or modify the stencil buffer during apply(). |
*/ |
-// This has to remain a class, for now, so it can be friended (by GrDrawContext & GrContext) |
-class GrClipMaskManager { |
+class GrClipStackClip final : public GrClip { |
public: |
- /** |
- * Creates a clip mask if necessary as a stencil buffer or alpha texture |
- * and sets the GrGpu's scissor and stencil state. If the return is false |
- * then the draw can be skipped. devBounds is optional but can help optimize |
- * clipping. |
- */ |
- static bool SetupClipping(GrContext*, |
- GrDrawContext*, |
- const GrClipStackClip&, |
- const SkRect* devBounds, |
- bool useHWAA, |
- bool hasUserStencilSettings, |
- GrAppliedClip* out); |
+ GrClipStackClip(const SkClipStack* stack = nullptr, const SkIPoint* origin = nullptr) { |
+ this->reset(stack, origin); |
+ } |
+ |
+ void reset(const SkClipStack* stack = nullptr, const SkIPoint* origin = nullptr) { |
+ fOrigin = origin ? *origin : SkIPoint::Make(0, 0); |
+ fStack.reset(SkSafeRef(stack)); |
+ } |
+ |
+ bool quickContains(const SkRect&) const final; |
+ void getConservativeBounds(int width, int height, SkIRect* devResult, |
+ bool* isIntersectionOfRects) const final; |
+ bool apply(GrContext*, |
+ GrDrawContext*, |
+ const SkRect* devBounds, |
+ bool useHWAA, |
+ bool hasUserStencilSettings, |
+ GrAppliedClip* out) const final; |
private: |
static bool PathNeedsSWRenderer(GrContext* context, |
@@ -89,6 +83,9 @@ private: |
static GrTexture* CreateCachedMask(int width, int height, const GrUniqueKey& key, |
bool renderTarget); |
+ |
+ SkIPoint fOrigin; |
+ SkAutoTUnref<const SkClipStack> fStack; |
}; |
-#endif // GrClipMaskManager_DEFINED |
+#endif // GrClipStackClip_DEFINED |