| Index: include/gpu/GrXferProcessor.h
|
| diff --git a/include/gpu/GrXferProcessor.h b/include/gpu/GrXferProcessor.h
|
| index 812a9b32ab353ec8f6172bf701a77042e2cc02bc..85e5aa04ed935e9d99e819be55ae8a805d521105 100644
|
| --- a/include/gpu/GrXferProcessor.h
|
| +++ b/include/gpu/GrXferProcessor.h
|
| @@ -104,47 +104,6 @@
|
| class GrXferProcessor : public GrProcessor {
|
| public:
|
| /**
|
| - * A texture that contains the dst pixel values and an integer coord offset from device space
|
| - * to the space of the texture. Depending on GPU capabilities a DstTexture may be used by a
|
| - * GrXferProcessor for blending in the fragment shader.
|
| - */
|
| - class DstTexture {
|
| - public:
|
| - DstTexture() { fOffset.set(0, 0); }
|
| -
|
| - DstTexture(const DstTexture& other) {
|
| - *this = other;
|
| - }
|
| -
|
| - DstTexture(GrTexture* texture, const SkIPoint& offset)
|
| - : fTexture(SkSafeRef(texture))
|
| - , fOffset(offset) {
|
| - }
|
| -
|
| - DstTexture& operator=(const DstTexture& other) {
|
| - fTexture.reset(SkSafeRef(other.fTexture.get()));
|
| - fOffset = other.fOffset;
|
| - return *this;
|
| - }
|
| -
|
| - const SkIPoint& offset() const { return fOffset; }
|
| -
|
| - void setOffset(const SkIPoint& offset) { fOffset = offset; }
|
| - void setOffset(int ox, int oy) { fOffset.set(ox, oy); }
|
| -
|
| - GrTexture* texture() const { return fTexture.get(); }
|
| -
|
| - GrTexture* setTexture(GrTexture* texture) {
|
| - fTexture.reset(SkSafeRef(texture));
|
| - return texture;
|
| - }
|
| -
|
| - private:
|
| - SkAutoTUnref<GrTexture> fTexture;
|
| - SkIPoint fOffset;
|
| - };
|
| -
|
| - /**
|
| * Sets a unique key on the GrProcessorKeyBuilder calls onGetGLProcessorKey(...) to get the
|
| * specific subclass's key.
|
| */
|
| @@ -240,15 +199,15 @@
|
| * shader. If the returned texture is NULL then the XP is either not reading the dst or we have
|
| * extentions that support framebuffer fetching and thus don't need a copy of the dst texture.
|
| */
|
| - const GrTexture* getDstTexture() const { return fDstTexture.getTexture(); }
|
| -
|
| - /**
|
| - * Returns the offset in device coords to use when accessing the dst texture to get the dst
|
| - * pixel color in the shader. This value is only valid if getDstTexture() != NULL.
|
| - */
|
| - const SkIPoint& dstTextureOffset() const {
|
| - SkASSERT(this->getDstTexture());
|
| - return fDstTextureOffset;
|
| + const GrTexture* getDstCopyTexture() const { return fDstCopy.getTexture(); }
|
| +
|
| + /**
|
| + * Returns the offset into the DstCopyTexture to use when reading it in the shader. This value
|
| + * is only valid if getDstCopyTexture() != NULL.
|
| + */
|
| + const SkIPoint& dstCopyTextureOffset() const {
|
| + SkASSERT(this->getDstCopyTexture());
|
| + return fDstCopyTextureOffset;
|
| }
|
|
|
| /**
|
| @@ -279,10 +238,10 @@
|
| if (this->fReadsCoverage != that.fReadsCoverage) {
|
| return false;
|
| }
|
| - if (this->fDstTexture.getTexture() != that.fDstTexture.getTexture()) {
|
| - return false;
|
| - }
|
| - if (this->fDstTextureOffset != that.fDstTextureOffset) {
|
| + if (this->fDstCopy.getTexture() != that.fDstCopy.getTexture()) {
|
| + return false;
|
| + }
|
| + if (this->fDstCopyTextureOffset != that.fDstCopyTextureOffset) {
|
| return false;
|
| }
|
| return this->onIsEqual(that);
|
| @@ -290,7 +249,7 @@
|
|
|
| protected:
|
| GrXferProcessor();
|
| - GrXferProcessor(const DstTexture*, bool willReadDstColor);
|
| + GrXferProcessor(const GrDeviceCoordTexture* dstCopy, bool willReadDstColor);
|
|
|
| private:
|
| virtual OptFlags onGetOptimizations(const GrProcOptInfo& colorPOI,
|
| @@ -327,8 +286,8 @@
|
|
|
| bool fWillReadDstColor;
|
| bool fReadsCoverage;
|
| - SkIPoint fDstTextureOffset;
|
| - GrTextureAccess fDstTexture;
|
| + SkIPoint fDstCopyTextureOffset;
|
| + GrTextureAccess fDstCopy;
|
|
|
| typedef GrFragmentProcessor INHERITED;
|
| };
|
| @@ -350,10 +309,9 @@
|
| */
|
| class GrXPFactory : public SkRefCnt {
|
| public:
|
| - typedef GrXferProcessor::DstTexture DstTexture;
|
| GrXferProcessor* createXferProcessor(const GrProcOptInfo& colorPOI,
|
| const GrProcOptInfo& coveragePOI,
|
| - const DstTexture*,
|
| + const GrDeviceCoordTexture* dstCopy,
|
| const GrCaps& caps) const;
|
|
|
| /**
|
| @@ -377,8 +335,8 @@
|
| virtual void getInvariantOutput(const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI,
|
| InvariantOutput*) const = 0;
|
|
|
| - bool willNeedDstTexture(const GrCaps& caps, const GrProcOptInfo& colorPOI,
|
| - const GrProcOptInfo& coveragePOI) const;
|
| + bool willNeedDstCopy(const GrCaps& caps, const GrProcOptInfo& colorPOI,
|
| + const GrProcOptInfo& coveragePOI) const;
|
|
|
| bool isEqual(const GrXPFactory& that) const {
|
| if (this->classID() != that.classID()) {
|
| @@ -408,7 +366,7 @@
|
| virtual GrXferProcessor* onCreateXferProcessor(const GrCaps& caps,
|
| const GrProcOptInfo& colorPOI,
|
| const GrProcOptInfo& coveragePOI,
|
| - const DstTexture*) const = 0;
|
| + const GrDeviceCoordTexture* dstCopy) const = 0;
|
| /**
|
| * Returns true if the XP generated by this factory will explicitly read dst in the fragment
|
| * shader.
|
|
|