Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(14)

Unified Diff: include/gpu/GrFragmentProcessor.h

Issue 657923002: Make GrFragmentProcessor auto-compare coord xforms. (Closed) Base URL: https://skia.googlesource.com/skia.git@key
Patch Set: Add \! Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « include/gpu/GrCoordTransform.h ('k') | src/effects/SkPerlinNoiseShader.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: include/gpu/GrFragmentProcessor.h
diff --git a/include/gpu/GrFragmentProcessor.h b/include/gpu/GrFragmentProcessor.h
index f872d908350b5ce0a0acc12dee6a6b379fbefcf5..464230717645c9415cde2a52ab6c0bc479eb8372 100644
--- a/include/gpu/GrFragmentProcessor.h
+++ b/include/gpu/GrFragmentProcessor.h
@@ -46,7 +46,7 @@ public:
generate the same shader code. To test for identical code generation use the prceossor' keys
computed by the GrBackendProcessorFactory. */
bool isEqual(const GrFragmentProcessor& other) const {
- if (&this->getFactory() != &other.getFactory()) {
+ if (&this->getFactory() != &other.getFactory() || !this->hasSameTransforms(other)) {
return false;
}
bool result = this->onIsEqual(other);
@@ -61,11 +61,20 @@ public:
protected:
/**
* Fragment Processor subclasses call this from their constructor to register coordinate
- * transformations. The processor subclass manages the lifetime of the transformations (this
- * function only stores a pointer). The GrCoordTransform is typically a member field of the
- * GrProcessor subclass. When the matrix has perspective, the transformed coordinates will have
- * 3 components. Otherwise they'll have 2. This must only be called from the constructor because
- * GrProcessors are immutable.
+ * transformations. Coord transforms provide a mechanism for a processor to receive coordinates
+ * in their FS code. The matrix expresses a transformation from local space. For a given
+ * fragment the matrix will be applied to the local coordinate that maps to the fragment.
+ *
+ * When the transformation has perspective, the transformed coordinates will have
+ * 3 components. Otherwise they'll have 2.
+ *
+ * This must only be called from the constructor because GrProcessors are immutable. The
+ * processor subclass manages the lifetime of the transformations (this function only stores a
+ * pointer). The GrCoordTransform is typically a member field of the GrProcessor subclass.
+ *
+ * A processor subclass that has multiple methods of construction should always add its coord
+ * transforms in a consistent order. The non-virtual implementation of isEqual() automatically
+ * compares transforms and will assume they line up across the two processor instances.
*/
void addCoordTransform(const GrCoordTransform*);
@@ -84,10 +93,15 @@ protected:
void setWillNotUseInputColor() { fWillUseInputColor = false; }
private:
- /** Subclass implements this to support isEqual(). It will only be called if it is known that
- the two prceossor are of the same subclass (i.e. they return the same object from
- getFactory()).*/
- virtual bool onIsEqual(const GrFragmentProcessor& other) const = 0;
+ /**
+ * Subclass implements this to support isEqual(). It will only be called if it is known that
+ * the two processors are of the same subclass (i.e. they return the same object from
+ * getFactory()). The processor subclass should not compare its coord transforms as that will
+ * be performed automatically in the non-virtual isEqual().
+ */
+ virtual bool onIsEqual(const GrFragmentProcessor&) const = 0;
+
+ bool hasSameTransforms(const GrFragmentProcessor&) const;
SkSTArray<4, const GrCoordTransform*, true> fCoordTransforms;
bool fWillReadDstColor;
« no previous file with comments | « include/gpu/GrCoordTransform.h ('k') | src/effects/SkPerlinNoiseShader.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698