| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #ifndef GrTextureMaker_DEFINED | 8 #ifndef GrTextureMaker_DEFINED |
| 9 #define GrTextureMaker_DEFINED | 9 #define GrTextureMaker_DEFINED |
| 10 | 10 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 57 * constraintRect (without considera
tion of filter | 57 * constraintRect (without considera
tion of filter |
| 58 * width, just the raw coords). | 58 * width, just the raw coords). |
| 59 * @param filterOrNullForBicubic If non-null indicates the filter
mode. If null means | 59 * @param filterOrNullForBicubic If non-null indicates the filter
mode. If null means |
| 60 * use bicubic filtering. | 60 * use bicubic filtering. |
| 61 **/ | 61 **/ |
| 62 virtual const GrFragmentProcessor* createFragmentProcessor( | 62 virtual const GrFragmentProcessor* createFragmentProcessor( |
| 63 const SkMatrix& textureMatrix, | 63 const SkMatrix& textureMatrix, |
| 64 const SkRect& constraintRect, | 64 const SkRect& constraintRect, |
| 65 FilterConstraint filterConstraint, | 65 FilterConstraint filterConstraint, |
| 66 bool coordsLimitedToConstraintRect, | 66 bool coordsLimitedToConstraintRect, |
| 67 const GrTextureParams::FilterMode* filterOrN
ullForBicubic) = 0; | 67 const GrTextureParams::FilterMode* filterOrN
ullForBicubic, |
| 68 bool gammaCorrect) = 0; |
| 68 | 69 |
| 69 virtual ~GrTextureProducer() {} | 70 virtual ~GrTextureProducer() {} |
| 70 | 71 |
| 71 int width() const { return fWidth; } | 72 int width() const { return fWidth; } |
| 72 int height() const { return fHeight; } | 73 int height() const { return fHeight; } |
| 73 bool isAlphaOnly() const { return fIsAlphaOnly; } | 74 bool isAlphaOnly() const { return fIsAlphaOnly; } |
| 74 | 75 |
| 75 protected: | 76 protected: |
| 76 GrTextureProducer(int width, int height, bool isAlphaOnly) | 77 GrTextureProducer(int width, int height, bool isAlphaOnly) |
| 77 : fWidth(width) | 78 : fWidth(width) |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 120 * The intent is not to use content area for subrect rendering. Rather, the pixe
ls outside the | 121 * The intent is not to use content area for subrect rendering. Rather, the pixe
ls outside the |
| 121 * content area have undefined values and shouldn't be read *regardless* of filt
ering mode or | 122 * content area have undefined values and shouldn't be read *regardless* of filt
ering mode or |
| 122 * the SkCanvas::SrcRectConstraint used for subrect draws. | 123 * the SkCanvas::SrcRectConstraint used for subrect draws. |
| 123 */ | 124 */ |
| 124 class GrTextureAdjuster : public GrTextureProducer { | 125 class GrTextureAdjuster : public GrTextureProducer { |
| 125 public: | 126 public: |
| 126 /** Makes the subset of the texture safe to use with the given texture param
eters. | 127 /** Makes the subset of the texture safe to use with the given texture param
eters. |
| 127 outOffset will be the top-left corner of the subset if a copy is not mad
e. Otherwise, | 128 outOffset will be the top-left corner of the subset if a copy is not mad
e. Otherwise, |
| 128 the copy will be tight to the contents and outOffset will be (0, 0). If
the copy's size | 129 the copy will be tight to the contents and outOffset will be (0, 0). If
the copy's size |
| 129 does not match subset's dimensions then the contents are scaled to fit t
he copy.*/ | 130 does not match subset's dimensions then the contents are scaled to fit t
he copy.*/ |
| 130 GrTexture* refTextureSafeForParams(const GrTextureParams&, SkIPoint* outOffs
et); | 131 GrTexture* refTextureSafeForParams(const GrTextureParams&, bool gammaCorrect
, |
| 132 SkIPoint* outOffset); |
| 131 | 133 |
| 132 const GrFragmentProcessor* createFragmentProcessor( | 134 const GrFragmentProcessor* createFragmentProcessor( |
| 133 const SkMatrix& textureMatrix, | 135 const SkMatrix& textureMatrix, |
| 134 const SkRect& constraintRect, | 136 const SkRect& constraintRect, |
| 135 FilterConstraint, | 137 FilterConstraint, |
| 136 bool coordsLimitedToConstraintRect, | 138 bool coordsLimitedToConstraintRect, |
| 137 const GrTextureParams::FilterMode* filterOrNullF
orBicubic) override; | 139 const GrTextureParams::FilterMode* filterOrNullF
orBicubic, |
| 140 bool gammaCorrect) override; |
| 138 | 141 |
| 139 protected: | 142 protected: |
| 140 /** The whole texture is content. */ | 143 /** The whole texture is content. */ |
| 141 explicit GrTextureAdjuster(GrTexture* original, bool isAlphaOnly) | 144 explicit GrTextureAdjuster(GrTexture* original, bool isAlphaOnly) |
| 142 : INHERITED(original->width(), original->height(), isAlphaOnly) | 145 : INHERITED(original->width(), original->height(), isAlphaOnly) |
| 143 , fOriginal(original) {} | 146 , fOriginal(original) {} |
| 144 | 147 |
| 145 GrTextureAdjuster(GrTexture* original, const SkIRect& contentArea, bool isAl
phaOnly); | 148 GrTextureAdjuster(GrTexture* original, const SkIRect& contentArea, bool isAl
phaOnly); |
| 146 | 149 |
| 147 GrTexture* originalTexture() const { return fOriginal; } | 150 GrTexture* originalTexture() const { return fOriginal; } |
| (...skipping 12 matching lines...) Expand all Loading... |
| 160 | 163 |
| 161 /** | 164 /** |
| 162 * Base class for sources that start out as something other than a texture (enco
ded image, | 165 * Base class for sources that start out as something other than a texture (enco
ded image, |
| 163 * picture, ...). | 166 * picture, ...). |
| 164 */ | 167 */ |
| 165 class GrTextureMaker : public GrTextureProducer { | 168 class GrTextureMaker : public GrTextureProducer { |
| 166 public: | 169 public: |
| 167 /** Returns a texture that is safe for use with the params. If the size of t
he returned texture | 170 /** Returns a texture that is safe for use with the params. If the size of t
he returned texture |
| 168 does not match width()/height() then the contents of the original must b
e scaled to fit | 171 does not match width()/height() then the contents of the original must b
e scaled to fit |
| 169 the texture. */ | 172 the texture. */ |
| 170 GrTexture* refTextureForParams(const GrTextureParams&); | 173 GrTexture* refTextureForParams(const GrTextureParams&, bool gammaCorrect); |
| 171 | 174 |
| 172 const GrFragmentProcessor* createFragmentProcessor( | 175 const GrFragmentProcessor* createFragmentProcessor( |
| 173 const SkMatrix& textureMatrix, | 176 const SkMatrix& textureMatrix, |
| 174 const SkRect& constraintRect, | 177 const SkRect& constraintRect, |
| 175 FilterConstraint filterConstraint, | 178 FilterConstraint filterConstraint, |
| 176 bool coordsLimitedToConstraintRect, | 179 bool coordsLimitedToConstraintRect, |
| 177 const GrTextureParams::FilterMode* filterOrNullF
orBicubic) override; | 180 const GrTextureParams::FilterMode* filterOrNullF
orBicubic, |
| 181 bool gammaCorrect) override; |
| 178 | 182 |
| 179 protected: | 183 protected: |
| 180 GrTextureMaker(GrContext* context, int width, int height, bool isAlphaOnly) | 184 GrTextureMaker(GrContext* context, int width, int height, bool isAlphaOnly) |
| 181 : INHERITED(width, height, isAlphaOnly) | 185 : INHERITED(width, height, isAlphaOnly) |
| 182 , fContext(context) {} | 186 , fContext(context) {} |
| 183 | 187 |
| 184 /** | 188 /** |
| 185 * Return the maker's "original" texture. It is the responsibility of the m
aker to handle any | 189 * Return the maker's "original" texture. It is the responsibility of the m
aker to handle any |
| 186 * caching of the original if desired. | 190 * caching of the original if desired. |
| 187 */ | 191 */ |
| 188 virtual GrTexture* refOriginalTexture(bool willBeMipped) = 0; | 192 virtual GrTexture* refOriginalTexture(bool willBeMipped, bool gammaCorrect)
= 0; |
| 189 | 193 |
| 190 /** | 194 /** |
| 191 * Return a new (uncached) texture that is the stretch of the maker's origi
nal. | 195 * Return a new (uncached) texture that is the stretch of the maker's origi
nal. |
| 192 * | 196 * |
| 193 * The base-class handles general logic for this, and only needs access to
the following | 197 * The base-class handles general logic for this, and only needs access to
the following |
| 194 * method: | 198 * method: |
| 195 * - refOriginalTexture() | 199 * - refOriginalTexture() |
| 196 * | 200 * |
| 197 * Subclass may override this if they can handle creating the texture more
directly than | 201 * Subclass may override this if they can handle creating the texture more
directly than |
| 198 * by copying. | 202 * by copying. |
| 199 */ | 203 */ |
| 200 virtual GrTexture* generateTextureForParams(const CopyParams&, bool willBeMi
pped); | 204 virtual GrTexture* generateTextureForParams(const CopyParams&, bool willBeMi
pped, |
| 205 bool gammaCorrect); |
| 201 | 206 |
| 202 GrContext* context() const { return fContext; } | 207 GrContext* context() const { return fContext; } |
| 203 | 208 |
| 204 private: | 209 private: |
| 205 GrContext* fContext; | 210 GrContext* fContext; |
| 206 | 211 |
| 207 typedef GrTextureProducer INHERITED; | 212 typedef GrTextureProducer INHERITED; |
| 208 }; | 213 }; |
| 209 | 214 |
| 210 #endif | 215 #endif |
| OLD | NEW |