| Index: src/gpu/GrDrawState.h
|
| diff --git a/src/gpu/GrDrawState.h b/src/gpu/GrDrawState.h
|
| index a1b07de6d6cdb04331e044ec6444939a8016e10a..7b5f150f4c68525774f26df8e3d3a7506ffb6f14 100644
|
| --- a/src/gpu/GrDrawState.h
|
| +++ b/src/gpu/GrDrawState.h
|
| @@ -237,14 +237,34 @@ public:
|
| }
|
|
|
| /**
|
| - * When this object is destroyed it will remove any effects from the draw state that were added
|
| - * after its constructor.
|
| + * When this object is destroyed it will remove any color/coverage effects from the draw state
|
| + * that were added after its constructor.
|
| + *
|
| + * This class has strange behavior around geometry processor. If there is a GP on the draw state
|
| + * it will assert that the GP is not modified until after the destructor of the ARE. If the
|
| + * draw state has a NULL GP when the ARE is constructed then it will reset it to null in the
|
| + * destructor.
|
| + *
|
| + * TODO: We'd prefer for the ARE to just save and restore the GP. However, this would add
|
| + * significant complexity to the multi-ref architecture for deferred drawing. Once GrDrawState
|
| + * and GrOptDrawState are fully separated then GrDrawState will never be in the deferred
|
| + * execution state and GrOptDrawState always will be (and will be immutable and therefore
|
| + * unable to have an ARE). At this point we can restore sanity and have the ARE save and restore
|
| + * the GP.
|
| */
|
| class AutoRestoreEffects : public ::SkNoncopyable {
|
| public:
|
| - AutoRestoreEffects() : fDrawState(NULL), fColorEffectCnt(0), fCoverageEffectCnt(0) {}
|
| -
|
| - AutoRestoreEffects(GrDrawState* ds) : fDrawState(NULL), fColorEffectCnt(0), fCoverageEffectCnt(0) {
|
| + AutoRestoreEffects()
|
| + : fDrawState(NULL)
|
| + , fOriginalGP(NULL)
|
| + , fColorEffectCnt(0)
|
| + , fCoverageEffectCnt(0) {}
|
| +
|
| + AutoRestoreEffects(GrDrawState* ds)
|
| + : fDrawState(NULL)
|
| + , fOriginalGP(NULL)
|
| + , fColorEffectCnt(0)
|
| + , fCoverageEffectCnt(0) {
|
| this->set(ds);
|
| }
|
|
|
| @@ -255,10 +275,10 @@ public:
|
| bool isSet() const { return NULL != fDrawState; }
|
|
|
| private:
|
| - GrDrawState* fDrawState;
|
| - SkAutoTDelete<GrEffectStage> fGeometryProcessor;
|
| - int fColorEffectCnt;
|
| - int fCoverageEffectCnt;
|
| + GrDrawState* fDrawState;
|
| + const GrEffect* fOriginalGP;
|
| + int fColorEffectCnt;
|
| + int fCoverageEffectCnt;
|
| };
|
|
|
| /// @}
|
|
|