aboutsummaryrefslogtreecommitdiffhomepage
path: root/include/gpu
diff options
context:
space:
mode:
authorGravatar commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-07-15 13:54:06 +0000
committerGravatar commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-07-15 13:54:06 +0000
commit2d3b49201302f3f82e405a750724eae8ef82e5a0 (patch)
treee13ee455167f95f77206d326fa99f0880eee5974 /include/gpu
parentfc52e31a2a9055efb58f35a6a4cf67393aeff6d6 (diff)
Remove possiblity of NULL effect in GrEffectStage
R=jvanverth@google.com Author: bsalomon@google.com Review URL: https://chromiumcodereview.appspot.com/18295008 git-svn-id: http://skia.googlecode.com/svn/trunk@10075 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'include/gpu')
-rw-r--r--include/gpu/GrEffectStage.h83
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; }