Index: include/gpu/GrXferProcessor.h |
diff --git a/include/gpu/GrXferProcessor.h b/include/gpu/GrXferProcessor.h |
index b7d0bdd9fa9ef7717471a3857b9e788e95793378..696359b8b3fb351438c3d0b816e802a23422725f 100644 |
--- a/include/gpu/GrXferProcessor.h |
+++ b/include/gpu/GrXferProcessor.h |
@@ -9,10 +9,13 @@ |
#define GrXferProcessor_DEFINED |
#include "GrColor.h" |
-#include "GrFragmentProcessor.h" |
+#include "GrProcessor.h" |
#include "GrTypes.h" |
#include "SkXfermode.h" |
+class GrDrawTargetCaps; |
+class GrGLCaps; |
+class GrGLXferProcessor; |
class GrProcOptInfo; |
/** |
@@ -28,9 +31,21 @@ class GrProcOptInfo; |
* A GrXferProcessor is never installed directly into our draw state, but instead is created from a |
* GrXPFactory once we have finalized the state of our draw. |
*/ |
-class GrXferProcessor : public GrFragmentProcessor { |
+class GrXferProcessor : public GrProcessor { |
public: |
/** |
+ * 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 |
+ the object. */ |
+ virtual GrGLXferProcessor* createGLInstance() const = 0; |
+ |
+ /** |
* Optimizations for blending / coverage that an OptDrawState should apply to itself. |
*/ |
enum OptFlags { |
@@ -74,7 +89,8 @@ public: |
bool colorWriteDisabled, |
bool doesStencilWrite, |
GrColor* color, |
- uint8_t* coverage) = 0; |
+ uint8_t* coverage, |
+ const GrDrawTargetCaps& caps) = 0; |
struct BlendInfo { |
GrBlendCoeff fSrcBlend; |
@@ -87,6 +103,27 @@ public: |
/** Will this prceossor read the destination pixel value? */ |
bool willReadDstColor() const { return fWillReadDstColor; } |
+ /** |
+ * Returns whether or not this xferProcossor will set a secondary output to be used with dual |
+ * source blending. |
+ */ |
+ virtual bool hasSecondaryOutput() const { return false; } |
+ |
+ /** Returns true if this and other processor conservatively draw identically. It can only return |
+ true when the two processor are of the same subclass (i.e. they return the same object from |
+ from getFactory()). |
+ |
+ A return value of true from isEqual() should not be used to test whether the processor would |
+ generate the same shader code. To test for identical code generation use getGLProcessorKey*/ |
+ |
+ bool isEqual(const GrXferProcessor& that) const { |
+ if (this->classID() != that.classID()) { |
+ return false; |
+ } |
+ return this->onIsEqual(that); |
+ } |
+ |
+ |
protected: |
GrXferProcessor() : fWillReadDstColor(false) {} |
@@ -98,6 +135,7 @@ protected: |
void setWillReadDstColor() { fWillReadDstColor = true; } |
private: |
+ virtual bool onIsEqual(const GrXferProcessor&) const = 0; |
bool fWillReadDstColor; |