Move oval and rect renderer includes to private interface
R=bsalomon@google.com, robertphillips@google.com
Review URL: https://codereview.chromium.org/23513016
git-svn-id: http://skia.googlecode.com/svn/trunk@11132 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/GrAARectRenderer.h b/src/gpu/GrAARectRenderer.h
new file mode 100644
index 0000000..607329a
--- /dev/null
+++ b/src/gpu/GrAARectRenderer.h
@@ -0,0 +1,114 @@
+/*
+ * Copyright 2012 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+
+#ifndef GrAARectRenderer_DEFINED
+#define GrAARectRenderer_DEFINED
+
+#include "GrRefCnt.h"
+#include "SkMatrix.h"
+#include "SkRect.h"
+
+class GrGpu;
+class GrDrawTarget;
+class GrIndexBuffer;
+
+/*
+ * This class wraps helper functions that draw AA rects (filled & stroked)
+ */
+class GrAARectRenderer : public GrRefCnt {
+public:
+ SK_DECLARE_INST_COUNT(GrAARectRenderer)
+
+ GrAARectRenderer()
+ : fAAFillRectIndexBuffer(NULL)
+ , fAAStrokeRectIndexBuffer(NULL) {
+ }
+
+ void reset();
+
+ ~GrAARectRenderer() {
+ this->reset();
+ }
+
+ // TODO: potentialy fuse the fill & stroke methods and differentiate
+ // between them by passing in strokeWidth (<0 means fill).
+
+ void fillAARect(GrGpu* gpu,
+ GrDrawTarget* target,
+ const SkRect& rect,
+ const SkMatrix& combinedMatrix,
+ const SkRect& devRect,
+ bool useVertexCoverage) {
+#ifdef SHADER_AA_FILL_RECT
+ if (combinedMatrix.rectStaysRect()) {
+ this->shaderFillAlignedAARect(gpu, target,
+ rect, combinedMatrix);
+ } else {
+ this->shaderFillAARect(gpu, target,
+ rect, combinedMatrix);
+ }
+#else
+ this->geometryFillAARect(gpu, target,
+ rect, combinedMatrix,
+ devRect, useVertexCoverage);
+#endif
+ }
+
+ void strokeAARect(GrGpu* gpu,
+ GrDrawTarget* target,
+ const SkRect& rect,
+ const SkMatrix& combinedMatrix,
+ const SkRect& devRect,
+ SkScalar width,
+ bool useVertexCoverage);
+
+ // First rect is outer; second rect is inner
+ void fillAANestedRects(GrGpu* gpu,
+ GrDrawTarget* target,
+ const SkRect rects[2],
+ const SkMatrix& combinedMatrix,
+ bool useVertexCoverage);
+
+private:
+ GrIndexBuffer* fAAFillRectIndexBuffer;
+ GrIndexBuffer* fAAStrokeRectIndexBuffer;
+
+ GrIndexBuffer* aaFillRectIndexBuffer(GrGpu* gpu);
+
+ static int aaStrokeRectIndexCount();
+ GrIndexBuffer* aaStrokeRectIndexBuffer(GrGpu* gpu);
+
+ // TODO: Remove the useVertexCoverage boolean. Just use it all the time
+ // since we now have a coverage vertex attribute
+ void geometryFillAARect(GrGpu* gpu,
+ GrDrawTarget* target,
+ const SkRect& rect,
+ const SkMatrix& combinedMatrix,
+ const SkRect& devRect,
+ bool useVertexCoverage);
+
+ void shaderFillAARect(GrGpu* gpu,
+ GrDrawTarget* target,
+ const SkRect& rect,
+ const SkMatrix& combinedMatrix);
+
+ void shaderFillAlignedAARect(GrGpu* gpu,
+ GrDrawTarget* target,
+ const SkRect& rect,
+ const SkMatrix& combinedMatrix);
+
+ void geometryStrokeAARect(GrGpu* gpu,
+ GrDrawTarget* target,
+ const SkRect& devOutside,
+ const SkRect& devInside,
+ bool useVertexCoverage);
+
+ typedef GrRefCnt INHERITED;
+};
+
+#endif // GrAARectRenderer_DEFINED
diff --git a/src/gpu/GrClipMaskManager.cpp b/src/gpu/GrClipMaskManager.cpp
index 1e8eb25..8465880 100644
--- a/src/gpu/GrClipMaskManager.cpp
+++ b/src/gpu/GrClipMaskManager.cpp
@@ -9,6 +9,7 @@
#include "GrClipMaskManager.h"
#include "GrAAConvexPathRenderer.h"
#include "GrAAHairLinePathRenderer.h"
+#include "GrAARectRenderer.h"
#include "GrDrawTargetCaps.h"
#include "GrGpu.h"
#include "GrPaint.h"
diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
index 4be77f8..b6555c4 100644
--- a/src/gpu/GrContext.cpp
+++ b/src/gpu/GrContext.cpp
@@ -12,6 +12,7 @@
#include "effects/GrSingleTextureEffect.h"
#include "effects/GrConfigConversionEffect.h"
+#include "GrAARectRenderer.h"
#include "GrBufferAllocPool.h"
#include "GrGpu.h"
#include "GrDrawTargetCaps.h"
diff --git a/src/gpu/GrOvalRenderer.h b/src/gpu/GrOvalRenderer.h
new file mode 100644
index 0000000..8c47e9a
--- /dev/null
+++ b/src/gpu/GrOvalRenderer.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef GrOvalRenderer_DEFINED
+#define GrOvalRenderer_DEFINED
+
+#include "GrContext.h"
+#include "GrPaint.h"
+#include "GrRefCnt.h"
+
+class GrContext;
+class GrDrawTarget;
+class GrPaint;
+struct SkRect;
+class SkStrokeRec;
+
+/*
+ * This class wraps helper functions that draw ovals and roundrects (filled & stroked)
+ */
+class GrOvalRenderer : public GrRefCnt {
+public:
+ SK_DECLARE_INST_COUNT(GrOvalRenderer)
+
+ GrOvalRenderer() : fRRectIndexBuffer(NULL) {}
+ ~GrOvalRenderer() {
+ this->reset();
+ }
+
+ void reset();
+
+ bool drawOval(GrDrawTarget* target, const GrContext* context, bool useAA,
+ const SkRect& oval, const SkStrokeRec& stroke);
+ bool drawSimpleRRect(GrDrawTarget* target, GrContext* context, bool useAA,
+ const SkRRect& rrect, const SkStrokeRec& stroke);
+
+private:
+ bool drawEllipse(GrDrawTarget* target, bool useAA,
+ const SkRect& ellipse,
+ const SkStrokeRec& stroke);
+ bool drawDIEllipse(GrDrawTarget* target, bool useAA,
+ const SkRect& ellipse,
+ const SkStrokeRec& stroke);
+ void drawCircle(GrDrawTarget* target, bool useAA,
+ const SkRect& circle,
+ const SkStrokeRec& stroke);
+
+ GrIndexBuffer* rRectIndexBuffer(GrGpu* gpu);
+
+ GrIndexBuffer* fRRectIndexBuffer;
+
+ typedef GrRefCnt INHERITED;
+};
+
+#endif // GrOvalRenderer_DEFINED