| /* | |
| * Copyright 2014 Google Inc. | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #ifndef GrDefaultGeoProcFactory_DEFINED | |
| #define GrDefaultGeoProcFactory_DEFINED | |
| #include "GrGeometryProcessor.h" | |
| class GrDrawState; | |
| /* | |
| * A factory for creating default Geometry Processors which simply multiply position by the uniform | |
| * view matrix and wire through color, coverage, UV coords if requested. Right now this is only | |
| * used in the creation of optimized draw states because adding default GPs to the drawstate can | |
| * interfere with batching due to updating the drawstate. | |
| */ | |
| class GrDefaultGeoProcFactory { | |
| public: | |
| // Structs for adding vertex attributes | |
| struct PositionAttr { | |
| SkPoint fPosition; | |
| }; | |
| struct PositionCoverageAttr { | |
| SkPoint fPosition; | |
| GrColor fCoverage; | |
| }; | |
| struct PositionColorAttr { | |
| SkPoint fPosition; | |
| SkColor fColor; | |
| }; | |
| struct PositionColorCoverageAttr { | |
| SkPoint fPosition; | |
| SkColor fColor; | |
| GrColor fCoverage; | |
| }; | |
| struct PositionLocalCoordAttr { | |
| SkPoint fPosition; | |
| SkPoint fLocalCoord; | |
| }; | |
| struct PositionLocalCoordCoverageAttr { | |
| SkPoint fPosition; | |
| SkPoint fLocalCoord; | |
| GrColor fCoverage; | |
| }; | |
| struct PositionColorLocalCoordAttr { | |
| SkPoint fPosition; | |
| GrColor fColor; | |
| SkPoint fLocalCoord; | |
| }; | |
| struct PositionColorLocalCoordCoverage { | |
| SkPoint fPosition; | |
| GrColor fColor; | |
| SkPoint fLocalCoord; | |
| GrColor fCoverage; | |
| }; | |
| enum GPType { | |
| kPosition_GPType = 0x0, // we ALWAYS have position | |
| kColor_GPType = 0x01, | |
| kLocalCoord_GPType = 0x02, | |
| kCoverage_GPType= 0x04, | |
| kLastGPType = kCoverage_GPType | |
| }; | |
| /* | |
| * The following functions are used to create default GPs. If you just need to create | |
| * attributes seperately from creating the default GP, use the SetAttribs function followed | |
| * by the Create function. Otherwise use CreateAndSetAttribs to do both at once. | |
| * | |
| * You must unref the return from Create. | |
| */ | |
| // TODO clean this up | |
| static const GrGeometryProcessor* Create(uint32_t gpTypeFlags, | |
| GrColor, | |
| const SkMatrix& viewMatrix = SkMatrix::I(), | |
| const SkMatrix& localMatrix = SkMatrix::I(), | |
| bool opaqueVertexColors = false, | |
| uint8_t coverage = 0xff); | |
| static size_t DefaultVertexStride() { return sizeof(PositionAttr); } | |
| }; | |
| #endif |