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

Side by Side Diff: src/gpu/effects/GrMatrixConvolutionEffect.cpp

Issue 1388113002: Bye bye processor data manager (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: remove files Created 5 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 unified diff | Download patch
« no previous file with comments | « src/gpu/effects/GrMatrixConvolutionEffect.h ('k') | src/gpu/effects/GrSimpleTextureEffect.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 imageIncrement[0] = 1.0f / texture.width(); 122 imageIncrement[0] = 1.0f / texture.width();
123 imageIncrement[1] = ySign / texture.height(); 123 imageIncrement[1] = ySign / texture.height();
124 pdman.set2fv(fImageIncrementUni, 1, imageIncrement); 124 pdman.set2fv(fImageIncrementUni, 1, imageIncrement);
125 pdman.set2fv(fKernelOffsetUni, 1, conv.kernelOffset()); 125 pdman.set2fv(fKernelOffsetUni, 1, conv.kernelOffset());
126 pdman.set1fv(fKernelUni, fKernelSize.width() * fKernelSize.height(), conv.ke rnel()); 126 pdman.set1fv(fKernelUni, fKernelSize.width() * fKernelSize.height(), conv.ke rnel());
127 pdman.set1f(fGainUni, conv.gain()); 127 pdman.set1f(fGainUni, conv.gain());
128 pdman.set1f(fBiasUni, conv.bias()); 128 pdman.set1f(fBiasUni, conv.bias());
129 fDomain.setData(pdman, conv.domain(), texture.origin()); 129 fDomain.setData(pdman, conv.domain(), texture.origin());
130 } 130 }
131 131
132 GrMatrixConvolutionEffect::GrMatrixConvolutionEffect(GrProcessorDataManager* pro cDataManager, 132 GrMatrixConvolutionEffect::GrMatrixConvolutionEffect(GrTexture* texture,
133 GrTexture* texture,
134 const SkIRect& bounds, 133 const SkIRect& bounds,
135 const SkISize& kernelSize, 134 const SkISize& kernelSize,
136 const SkScalar* kernel, 135 const SkScalar* kernel,
137 SkScalar gain, 136 SkScalar gain,
138 SkScalar bias, 137 SkScalar bias,
139 const SkIPoint& kernelOffse t, 138 const SkIPoint& kernelOffse t,
140 GrTextureDomain::Mode tileM ode, 139 GrTextureDomain::Mode tileM ode,
141 bool convolveAlpha) 140 bool convolveAlpha)
142 : INHERITED(procDataManager, texture, GrCoordTransform::MakeDivByTextureWHMatr ix(texture)), 141 : INHERITED(texture, GrCoordTransform::MakeDivByTextureWHMatrix(texture)),
143 fKernelSize(kernelSize), 142 fKernelSize(kernelSize),
144 fGain(SkScalarToFloat(gain)), 143 fGain(SkScalarToFloat(gain)),
145 fBias(SkScalarToFloat(bias) / 255.0f), 144 fBias(SkScalarToFloat(bias) / 255.0f),
146 fConvolveAlpha(convolveAlpha), 145 fConvolveAlpha(convolveAlpha),
147 fDomain(GrTextureDomain::MakeTexelDomainForMode(texture, bounds, tileMode), tileMode) { 146 fDomain(GrTextureDomain::MakeTexelDomainForMode(texture, bounds, tileMode), tileMode) {
148 this->initClassID<GrMatrixConvolutionEffect>(); 147 this->initClassID<GrMatrixConvolutionEffect>();
149 for (int i = 0; i < kernelSize.width() * kernelSize.height(); i++) { 148 for (int i = 0; i < kernelSize.width() * kernelSize.height(); i++) {
150 fKernel[i] = SkScalarToFloat(kernel[i]); 149 fKernel[i] = SkScalarToFloat(kernel[i]);
151 } 150 }
152 fKernelOffset[0] = static_cast<float>(kernelOffset.x()); 151 fKernelOffset[0] = static_cast<float>(kernelOffset.x());
(...skipping 19 matching lines...) Expand all
172 fKernelSize.width() * fKernelSize.height() * sizeof(float)) & & 171 fKernelSize.width() * fKernelSize.height() * sizeof(float)) & &
173 fGain == s.gain() && 172 fGain == s.gain() &&
174 fBias == s.bias() && 173 fBias == s.bias() &&
175 fKernelOffset == s.kernelOffset() && 174 fKernelOffset == s.kernelOffset() &&
176 fConvolveAlpha == s.convolveAlpha() && 175 fConvolveAlpha == s.convolveAlpha() &&
177 fDomain == s.domain(); 176 fDomain == s.domain();
178 } 177 }
179 178
180 // Static function to create a 2D convolution 179 // Static function to create a 2D convolution
181 GrFragmentProcessor* 180 GrFragmentProcessor*
182 GrMatrixConvolutionEffect::CreateGaussian(GrProcessorDataManager* procDataManage r, 181 GrMatrixConvolutionEffect::CreateGaussian(GrTexture* texture,
183 GrTexture* texture,
184 const SkIRect& bounds, 182 const SkIRect& bounds,
185 const SkISize& kernelSize, 183 const SkISize& kernelSize,
186 SkScalar gain, 184 SkScalar gain,
187 SkScalar bias, 185 SkScalar bias,
188 const SkIPoint& kernelOffset, 186 const SkIPoint& kernelOffset,
189 GrTextureDomain::Mode tileMode, 187 GrTextureDomain::Mode tileMode,
190 bool convolveAlpha, 188 bool convolveAlpha,
191 SkScalar sigmaX, 189 SkScalar sigmaX,
192 SkScalar sigmaY) { 190 SkScalar sigmaY) {
193 float kernel[MAX_KERNEL_SIZE]; 191 float kernel[MAX_KERNEL_SIZE];
(...skipping 15 matching lines...) Expand all
209 // is dropped here, since we renormalize the kernel below. 207 // is dropped here, since we renormalize the kernel below.
210 kernel[y * width + x] = xyTerm; 208 kernel[y * width + x] = xyTerm;
211 sum += xyTerm; 209 sum += xyTerm;
212 } 210 }
213 } 211 }
214 // Normalize the kernel 212 // Normalize the kernel
215 float scale = 1.0f / sum; 213 float scale = 1.0f / sum;
216 for (int i = 0; i < width * height; ++i) { 214 for (int i = 0; i < width * height; ++i) {
217 kernel[i] *= scale; 215 kernel[i] *= scale;
218 } 216 }
219 return new GrMatrixConvolutionEffect(procDataManager, texture, bounds, kerne lSize, kernel, gain, 217 return new GrMatrixConvolutionEffect(texture, bounds, kernelSize, kernel, ga in, bias,
220 bias, kernelOffset, tileMode, convolveA lpha); 218 kernelOffset, tileMode, convolveAlpha);
221 } 219 }
222 220
223 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrMatrixConvolutionEffect); 221 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrMatrixConvolutionEffect);
224 222
225 const GrFragmentProcessor* GrMatrixConvolutionEffect::TestCreate(GrProcessorTest Data* d) { 223 const GrFragmentProcessor* GrMatrixConvolutionEffect::TestCreate(GrProcessorTest Data* d) {
226 int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : 224 int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx :
227 GrProcessorUnitTest::kAlphaTextureIdx; 225 GrProcessorUnitTest::kAlphaTextureIdx;
228 int width = d->fRandom->nextRangeU(1, MAX_KERNEL_SIZE); 226 int width = d->fRandom->nextRangeU(1, MAX_KERNEL_SIZE);
229 int height = d->fRandom->nextRangeU(1, MAX_KERNEL_SIZE / width); 227 int height = d->fRandom->nextRangeU(1, MAX_KERNEL_SIZE / width);
230 SkISize kernelSize = SkISize::Make(width, height); 228 SkISize kernelSize = SkISize::Make(width, height);
231 SkAutoTDeleteArray<SkScalar> kernel(new SkScalar[width * height]); 229 SkAutoTDeleteArray<SkScalar> kernel(new SkScalar[width * height]);
232 for (int i = 0; i < width * height; i++) { 230 for (int i = 0; i < width * height; i++) {
233 kernel.get()[i] = d->fRandom->nextSScalar1(); 231 kernel.get()[i] = d->fRandom->nextSScalar1();
234 } 232 }
235 SkScalar gain = d->fRandom->nextSScalar1(); 233 SkScalar gain = d->fRandom->nextSScalar1();
236 SkScalar bias = d->fRandom->nextSScalar1(); 234 SkScalar bias = d->fRandom->nextSScalar1();
237 SkIPoint kernelOffset = SkIPoint::Make(d->fRandom->nextRangeU(0, kernelSize. width()), 235 SkIPoint kernelOffset = SkIPoint::Make(d->fRandom->nextRangeU(0, kernelSize. width()),
238 d->fRandom->nextRangeU(0, kernelSize. height())); 236 d->fRandom->nextRangeU(0, kernelSize. height()));
239 SkIRect bounds = SkIRect::MakeXYWH(d->fRandom->nextRangeU(0, d->fTextures[te xIdx]->width()), 237 SkIRect bounds = SkIRect::MakeXYWH(d->fRandom->nextRangeU(0, d->fTextures[te xIdx]->width()),
240 d->fRandom->nextRangeU(0, d->fTextures[te xIdx]->height()), 238 d->fRandom->nextRangeU(0, d->fTextures[te xIdx]->height()),
241 d->fRandom->nextRangeU(0, d->fTextures[te xIdx]->width()), 239 d->fRandom->nextRangeU(0, d->fTextures[te xIdx]->width()),
242 d->fRandom->nextRangeU(0, d->fTextures[te xIdx]->height())); 240 d->fRandom->nextRangeU(0, d->fTextures[te xIdx]->height()));
243 GrTextureDomain::Mode tileMode = 241 GrTextureDomain::Mode tileMode =
244 static_cast<GrTextureDomain::Mode>(d->fRandom->nextRangeU(0, 2)); 242 static_cast<GrTextureDomain::Mode>(d->fRandom->nextRangeU(0, 2));
245 bool convolveAlpha = d->fRandom->nextBool(); 243 bool convolveAlpha = d->fRandom->nextBool();
246 return GrMatrixConvolutionEffect::Create(d->fProcDataManager, 244 return GrMatrixConvolutionEffect::Create(d->fTextures[texIdx],
247 d->fTextures[texIdx],
248 bounds, 245 bounds,
249 kernelSize, 246 kernelSize,
250 kernel.get(), 247 kernel.get(),
251 gain, 248 gain,
252 bias, 249 bias,
253 kernelOffset, 250 kernelOffset,
254 tileMode, 251 tileMode,
255 convolveAlpha); 252 convolveAlpha);
256 } 253 }
OLDNEW
« no previous file with comments | « src/gpu/effects/GrMatrixConvolutionEffect.h ('k') | src/gpu/effects/GrSimpleTextureEffect.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698