/* * 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 GrDrawVerticesOp_DEFINED #define GrDrawVerticesOp_DEFINED #include "GrColor.h" #include "GrMeshDrawOp.h" #include "GrTypes.h" #include "SkMatrix.h" #include "SkRect.h" #include "SkTDArray.h" class GrOpFlushState; struct GrInitInvariantOutput; class GrDrawVerticesOp final : public GrMeshDrawOp { public: DEFINE_OP_CLASS_ID static std::unique_ptr Make(GrColor color, 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 std::unique_ptr( new GrDrawVerticesOp(color, primitiveType, viewMatrix, positions, vertexCount, indices, indexCount, colors, localCoords, bounds)); } const char* name() const override { return "DrawVerticesOp"; } SkString dumpInfo() const override { SkString string; string.appendf("PrimType: %d, VarColor: %d, VCount: %d, ICount: %d\n", fPrimitiveType, fVariableColor, fVertexCount, fIndexCount); string.append(DumpPipelineInfo(*this->pipeline())); string.append(INHERITED::dumpInfo()); return string; } private: GrDrawVerticesOp(GrColor color, 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); void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override; void applyPipelineOptimizations(const GrPipelineOptimizations&) override; void onPrepareDraws(Target*) const override; GrPrimitiveType primitiveType() const { return fPrimitiveType; } bool combinablePrimitive() const { return kTriangles_GrPrimitiveType == fPrimitiveType || kLines_GrPrimitiveType == fPrimitiveType || kPoints_GrPrimitiveType == fPrimitiveType; } bool onCombineIfPossible(GrOp* t, const GrCaps&) override; struct Mesh { GrColor fColor; // Only used if there are no per-vertex colors SkTDArray fPositions; SkTDArray fIndices; SkTDArray fColors; SkTDArray fLocalCoords; }; GrPrimitiveType fPrimitiveType; SkMatrix fViewMatrix; bool fVariableColor; int fVertexCount; int fIndexCount; SkSTArray<1, Mesh, true> fMeshes; typedef GrMeshDrawOp INHERITED; }; #endif