Index: src/gpu/GrTextureParamsAdjuster.h |
diff --git a/src/gpu/GrTextureParamsAdjuster.h b/src/gpu/GrTextureParamsAdjuster.h |
index f8fdc2d4fbe62fd53046d1309611c07d16303af6..4e1f5a7ebf4b6f7f86cc4fb9598de281fcfc6653 100644 |
--- a/src/gpu/GrTextureParamsAdjuster.h |
+++ b/src/gpu/GrTextureParamsAdjuster.h |
@@ -10,10 +10,10 @@ |
#include "GrTextureParams.h" |
#include "GrResourceKey.h" |
+#include "GrTexture.h" |
#include "SkTLazy.h" |
class GrContext; |
-class GrTexture; |
class GrTextureParams; |
class GrUniqueKey; |
class SkBitmap; |
@@ -83,16 +83,54 @@ public: |
does not match subset's dimensions then the contents are scaled to fit the copy.*/ |
GrTexture* refTextureSafeForParams(const GrTextureParams&, SkIPoint* outOffset); |
+ enum FilterConstraint { |
+ kYes_FilterConstraint, |
+ kNo_FilterConstraint, |
+ }; |
+ |
+ /** |
+ * Helper for creating a fragment processor to sample the texture with a given filtering mode. |
+ * It attempts to avoids making a copy of the texture and avoid using a texture domain unless |
+ * necessary. |
+ * |
+ * @param textureMatrix Matrix to transform local coords by to compute |
+ * texture coords. |
+ * @param constraintRect Subrect of content area to be rendered. Must be |
+ * clipped to the content area already. |
+ * @param filterConstriant Indicates whether filtering is limited to |
+ * constraintRect. |
+ * @param coordsLimitedToConstraintRect Is it known that textureMatrix*localCoords is bound |
+ * by the portion of the texture indicated by |
+ * constraintRect (without consideration of filter |
+ * width, just the raw coords). |
+ * @param filterOrNullForBicubic If non-null indicates the filter mode. If null means |
+ * use bicubic filtering. |
+ **/ |
+ const GrFragmentProcessor* createFragmentProcessor( |
+ const SkMatrix& textureMatrix, |
+ const SkRect& constraintRect, |
+ FilterConstraint filterConstraint, |
+ bool coordsLimitedToConstraintRect, |
+ const GrTextureParams::FilterMode* filterOrNullForBicubic); |
+ |
+ GrTexture* originalTexture() const { return fOriginal; } |
+ |
+ void getContentArea(SkIRect* contentArea) const { |
+ if (fContentArea.isValid()) { |
+ *contentArea = *fContentArea.get(); |
+ } else { |
+ *contentArea = SkIRect::MakeWH(fOriginal->width(), fOriginal->height()); |
+ } |
+ } |
+ |
protected: |
/** The whole texture is content. */ |
explicit GrTextureAdjuster(GrTexture* original): fOriginal(original) {} |
GrTextureAdjuster(GrTexture* original, const SkIRect& contentArea); |
- GrTexture* originalTexture() { return fOriginal; } |
- |
/** Returns the content area or null for the whole original texture */ |
- const SkIRect* contentArea() { return fContentArea.getMaybeNull(); } |
+ const SkIRect* contentAreaOrNull() { return fContentArea.getMaybeNull(); } |
private: |
SkTLazy<SkIRect> fContentArea; |