OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 #include "SkSweepGradient.h" | 9 #include "SkSweepGradient.h" |
10 | 10 |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
184 private: | 184 private: |
185 | 185 |
186 typedef GrGLGradientEffect INHERITED; | 186 typedef GrGLGradientEffect INHERITED; |
187 | 187 |
188 }; | 188 }; |
189 | 189 |
190 ///////////////////////////////////////////////////////////////////// | 190 ///////////////////////////////////////////////////////////////////// |
191 | 191 |
192 class GrSweepGradient : public GrGradientEffect { | 192 class GrSweepGradient : public GrGradientEffect { |
193 public: | 193 public: |
194 static GrFragmentProcessor* Create(GrContext* ctx, GrProcessorDataManager* p
rocDataManager, | 194 static GrFragmentProcessor* Create(GrContext* ctx, const SkSweepGradient& sh
ader, |
195 const SkSweepGradient& shader, const SkMa
trix& m) { | 195 const SkMatrix& m) { |
196 return new GrSweepGradient(ctx, procDataManager, shader, m); | 196 return new GrSweepGradient(ctx, shader, m); |
197 } | 197 } |
198 virtual ~GrSweepGradient() { } | 198 virtual ~GrSweepGradient() { } |
199 | 199 |
200 const char* name() const override { return "Sweep Gradient"; } | 200 const char* name() const override { return "Sweep Gradient"; } |
201 | 201 |
202 private: | 202 private: |
203 GrSweepGradient(GrContext* ctx, | 203 GrSweepGradient(GrContext* ctx, |
204 GrProcessorDataManager* procDataManager, | |
205 const SkSweepGradient& shader, | 204 const SkSweepGradient& shader, |
206 const SkMatrix& matrix) | 205 const SkMatrix& matrix) |
207 : INHERITED(ctx, procDataManager, shader, matrix, SkShader::kClamp_TileMode)
{ | 206 : INHERITED(ctx, shader, matrix, SkShader::kClamp_TileMode) { |
208 this->initClassID<GrSweepGradient>(); | 207 this->initClassID<GrSweepGradient>(); |
209 } | 208 } |
210 | 209 |
211 GrGLFragmentProcessor* onCreateGLInstance() const override { | 210 GrGLFragmentProcessor* onCreateGLInstance() const override { |
212 return new GrGLSweepGradient(*this); | 211 return new GrGLSweepGradient(*this); |
213 } | 212 } |
214 | 213 |
215 virtual void onGetGLProcessorKey(const GrGLSLCaps& caps, | 214 virtual void onGetGLProcessorKey(const GrGLSLCaps& caps, |
216 GrProcessorKeyBuilder* b) const override { | 215 GrProcessorKeyBuilder* b) const override { |
217 GrGLSweepGradient::GenKey(*this, caps, b); | 216 GrGLSweepGradient::GenKey(*this, caps, b); |
(...skipping 13 matching lines...) Expand all Loading... |
231 | 230 |
232 SkColor colors[kMaxRandomGradientColors]; | 231 SkColor colors[kMaxRandomGradientColors]; |
233 SkScalar stopsArray[kMaxRandomGradientColors]; | 232 SkScalar stopsArray[kMaxRandomGradientColors]; |
234 SkScalar* stops = stopsArray; | 233 SkScalar* stops = stopsArray; |
235 SkShader::TileMode tmIgnored; | 234 SkShader::TileMode tmIgnored; |
236 int colorCount = RandomGradientParams(d->fRandom, colors, &stops, &tmIgnored
); | 235 int colorCount = RandomGradientParams(d->fRandom, colors, &stops, &tmIgnored
); |
237 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateSweep(center.fX, cente
r.fY, | 236 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateSweep(center.fX, cente
r.fY, |
238 colors, stops, c
olorCount)); | 237 colors, stops, c
olorCount)); |
239 const GrFragmentProcessor* fp = shader->asFragmentProcessor(d->fContext, | 238 const GrFragmentProcessor* fp = shader->asFragmentProcessor(d->fContext, |
240 GrTest::TestMatr
ix(d->fRandom), | 239 GrTest::TestMatr
ix(d->fRandom), |
241 NULL, kNone_SkFi
lterQuality, | 240 NULL, kNone_SkFi
lterQuality); |
242 d->fProcDataMana
ger); | |
243 GrAlwaysAssert(fp); | 241 GrAlwaysAssert(fp); |
244 return fp; | 242 return fp; |
245 } | 243 } |
246 | 244 |
247 ///////////////////////////////////////////////////////////////////// | 245 ///////////////////////////////////////////////////////////////////// |
248 | 246 |
249 void GrGLSweepGradient::emitCode(EmitArgs& args) { | 247 void GrGLSweepGradient::emitCode(EmitArgs& args) { |
250 const GrSweepGradient& ge = args.fFp.cast<GrSweepGradient>(); | 248 const GrSweepGradient& ge = args.fFp.cast<GrSweepGradient>(); |
251 this->emitUniforms(args.fBuilder, ge); | 249 this->emitUniforms(args.fBuilder, ge); |
252 SkString coords2D = args.fBuilder->getFragmentShaderBuilder() | 250 SkString coords2D = args.fBuilder->getFragmentShaderBuilder() |
(...skipping 13 matching lines...) Expand all Loading... |
266 this->emitColor(args.fBuilder, ge, t.c_str(), args.fOutputColor, args.fInput
Color, | 264 this->emitColor(args.fBuilder, ge, t.c_str(), args.fOutputColor, args.fInput
Color, |
267 args.fSamplers); | 265 args.fSamplers); |
268 } | 266 } |
269 | 267 |
270 ///////////////////////////////////////////////////////////////////// | 268 ///////////////////////////////////////////////////////////////////// |
271 | 269 |
272 const GrFragmentProcessor* SkSweepGradient::asFragmentProcessor( | 270 const GrFragmentProcessor* SkSweepGradient::asFragmentProcessor( |
273 GrContext* context, | 271 GrContext* context, |
274 const SkMatrix& viewM, | 272 const SkMatrix& viewM, |
275 const SkMatrix* localMatrix, | 273 const SkMatrix* localMatrix, |
276 SkFilterQuality, | 274 SkFilterQuality) const { |
277 GrProcessorDataManager* proc
DataManager) const { | |
278 | 275 |
279 SkMatrix matrix; | 276 SkMatrix matrix; |
280 if (!this->getLocalMatrix().invert(&matrix)) { | 277 if (!this->getLocalMatrix().invert(&matrix)) { |
281 return nullptr; | 278 return nullptr; |
282 } | 279 } |
283 if (localMatrix) { | 280 if (localMatrix) { |
284 SkMatrix inv; | 281 SkMatrix inv; |
285 if (!localMatrix->invert(&inv)) { | 282 if (!localMatrix->invert(&inv)) { |
286 return nullptr; | 283 return nullptr; |
287 } | 284 } |
288 matrix.postConcat(inv); | 285 matrix.postConcat(inv); |
289 } | 286 } |
290 matrix.postConcat(fPtsToUnit); | 287 matrix.postConcat(fPtsToUnit); |
291 | 288 |
292 SkAutoTUnref<const GrFragmentProcessor> inner( | 289 SkAutoTUnref<const GrFragmentProcessor> inner( |
293 GrSweepGradient::Create(context, procDataManager, *this, matrix)); | 290 GrSweepGradient::Create(context, *this, matrix)); |
294 return GrFragmentProcessor::MulOutputByInputAlpha(inner); | 291 return GrFragmentProcessor::MulOutputByInputAlpha(inner); |
295 } | 292 } |
296 | 293 |
297 #endif | 294 #endif |
298 | 295 |
299 #ifndef SK_IGNORE_TO_STRING | 296 #ifndef SK_IGNORE_TO_STRING |
300 void SkSweepGradient::toString(SkString* str) const { | 297 void SkSweepGradient::toString(SkString* str) const { |
301 str->append("SkSweepGradient: ("); | 298 str->append("SkSweepGradient: ("); |
302 | 299 |
303 str->append("center: ("); | 300 str->append("center: ("); |
304 str->appendScalar(fCenter.fX); | 301 str->appendScalar(fCenter.fX); |
305 str->append(", "); | 302 str->append(", "); |
306 str->appendScalar(fCenter.fY); | 303 str->appendScalar(fCenter.fY); |
307 str->append(") "); | 304 str->append(") "); |
308 | 305 |
309 this->INHERITED::toString(str); | 306 this->INHERITED::toString(str); |
310 | 307 |
311 str->append(")"); | 308 str->append(")"); |
312 } | 309 } |
313 #endif | 310 #endif |
OLD | NEW |