Index: include/gpu/GrXferProcessor.h |
diff --git a/include/gpu/GrXferProcessor.h b/include/gpu/GrXferProcessor.h |
index 03d52a93d748f776b6733df8dc1d0a2e2fdb3467..13e4d2633ff30045b816db20b999744953a20ee7 100644 |
--- a/include/gpu/GrXferProcessor.h |
+++ b/include/gpu/GrXferProcessor.h |
@@ -10,7 +10,6 @@ |
#include "GrColor.h" |
#include "GrProcessor.h" |
-#include "GrTexture.h" |
#include "GrTypes.h" |
#include "SkXfermode.h" |
@@ -35,10 +34,11 @@ |
class GrXferProcessor : public GrProcessor { |
public: |
/** |
- * Sets a unique key on the GrProcessorKeyBuilder calls onGetGLProcessorKey(...) to get the |
- * specific subclass's key. |
- */ |
- void getGLProcessorKey(const GrGLCaps& caps, GrProcessorKeyBuilder* b) const; |
+ * Sets a unique key on the GrProcessorKeyBuilder that is directly associated with this xfer |
+ * processor's GL backend implementation. |
+ */ |
+ virtual void getGLProcessorKey(const GrGLCaps& caps, |
+ GrProcessorKeyBuilder* b) const = 0; |
/** Returns a new instance of the appropriate *GL* implementation class |
for the given GrXferProcessor; caller is responsible for deleting |
@@ -103,23 +103,8 @@ |
virtual void getBlendInfo(BlendInfo* blendInfo) const = 0; |
+ /** Will this prceossor read the destination pixel value? */ |
bool willReadDstColor() const { return fWillReadDstColor; } |
- |
- /** |
- * Returns the texture to be used as the destination when reading the dst in the fragment |
- * 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* 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; |
- } |
/** |
* Returns whether or not this xferProcossor will set a secondary output to be used with dual |
@@ -138,42 +123,28 @@ |
if (this->classID() != that.classID()) { |
return false; |
} |
- if (this->fWillReadDstColor != that.fWillReadDstColor) { |
- return false; |
- } |
- if (this->fDstCopy.getTexture() != that.fDstCopy.getTexture()) { |
- return false; |
- } |
- if (this->fDstCopyTextureOffset != that.fDstCopyTextureOffset) { |
- return false; |
- } |
return this->onIsEqual(that); |
} |
protected: |
- GrXferProcessor(); |
- GrXferProcessor(const GrDeviceCoordTexture* dstCopy, bool willReadDstColor); |
+ GrXferProcessor() : fWillReadDstColor(false) {} |
+ |
+ /** |
+ * If the prceossor subclass will read the destination pixel value then it must call this |
+ * function from its constructor. Otherwise, when its generated backend-specific prceossor class |
+ * attempts to generate code that reads the destination pixel it will fail. |
+ */ |
+ void setWillReadDstColor() { fWillReadDstColor = true; } |
private: |
- /** |
- * Sets a unique key on the GrProcessorKeyBuilder that is directly associated with this xfer |
- * processor's GL backend implementation. |
- */ |
- virtual void onGetGLProcessorKey(const GrGLCaps& caps, |
- GrProcessorKeyBuilder* b) const = 0; |
- |
virtual bool onIsEqual(const GrXferProcessor&) const = 0; |
- bool fWillReadDstColor; |
- SkIPoint fDstCopyTextureOffset; |
- GrTextureAccess fDstCopy; |
+ bool fWillReadDstColor; |
typedef GrFragmentProcessor INHERITED; |
}; |
GR_MAKE_BITFIELD_OPS(GrXferProcessor::OptFlags); |
- |
-/////////////////////////////////////////////////////////////////////////////// |
/** |
* We install a GrXPFactory (XPF) early on in the pipeline before all the final draw information is |
@@ -188,10 +159,8 @@ |
*/ |
class GrXPFactory : public SkRefCnt { |
public: |
- GrXferProcessor* createXferProcessor(const GrProcOptInfo& colorPOI, |
- const GrProcOptInfo& coveragePOI, |
- const GrDeviceCoordTexture* dstCopy, |
- const GrDrawTargetCaps& caps) const; |
+ virtual GrXferProcessor* createXferProcessor(const GrProcOptInfo& colorPOI, |
+ const GrProcOptInfo& coveragePOI) const = 0; |
/** |
* This function returns true if the GrXferProcessor generated from this factory will be able to |
@@ -233,7 +202,10 @@ |
*/ |
virtual bool canTweakAlphaForCoverage() const = 0; |
- bool willNeedDstCopy(const GrDrawTargetCaps& caps) const; |
+ /** |
+ * Returns true if the XP generated by this factory will read dst. |
+ */ |
+ virtual bool willReadDst() const = 0; |
bool isEqual(const GrXPFactory& that) const { |
if (this->classID() != that.classID()) { |
@@ -260,15 +232,6 @@ |
uint32_t fClassID; |
private: |
- virtual GrXferProcessor* onCreateXferProcessor(const GrProcOptInfo& colorPOI, |
- const GrProcOptInfo& coveragePOI, |
- const GrDeviceCoordTexture* dstCopy) const = 0; |
- /** |
- * Returns true if the XP generated by this factory will explicitly read dst in the fragment |
- * shader. |
- */ |
- virtual bool willReadDstColor() const = 0; |
- |
virtual bool onIsEqual(const GrXPFactory&) const = 0; |
static uint32_t GenClassID() { |