Index: src/gpu/batches/GrDrawVerticesBatch.h |
diff --git a/src/gpu/batches/GrDrawVerticesBatch.h b/src/gpu/batches/GrDrawVerticesBatch.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..86ce241116c9dab5cfb2a874e59f27cbc5314789 |
--- /dev/null |
+++ b/src/gpu/batches/GrDrawVerticesBatch.h |
@@ -0,0 +1,99 @@ |
+/* |
+ * Copyright 2015 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#ifndef GrDrawVerticesBatch_DEFINED |
+#define GrDrawVerticesBatch_DEFINED |
+ |
+#include "GrBatch.h" |
+#include "GrColor.h" |
+#include "GrTypes.h" |
+#include "SkMatrix.h" |
+#include "SkRect.h" |
+#include "SkTDArray.h" |
+ |
+class GrBatch; |
+class GrBatchTarget; |
+struct GrInitInvariantOutput; |
+ |
+class GrDrawVerticesBatch : public GrBatch { |
+public: |
+ struct Geometry { |
+ GrColor fColor; |
+ SkTDArray<SkPoint> fPositions; |
+ SkTDArray<uint16_t> fIndices; |
+ SkTDArray<GrColor> fColors; |
+ SkTDArray<SkPoint> fLocalCoords; |
+ }; |
+ |
+ static GrBatch* Create(const Geometry& geometry, GrPrimitiveType primitiveType, |
+ const SkMatrix& viewMatrix, |
+ const SkPoint* positions, int vertexCount, |
+ const uint16_t* indices, int indexCount, |
+ const GrColor* colors, const SkPoint* localCoords, |
+ const SkRect& bounds) { |
+ return SkNEW_ARGS(GrDrawVerticesBatch, (geometry, primitiveType, viewMatrix, positions, |
+ vertexCount, indices, indexCount, colors, |
+ localCoords, bounds)); |
+ } |
+ |
+ const char* name() const override { return "DrawVerticesBatch"; } |
+ |
+ void getInvariantOutputColor(GrInitInvariantOutput* out) const override; |
+ |
+ void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override; |
+ |
+ void initBatchTracker(const GrPipelineInfo& init) override; |
+ |
+ void generateGeometry(GrBatchTarget* batchTarget) override; |
+ |
+ SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; } |
+ |
+private: |
+ GrDrawVerticesBatch(const Geometry& geometry, GrPrimitiveType primitiveType, |
+ const SkMatrix& viewMatrix, |
+ const SkPoint* positions, int vertexCount, |
+ const uint16_t* indices, int indexCount, |
+ const GrColor* colors, const SkPoint* localCoords, const SkRect& bounds); |
+ |
+ GrPrimitiveType primitiveType() const { return fBatch.fPrimitiveType; } |
+ bool batchablePrimitiveType() const { |
+ return kTriangles_GrPrimitiveType == fBatch.fPrimitiveType || |
+ kLines_GrPrimitiveType == fBatch.fPrimitiveType || |
+ kPoints_GrPrimitiveType == fBatch.fPrimitiveType; |
+ } |
+ GrColor color() const { return fBatch.fColor; } |
+ bool usesLocalCoords() const { return fBatch.fUsesLocalCoords; } |
+ bool colorIgnored() const { return fBatch.fColorIgnored; } |
+ const SkMatrix& viewMatrix() const { return fBatch.fViewMatrix; } |
+ bool hasColors() const { return fBatch.fHasColors; } |
+ bool hasIndices() const { return fBatch.fHasIndices; } |
+ bool hasLocalCoords() const { return fBatch.fHasLocalCoords; } |
+ int vertexCount() const { return fBatch.fVertexCount; } |
+ int indexCount() const { return fBatch.fIndexCount; } |
+ bool coverageIgnored() const { return fBatch.fCoverageIgnored; } |
+ |
+ bool onCombineIfPossible(GrBatch* t) override; |
+ |
+ struct BatchTracker { |
+ GrPrimitiveType fPrimitiveType; |
+ SkMatrix fViewMatrix; |
+ GrColor fColor; |
+ bool fUsesLocalCoords; |
+ bool fColorIgnored; |
+ bool fCoverageIgnored; |
+ bool fHasColors; |
+ bool fHasIndices; |
+ bool fHasLocalCoords; |
+ int fVertexCount; |
+ int fIndexCount; |
+ }; |
+ |
+ BatchTracker fBatch; |
+ SkSTArray<1, Geometry, true> fGeoData; |
+}; |
+ |
+#endif |