OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 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 #include "GrBicubicEffect.h" | 8 #include "GrBicubicEffect.h" |
9 #include "GrInvariantOutput.h" | 9 #include "GrInvariantOutput.h" |
10 #include "glsl/GrGLSLFragmentShaderBuilder.h" | 10 #include "glsl/GrGLSLFragmentShaderBuilder.h" |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
124 for (int y = 0; y < 4; y++) { | 124 for (int y = 0; y < 4; y++) { |
125 for (int x = 0; x < 4; x++) { | 125 for (int x = 0; x < 4; x++) { |
126 dst[x * 4 + y] = SkScalarToFloat(src[y * 4 + x]); | 126 dst[x * 4 + y] = SkScalarToFloat(src[y * 4 + x]); |
127 } | 127 } |
128 } | 128 } |
129 } | 129 } |
130 | 130 |
131 GrBicubicEffect::GrBicubicEffect(GrTexture* texture, | 131 GrBicubicEffect::GrBicubicEffect(GrTexture* texture, |
132 const SkScalar coefficients[16], | 132 const SkScalar coefficients[16], |
133 const SkMatrix &matrix, | 133 const SkMatrix &matrix, |
134 const SkShader::TileMode tileModes[2]) | 134 const SkShader::TileMode tileModes[2], GrRender
Target* dst) |
135 : INHERITED(texture, matrix, GrTextureParams(tileModes, GrTextureParams::kNone
_FilterMode)) | 135 : INHERITED(texture, matrix, |
| 136 GrTextureParams(tileModes, GrTextureParams::kNone_FilterMode), kLo
cal_GrCoordSet, dst) |
136 , fDomain(GrTextureDomain::IgnoredDomain()) { | 137 , fDomain(GrTextureDomain::IgnoredDomain()) { |
137 this->initClassID<GrBicubicEffect>(); | 138 this->initClassID<GrBicubicEffect>(); |
138 convert_row_major_scalar_coeffs_to_column_major_floats(fCoefficients, coeffi
cients); | 139 convert_row_major_scalar_coeffs_to_column_major_floats(fCoefficients, coeffi
cients); |
139 } | 140 } |
140 | 141 |
141 GrBicubicEffect::GrBicubicEffect(GrTexture* texture, | 142 GrBicubicEffect::GrBicubicEffect(GrTexture* texture, |
142 const SkScalar coefficients[16], | 143 const SkScalar coefficients[16], |
143 const SkMatrix &matrix, | 144 const SkMatrix &matrix, |
144 const SkRect& domain) | 145 const SkRect& domain, GrRenderTarget* dst) |
145 : INHERITED(texture, matrix, | 146 : INHERITED(texture, matrix, |
146 GrTextureParams(SkShader::kClamp_TileMode, GrTextureParams::kNone_
FilterMode)) | 147 GrTextureParams(SkShader::kClamp_TileMode, GrTextureParams::kNone_
FilterMode), kLocal_GrCoordSet, dst) |
147 , fDomain(domain, GrTextureDomain::kClamp_Mode) { | 148 , fDomain(domain, GrTextureDomain::kClamp_Mode) { |
148 this->initClassID<GrBicubicEffect>(); | 149 this->initClassID<GrBicubicEffect>(); |
149 convert_row_major_scalar_coeffs_to_column_major_floats(fCoefficients, coeffi
cients); | 150 convert_row_major_scalar_coeffs_to_column_major_floats(fCoefficients, coeffi
cients); |
150 } | 151 } |
151 | 152 |
152 GrBicubicEffect::~GrBicubicEffect() { | 153 GrBicubicEffect::~GrBicubicEffect() { |
153 } | 154 } |
154 | 155 |
155 void GrBicubicEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, | 156 void GrBicubicEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, |
156 GrProcessorKeyBuilder* b) const { | 157 GrProcessorKeyBuilder* b) const { |
(...skipping 17 matching lines...) Expand all Loading... |
174 | 175 |
175 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrBicubicEffect); | 176 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrBicubicEffect); |
176 | 177 |
177 const GrFragmentProcessor* GrBicubicEffect::TestCreate(GrProcessorTestData* d) { | 178 const GrFragmentProcessor* GrBicubicEffect::TestCreate(GrProcessorTestData* d) { |
178 int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx
: | 179 int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx
: |
179 GrProcessorUnitTest::kAlphaTextureIdx; | 180 GrProcessorUnitTest::kAlphaTextureIdx; |
180 SkScalar coefficients[16]; | 181 SkScalar coefficients[16]; |
181 for (int i = 0; i < 16; i++) { | 182 for (int i = 0; i < 16; i++) { |
182 coefficients[i] = d->fRandom->nextSScalar1(); | 183 coefficients[i] = d->fRandom->nextSScalar1(); |
183 } | 184 } |
184 return GrBicubicEffect::Create(d->fTextures[texIdx], coefficients); | 185 return GrBicubicEffect::Create(d->fTextures[texIdx], coefficients, NULL, NUL
L); |
185 } | 186 } |
186 | 187 |
187 ////////////////////////////////////////////////////////////////////////////// | 188 ////////////////////////////////////////////////////////////////////////////// |
188 | 189 |
189 bool GrBicubicEffect::ShouldUseBicubic(const SkMatrix& matrix, | 190 bool GrBicubicEffect::ShouldUseBicubic(const SkMatrix& matrix, |
190 GrTextureParams::FilterMode* filterMode)
{ | 191 GrTextureParams::FilterMode* filterMode)
{ |
191 if (matrix.isIdentity()) { | 192 if (matrix.isIdentity()) { |
192 *filterMode = GrTextureParams::kNone_FilterMode; | 193 *filterMode = GrTextureParams::kNone_FilterMode; |
193 return false; | 194 return false; |
194 } | 195 } |
(...skipping 14 matching lines...) Expand all Loading... |
209 // Use bilerp to handle rotation or fractional translation. | 210 // Use bilerp to handle rotation or fractional translation. |
210 *filterMode = GrTextureParams::kBilerp_FilterMode; | 211 *filterMode = GrTextureParams::kBilerp_FilterMode; |
211 } | 212 } |
212 return false; | 213 return false; |
213 } | 214 } |
214 // When we use the bicubic filtering effect each sample is read from the tex
ture using | 215 // When we use the bicubic filtering effect each sample is read from the tex
ture using |
215 // nearest neighbor sampling. | 216 // nearest neighbor sampling. |
216 *filterMode = GrTextureParams::kNone_FilterMode; | 217 *filterMode = GrTextureParams::kNone_FilterMode; |
217 return true; | 218 return true; |
218 } | 219 } |
OLD | NEW |