diff options
author | joshualitt <joshualitt@chromium.org> | 2014-11-08 09:24:25 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-11-08 09:24:25 -0800 |
commit | 4973d9da4aeb7c4d8b8e67e167586c7cc9534eee (patch) | |
tree | 38707bd1636bfbfdd7ae473b02f5385a16e229a0 /src/gpu/GrDefaultGeoProcFactory.h | |
parent | 270582f156b0a2a431d696a0a8fc46348fc773cf (diff) |
Default geometry processor
BUG=skia:
Committed: https://skia.googlesource.com/skia/+/ff343074b2a3fdaa5f120600e28717e366bceadd
Review URL: https://codereview.chromium.org/678953002
Diffstat (limited to 'src/gpu/GrDefaultGeoProcFactory.h')
-rw-r--r-- | src/gpu/GrDefaultGeoProcFactory.h | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/src/gpu/GrDefaultGeoProcFactory.h b/src/gpu/GrDefaultGeoProcFactory.h new file mode 100644 index 0000000000..26ce66249a --- /dev/null +++ b/src/gpu/GrDefaultGeoProcFactory.h @@ -0,0 +1,83 @@ +/* + * 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. + * TODO When we track geometry state separately from the draw state, we should be able use a default + * GP with every draw call + */ +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 + }; + + // YOU MUST UNREF + static const GrGeometryProcessor* CreateAndSetAttribs(GrDrawState*, uint32_t GPTypeFlags); + static const GrGeometryProcessor* Create(); +}; + +#endif |