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 #include "GrMatrixConvolutionEffect.h" | 7 #include "GrMatrixConvolutionEffect.h" |
8 #include "gl/GrGLFragmentProcessor.h" | 8 #include "gl/GrGLFragmentProcessor.h" |
9 #include "gl/GrGLTexture.h" | 9 #include "gl/GrGLTexture.h" |
10 #include "gl/builders/GrGLProgramBuilder.h" | 10 #include "gl/builders/GrGLProgramBuilder.h" |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
155 | 155 |
156 GrMatrixConvolutionEffect::~GrMatrixConvolutionEffect() { | 156 GrMatrixConvolutionEffect::~GrMatrixConvolutionEffect() { |
157 } | 157 } |
158 | 158 |
159 void GrMatrixConvolutionEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, | 159 void GrMatrixConvolutionEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, |
160 GrProcessorKeyBuilder* b) cons
t { | 160 GrProcessorKeyBuilder* b) cons
t { |
161 GrGLMatrixConvolutionEffect::GenKey(*this, caps, b); | 161 GrGLMatrixConvolutionEffect::GenKey(*this, caps, b); |
162 } | 162 } |
163 | 163 |
164 GrGLFragmentProcessor* GrMatrixConvolutionEffect::onCreateGLInstance() const { | 164 GrGLFragmentProcessor* GrMatrixConvolutionEffect::onCreateGLInstance() const { |
165 return SkNEW_ARGS(GrGLMatrixConvolutionEffect, (*this)); | 165 return new GrGLMatrixConvolutionEffect(*this); |
166 } | 166 } |
167 | 167 |
168 bool GrMatrixConvolutionEffect::onIsEqual(const GrFragmentProcessor& sBase) cons
t { | 168 bool GrMatrixConvolutionEffect::onIsEqual(const GrFragmentProcessor& sBase) cons
t { |
169 const GrMatrixConvolutionEffect& s = sBase.cast<GrMatrixConvolutionEffect>()
; | 169 const GrMatrixConvolutionEffect& s = sBase.cast<GrMatrixConvolutionEffect>()
; |
170 return fKernelSize == s.kernelSize() && | 170 return fKernelSize == s.kernelSize() && |
171 !memcmp(fKernel, s.kernel(), | 171 !memcmp(fKernel, s.kernel(), |
172 fKernelSize.width() * fKernelSize.height() * sizeof(float)) &
& | 172 fKernelSize.width() * fKernelSize.height() * sizeof(float)) &
& |
173 fGain == s.gain() && | 173 fGain == s.gain() && |
174 fBias == s.bias() && | 174 fBias == s.bias() && |
175 fKernelOffset == s.kernelOffset() && | 175 fKernelOffset == s.kernelOffset() && |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
209 // is dropped here, since we renormalize the kernel below. | 209 // is dropped here, since we renormalize the kernel below. |
210 kernel[y * width + x] = xyTerm; | 210 kernel[y * width + x] = xyTerm; |
211 sum += xyTerm; | 211 sum += xyTerm; |
212 } | 212 } |
213 } | 213 } |
214 // Normalize the kernel | 214 // Normalize the kernel |
215 float scale = 1.0f / sum; | 215 float scale = 1.0f / sum; |
216 for (int i = 0; i < width * height; ++i) { | 216 for (int i = 0; i < width * height; ++i) { |
217 kernel[i] *= scale; | 217 kernel[i] *= scale; |
218 } | 218 } |
219 return SkNEW_ARGS(GrMatrixConvolutionEffect, (procDataManager, | 219 return new GrMatrixConvolutionEffect(procDataManager, texture, bounds, kerne
lSize, kernel, gain, |
220 texture, | 220 bias, kernelOffset, tileMode, convolveA
lpha); |
221 bounds, | |
222 kernelSize, | |
223 kernel, | |
224 gain, | |
225 bias, | |
226 kernelOffset, | |
227 tileMode, | |
228 convolveAlpha)); | |
229 } | 221 } |
230 | 222 |
231 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrMatrixConvolutionEffect); | 223 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrMatrixConvolutionEffect); |
232 | 224 |
233 GrFragmentProcessor* GrMatrixConvolutionEffect::TestCreate(GrProcessorTestData*
d) { | 225 GrFragmentProcessor* GrMatrixConvolutionEffect::TestCreate(GrProcessorTestData*
d) { |
234 int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx
: | 226 int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx
: |
235 GrProcessorUnitTest::kAlphaTextureIdx; | 227 GrProcessorUnitTest::kAlphaTextureIdx; |
236 int width = d->fRandom->nextRangeU(1, MAX_KERNEL_SIZE); | 228 int width = d->fRandom->nextRangeU(1, MAX_KERNEL_SIZE); |
237 int height = d->fRandom->nextRangeU(1, MAX_KERNEL_SIZE / width); | 229 int height = d->fRandom->nextRangeU(1, MAX_KERNEL_SIZE / width); |
238 SkISize kernelSize = SkISize::Make(width, height); | 230 SkISize kernelSize = SkISize::Make(width, height); |
(...skipping 16 matching lines...) Expand all Loading... |
255 d->fTextures[texIdx], | 247 d->fTextures[texIdx], |
256 bounds, | 248 bounds, |
257 kernelSize, | 249 kernelSize, |
258 kernel.get(), | 250 kernel.get(), |
259 gain, | 251 gain, |
260 bias, | 252 bias, |
261 kernelOffset, | 253 kernelOffset, |
262 tileMode, | 254 tileMode, |
263 convolveAlpha); | 255 convolveAlpha); |
264 } | 256 } |
OLD | NEW |