diff options
author | 2014-11-14 16:00:38 -0800 | |
---|---|---|
committer | 2014-11-14 16:00:38 -0800 | |
commit | 5478d427c6e67c986a3390162c8fec77c466058a (patch) | |
tree | 2dabf11f5510aedbb8d59dc607088af0e4b7ab36 /src/gpu/GrDefaultGeoProcFactory.cpp | |
parent | 28562a01999d49abcbd60abbfba06f2ac8046f6d (diff) |
Push creation of default GP to the caller
TBR=
BUG=skia:
Review URL: https://codereview.chromium.org/715903002
Diffstat (limited to 'src/gpu/GrDefaultGeoProcFactory.cpp')
-rw-r--r-- | src/gpu/GrDefaultGeoProcFactory.cpp | 70 |
1 files changed, 41 insertions, 29 deletions
diff --git a/src/gpu/GrDefaultGeoProcFactory.cpp b/src/gpu/GrDefaultGeoProcFactory.cpp index 1258d59dc5..332e73324c 100644 --- a/src/gpu/GrDefaultGeoProcFactory.cpp +++ b/src/gpu/GrDefaultGeoProcFactory.cpp @@ -20,8 +20,8 @@ */ class DefaultGeoProc : public GrGeometryProcessor { public: - static GrGeometryProcessor* Create() { - GR_CREATE_STATIC_PROCESSOR(gDefaultGeoProc, DefaultGeoProc, ()); + static GrGeometryProcessor* Create(bool hasCoverage) { + GR_CREATE_STATIC_PROCESSOR(gDefaultGeoProc, DefaultGeoProc, (hasCoverage)); return SkRef(gDefaultGeoProc); } @@ -57,18 +57,24 @@ public: }; private: - DefaultGeoProc() {} + DefaultGeoProc(bool hasCoverageAttribute) : fHasCoverageAttribute(hasCoverageAttribute) {} virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE { return true; } virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE { - inout->mulByUnknownAlpha(); + if (fHasCoverageAttribute) { + inout->mulByUnknownAlpha(); + } else { + inout->mulByKnownAlpha(255); + } } GR_DECLARE_GEOMETRY_PROCESSOR_TEST; + bool fHasCoverageAttribute; + typedef GrFragmentProcessor INHERITED; }; @@ -78,33 +84,33 @@ GrGeometryProcessor* DefaultGeoProc::TestCreate(SkRandom* random, GrContext*, const GrDrawTargetCaps& caps, GrTexture*[]) { - return DefaultGeoProc::Create(); + return DefaultGeoProc::Create(random->nextBool()); } // We use these arrays to customize our default GP. We only need 4 because we omit coverage if // coverage is not requested in the flags to the create function. GrVertexAttrib kDefaultPositionGeoProc[] = { - { kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBinding }, - { kVec4ub_GrVertexAttribType, sizeof(SkPoint), kCoverage_GrVertexAttribBinding }, + { kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBinding }, + { kFloat_GrVertexAttribType, sizeof(SkPoint), kCoverage_GrVertexAttribBinding }, }; GrVertexAttrib kDefaultPosColorGeoProc[] = { - { kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBinding }, - { kVec4ub_GrVertexAttribType, sizeof(SkPoint), kColor_GrVertexAttribBinding }, - { kVec4ub_GrVertexAttribType, sizeof(SkPoint) + sizeof(GrColor), kCoverage_GrVertexAttribBinding }, + { kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBinding }, + { kVec4ub_GrVertexAttribType, sizeof(SkPoint), kColor_GrVertexAttribBinding }, + { kFloat_GrVertexAttribType, sizeof(SkPoint) + sizeof(GrColor), kCoverage_GrVertexAttribBinding }, }; -GrVertexAttrib kDefaultPosUVGeoProc[] = { - { kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBinding }, - { kVec2f_GrVertexAttribType, sizeof(SkPoint), kLocalCoord_GrVertexAttribBinding }, - { kVec4ub_GrVertexAttribType, 2 * sizeof(SkPoint), kCoverage_GrVertexAttribBinding }, +GrVertexAttrib kDefaultPosLocalCoordGeoProc[] = { + { kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBinding }, + { kVec2f_GrVertexAttribType, sizeof(SkPoint), kLocalCoord_GrVertexAttribBinding }, + { kFloat_GrVertexAttribType, 2 * sizeof(SkPoint), kCoverage_GrVertexAttribBinding }, }; -GrVertexAttrib kDefaultPosColUVGeoProc[] = { - { kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBinding }, - { kVec4ub_GrVertexAttribType, sizeof(SkPoint), kColor_GrVertexAttribBinding }, - { kVec2f_GrVertexAttribType, sizeof(SkPoint) + sizeof(GrColor), kLocalCoord_GrVertexAttribBinding }, - { kVec4ub_GrVertexAttribType, 2 * sizeof(SkPoint) + sizeof(GrColor), kCoverage_GrVertexAttribBinding }, +GrVertexAttrib kDefaultPosColLocalCoordGeoProc[] = { + { kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBinding }, + { kVec4ub_GrVertexAttribType, sizeof(SkPoint), kColor_GrVertexAttribBinding }, + { kVec2f_GrVertexAttribType, sizeof(SkPoint) + sizeof(GrColor), kLocalCoord_GrVertexAttribBinding }, + { kFloat_GrVertexAttribType, 2 * sizeof(SkPoint) + sizeof(GrColor), kCoverage_GrVertexAttribBinding }, }; static size_t get_size(GrDefaultGeoProcFactory::GPType flag) { @@ -116,15 +122,14 @@ static size_t get_size(GrDefaultGeoProcFactory::GPType flag) { case GrDefaultGeoProcFactory::kLocalCoord_GPType: return GrVertexAttribTypeSize(kVec2f_GrVertexAttribType); case GrDefaultGeoProcFactory::kCoverage_GPType: - return GrVertexAttribTypeSize(kVec4ub_GrVertexAttribType); + return GrVertexAttribTypeSize(kFloat_GrVertexAttribType); default: SkFAIL("Should never get here"); return 0; } } -const GrGeometryProcessor* -GrDefaultGeoProcFactory::CreateAndSetAttribs(GrDrawState* ds, uint32_t gpTypeFlags) { +void GrDefaultGeoProcFactory::SetAttribs(GrDrawState* ds, uint32_t gpTypeFlags) { SkASSERT(ds); // always atleast position in the GP size_t size = get_size(kPosition_GPType); @@ -143,9 +148,9 @@ GrDefaultGeoProcFactory::CreateAndSetAttribs(GrDrawState* ds, uint32_t gpTypeFla if (hasCoverage) { size += get_size(kCoverage_GPType); count++; - ds->setVertexAttribs<kDefaultPosColUVGeoProc>(count, size); + ds->setVertexAttribs<kDefaultPosColLocalCoordGeoProc>(count, size); } else { - ds->setVertexAttribs<kDefaultPosColUVGeoProc>(count, size); + ds->setVertexAttribs<kDefaultPosColLocalCoordGeoProc>(count, size); } } else { @@ -163,9 +168,9 @@ GrDefaultGeoProcFactory::CreateAndSetAttribs(GrDrawState* ds, uint32_t gpTypeFla if (hasCoverage) { size += get_size(kCoverage_GPType); count++; - ds->setVertexAttribs<kDefaultPosUVGeoProc>(count, size); + ds->setVertexAttribs<kDefaultPosLocalCoordGeoProc>(count, size); } else { - ds->setVertexAttribs<kDefaultPosUVGeoProc>(count, size); + ds->setVertexAttribs<kDefaultPosLocalCoordGeoProc>(count, size); } } else if (hasCoverage) { size += get_size(kCoverage_GPType); @@ -175,9 +180,16 @@ GrDefaultGeoProcFactory::CreateAndSetAttribs(GrDrawState* ds, uint32_t gpTypeFla // Just position ds->setVertexAttribs<kDefaultPositionGeoProc>(count, size); } - return DefaultGeoProc::Create(); } -const GrGeometryProcessor* GrDefaultGeoProcFactory::Create() { - return DefaultGeoProc::Create(); +const GrGeometryProcessor* +GrDefaultGeoProcFactory::CreateAndSetAttribs(GrDrawState* ds, uint32_t gpTypeFlags) { + SetAttribs(ds, gpTypeFlags); + + bool hasCoverage = SkToBool(gpTypeFlags & kCoverage_GPType); + return DefaultGeoProc::Create(hasCoverage); +} + +const GrGeometryProcessor* GrDefaultGeoProcFactory::Create(bool hasAttributeCoverage) { + return DefaultGeoProc::Create(hasAttributeCoverage); } |