diff options
Diffstat (limited to 'include/gpu')
-rw-r--r-- | include/gpu/GrEffectStage.h | 83 |
1 files changed, 28 insertions, 55 deletions
diff --git a/include/gpu/GrEffectStage.h b/include/gpu/GrEffectStage.h index 3f10bdcf1e..08fb159260 100644 --- a/include/gpu/GrEffectStage.h +++ b/include/gpu/GrEffectStage.h @@ -20,14 +20,8 @@ class GrEffectStage { public: - GrEffectStage() { - fCoordChangeMatrixSet = false; - fVertexAttribIndices[0] = -1; - fVertexAttribIndices[1] = -1; - } - explicit GrEffectStage(const GrEffectRef* effectRef, int attrIndex0 = -1, int attrIndex1 = -1) - : fEffectRef(SkSafeRef(effectRef)) { + : fEffectRef(SkRef(effectRef)) { fCoordChangeMatrixSet = false; fVertexAttribIndices[0] = attrIndex0; fVertexAttribIndices[1] = attrIndex1; @@ -37,23 +31,25 @@ public: *this = other; } + class DeferredStage; + // This constructor balances DeferredStage::saveFrom(). + explicit GrEffectStage(const DeferredStage& deferredStage) { + deferredStage.restoreTo(this); + } + GrEffectStage& operator= (const GrEffectStage& other) { fCoordChangeMatrixSet = other.fCoordChangeMatrixSet; if (other.fCoordChangeMatrixSet) { fCoordChangeMatrix = other.fCoordChangeMatrix; } - fEffectRef.reset(SkSafeRef(other.fEffectRef.get())); + fEffectRef.reset(SkRef(other.fEffectRef.get())); memcpy(fVertexAttribIndices, other.fVertexAttribIndices, sizeof(fVertexAttribIndices)); return *this; } bool operator== (const GrEffectStage& other) const { - // first handle cases where one or the other has no effect - if (NULL == fEffectRef.get()) { - return NULL == other.fEffectRef.get(); - } else if (NULL == other.fEffectRef.get()) { - return false; - } + GrAssert(NULL != fEffectRef.get()); + GrAssert(NULL != other.fEffectRef.get()); if (!(*this->getEffect())->isEqual(*other.getEffect())) { return false; @@ -108,7 +104,7 @@ public: savedCoordChange->fCoordChangeMatrix = fCoordChangeMatrix; } GrAssert(NULL == savedCoordChange->fEffectRef.get()); - GR_DEBUGCODE(GrSafeRef(fEffectRef.get());) + GR_DEBUGCODE(SkRef(fEffectRef.get());) GR_DEBUGCODE(savedCoordChange->fEffectRef.reset(fEffectRef.get());) } @@ -142,43 +138,32 @@ public: void saveFrom(const GrEffectStage& stage) { GrAssert(!fInitialized); - if (NULL != stage.fEffectRef.get()) { - stage.fEffectRef->get()->incDeferredRefCounts(); - fEffect = stage.fEffectRef->get(); - fCoordChangeMatrixSet = stage.fCoordChangeMatrixSet; - if (fCoordChangeMatrixSet) { - fCoordChangeMatrix = stage.fCoordChangeMatrix; - } - fVertexAttribIndices[0] = stage.fVertexAttribIndices[0]; - fVertexAttribIndices[1] = stage.fVertexAttribIndices[1]; + GrAssert(NULL != stage.fEffectRef.get()); + stage.fEffectRef->get()->incDeferredRefCounts(); + fEffect = stage.fEffectRef->get(); + fCoordChangeMatrixSet = stage.fCoordChangeMatrixSet; + if (fCoordChangeMatrixSet) { + fCoordChangeMatrix = stage.fCoordChangeMatrix; } + fVertexAttribIndices[0] = stage.fVertexAttribIndices[0]; + fVertexAttribIndices[1] = stage.fVertexAttribIndices[1]; SkDEBUGCODE(fInitialized = true;) } - void restoreTo(GrEffectStage* stage) { + void restoreTo(GrEffectStage* stage) const { GrAssert(fInitialized); - if (NULL != fEffect) { - stage->fEffectRef.reset(GrEffect::CreateEffectRef(fEffect)); - stage->fCoordChangeMatrixSet = fCoordChangeMatrixSet; - if (fCoordChangeMatrixSet) { - stage->fCoordChangeMatrix = fCoordChangeMatrix; - } - stage->fVertexAttribIndices[0] = fVertexAttribIndices[0]; - stage->fVertexAttribIndices[1] = fVertexAttribIndices[1]; - } else { - stage->fEffectRef.reset(NULL); + stage->fEffectRef.reset(GrEffect::CreateEffectRef(fEffect)); + stage->fCoordChangeMatrixSet = fCoordChangeMatrixSet; + if (fCoordChangeMatrixSet) { + stage->fCoordChangeMatrix = fCoordChangeMatrix; } + stage->fVertexAttribIndices[0] = fVertexAttribIndices[0]; + stage->fVertexAttribIndices[1] = fVertexAttribIndices[1]; } bool isEqual(const GrEffectStage& stage, bool ignoreCoordChange) const { - if (NULL == stage.fEffectRef.get()) { - return NULL == fEffect; - } else if (NULL == fEffect) { - return false; - } - - if (fVertexAttribIndices[0] != stage.fVertexAttribIndices[0] - || fVertexAttribIndices[1] != stage.fVertexAttribIndices[1]) { + if (fVertexAttribIndices[0] != stage.fVertexAttribIndices[0] || + fVertexAttribIndices[1] != stage.fVertexAttribIndices[1]) { return false; } @@ -223,18 +208,6 @@ public: } } - void reset() { fEffectRef.reset(NULL); } - - const GrEffectRef* setEffect(const GrEffectRef* effect, int attr0 = -1, int attr1 = -1) { - fEffectRef.reset(SkSafeRef(effect)); - fCoordChangeMatrixSet = false; - - fVertexAttribIndices[0] = attr0; - fVertexAttribIndices[1] = attr1; - - return effect; - } - const GrEffectRef* getEffect() const { return fEffectRef.get(); } const int* getVertexAttribIndices() const { return fVertexAttribIndices; } |