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 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 private: | 204 private: |
205 | 205 |
206 typedef GrGLGradientEffect INHERITED; | 206 typedef GrGLGradientEffect INHERITED; |
207 | 207 |
208 }; | 208 }; |
209 | 209 |
210 ///////////////////////////////////////////////////////////////////// | 210 ///////////////////////////////////////////////////////////////////// |
211 | 211 |
212 class GrSweepGradient : public GrGradientEffect { | 212 class GrSweepGradient : public GrGradientEffect { |
213 public: | 213 public: |
214 static GrFragmentProcessor* Create(GrContext* ctx, GrShaderDataManager* shad
erDataManager, | 214 static GrFragmentProcessor* Create(GrContext* ctx, GrProcessorDataManager* p
rocDataManager, |
215 const SkSweepGradient& shader, const SkMa
trix& m) { | 215 const SkSweepGradient& shader, const SkMa
trix& m) { |
216 return SkNEW_ARGS(GrSweepGradient, (ctx, shaderDataManager, shader, m)); | 216 return SkNEW_ARGS(GrSweepGradient, (ctx, procDataManager, shader, m)); |
217 } | 217 } |
218 virtual ~GrSweepGradient() { } | 218 virtual ~GrSweepGradient() { } |
219 | 219 |
220 const char* name() const override { return "Sweep Gradient"; } | 220 const char* name() const override { return "Sweep Gradient"; } |
221 | 221 |
222 virtual void getGLProcessorKey(const GrGLSLCaps& caps, | 222 virtual void getGLProcessorKey(const GrGLSLCaps& caps, |
223 GrProcessorKeyBuilder* b) const override { | 223 GrProcessorKeyBuilder* b) const override { |
224 GrGLSweepGradient::GenKey(*this, caps, b); | 224 GrGLSweepGradient::GenKey(*this, caps, b); |
225 } | 225 } |
226 | 226 |
227 GrGLFragmentProcessor* createGLInstance() const override { | 227 GrGLFragmentProcessor* createGLInstance() const override { |
228 return SkNEW_ARGS(GrGLSweepGradient, (*this)); | 228 return SkNEW_ARGS(GrGLSweepGradient, (*this)); |
229 } | 229 } |
230 | 230 |
231 private: | 231 private: |
232 GrSweepGradient(GrContext* ctx, | 232 GrSweepGradient(GrContext* ctx, |
233 GrShaderDataManager* shaderDataManager, | 233 GrProcessorDataManager* procDataManager, |
234 const SkSweepGradient& shader, | 234 const SkSweepGradient& shader, |
235 const SkMatrix& matrix) | 235 const SkMatrix& matrix) |
236 : INHERITED(ctx, shaderDataManager, shader, matrix, SkShader::kClamp_TileMod
e) { | 236 : INHERITED(ctx, procDataManager, shader, matrix, SkShader::kClamp_TileMode)
{ |
237 this->initClassID<GrSweepGradient>(); | 237 this->initClassID<GrSweepGradient>(); |
238 } | 238 } |
239 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; | 239 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; |
240 | 240 |
241 typedef GrGradientEffect INHERITED; | 241 typedef GrGradientEffect INHERITED; |
242 }; | 242 }; |
243 | 243 |
244 ///////////////////////////////////////////////////////////////////// | 244 ///////////////////////////////////////////////////////////////////// |
245 | 245 |
246 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrSweepGradient); | 246 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrSweepGradient); |
247 | 247 |
248 GrFragmentProcessor* GrSweepGradient::TestCreate(GrProcessorTestData* d) { | 248 GrFragmentProcessor* GrSweepGradient::TestCreate(GrProcessorTestData* d) { |
249 SkPoint center = {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}; | 249 SkPoint center = {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}; |
250 | 250 |
251 SkColor colors[kMaxRandomGradientColors]; | 251 SkColor colors[kMaxRandomGradientColors]; |
252 SkScalar stopsArray[kMaxRandomGradientColors]; | 252 SkScalar stopsArray[kMaxRandomGradientColors]; |
253 SkScalar* stops = stopsArray; | 253 SkScalar* stops = stopsArray; |
254 SkShader::TileMode tmIgnored; | 254 SkShader::TileMode tmIgnored; |
255 int colorCount = RandomGradientParams(d->fRandom, colors, &stops, &tmIgnored
); | 255 int colorCount = RandomGradientParams(d->fRandom, colors, &stops, &tmIgnored
); |
256 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateSweep(center.fX, cente
r.fY, | 256 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateSweep(center.fX, cente
r.fY, |
257 colors, stops, c
olorCount)); | 257 colors, stops, c
olorCount)); |
258 SkPaint paint; | 258 SkPaint paint; |
259 GrFragmentProcessor* fp; | 259 GrFragmentProcessor* fp; |
260 GrColor paintColor; | 260 GrColor paintColor; |
261 SkAssertResult(shader->asFragmentProcessor(d->fContext, paint, | 261 SkAssertResult(shader->asFragmentProcessor(d->fContext, paint, |
262 GrTest::TestMatrix(d->fRandom), N
ULL, | 262 GrTest::TestMatrix(d->fRandom), N
ULL, |
263 &paintColor, d->fShaderDataManage
r, &fp)); | 263 &paintColor, d->fProcDataManager,
&fp)); |
264 return fp; | 264 return fp; |
265 } | 265 } |
266 | 266 |
267 ///////////////////////////////////////////////////////////////////// | 267 ///////////////////////////////////////////////////////////////////// |
268 | 268 |
269 void GrGLSweepGradient::emitCode(GrGLFPBuilder* builder, | 269 void GrGLSweepGradient::emitCode(GrGLFPBuilder* builder, |
270 const GrFragmentProcessor& fp, | 270 const GrFragmentProcessor& fp, |
271 const char* outputColor, | 271 const char* outputColor, |
272 const char* inputColor, | 272 const char* inputColor, |
273 const TransformedCoordsArray& coords, | 273 const TransformedCoordsArray& coords, |
(...skipping 14 matching lines...) Expand all Loading... |
288 coords2D.c_str(), coords2D.c_str()); | 288 coords2D.c_str(), coords2D.c_str()); |
289 } | 289 } |
290 this->emitColor(builder, ge, t.c_str(), outputColor, inputColor, samplers); | 290 this->emitColor(builder, ge, t.c_str(), outputColor, inputColor, samplers); |
291 } | 291 } |
292 | 292 |
293 ///////////////////////////////////////////////////////////////////// | 293 ///////////////////////////////////////////////////////////////////// |
294 | 294 |
295 bool SkSweepGradient::asFragmentProcessor(GrContext* context, const SkPaint& pai
nt, | 295 bool SkSweepGradient::asFragmentProcessor(GrContext* context, const SkPaint& pai
nt, |
296 const SkMatrix& viewM, | 296 const SkMatrix& viewM, |
297 const SkMatrix* localMatrix, GrColor*
paintColor, | 297 const SkMatrix* localMatrix, GrColor*
paintColor, |
298 GrShaderDataManager* shaderDataManager
, | 298 GrProcessorDataManager* procDataManage
r, |
299 GrFragmentProcessor** effect) const { | 299 GrFragmentProcessor** effect) const { |
300 | 300 |
301 SkMatrix matrix; | 301 SkMatrix matrix; |
302 if (!this->getLocalMatrix().invert(&matrix)) { | 302 if (!this->getLocalMatrix().invert(&matrix)) { |
303 return false; | 303 return false; |
304 } | 304 } |
305 if (localMatrix) { | 305 if (localMatrix) { |
306 SkMatrix inv; | 306 SkMatrix inv; |
307 if (!localMatrix->invert(&inv)) { | 307 if (!localMatrix->invert(&inv)) { |
308 return false; | 308 return false; |
309 } | 309 } |
310 matrix.postConcat(inv); | 310 matrix.postConcat(inv); |
311 } | 311 } |
312 matrix.postConcat(fPtsToUnit); | 312 matrix.postConcat(fPtsToUnit); |
313 | 313 |
314 *effect = GrSweepGradient::Create(context, shaderDataManager, *this, matrix)
; | 314 *effect = GrSweepGradient::Create(context, procDataManager, *this, matrix); |
315 *paintColor = SkColor2GrColorJustAlpha(paint.getColor()); | 315 *paintColor = SkColor2GrColorJustAlpha(paint.getColor()); |
316 | 316 |
317 return true; | 317 return true; |
318 } | 318 } |
319 | 319 |
320 #else | 320 #else |
321 | 321 |
322 bool SkSweepGradient::asFragmentProcessor(GrContext*, const SkPaint&, const SkMa
trix&, | 322 bool SkSweepGradient::asFragmentProcessor(GrContext*, const SkPaint&, const SkMa
trix&, |
323 const SkMatrix*, GrColor*, GrShaderDat
aManager*, | 323 const SkMatrix*, GrColor*, GrProcessor
DataManager*, |
324 GrFragmentProcessor**) const { | 324 GrFragmentProcessor**) const { |
325 SkDEBUGFAIL("Should not call in GPU-less build"); | 325 SkDEBUGFAIL("Should not call in GPU-less build"); |
326 return false; | 326 return false; |
327 } | 327 } |
328 | 328 |
329 #endif | 329 #endif |
330 | 330 |
331 #ifndef SK_IGNORE_TO_STRING | 331 #ifndef SK_IGNORE_TO_STRING |
332 void SkSweepGradient::toString(SkString* str) const { | 332 void SkSweepGradient::toString(SkString* str) const { |
333 str->append("SkSweepGradient: ("); | 333 str->append("SkSweepGradient: ("); |
334 | 334 |
335 str->append("center: ("); | 335 str->append("center: ("); |
336 str->appendScalar(fCenter.fX); | 336 str->appendScalar(fCenter.fX); |
337 str->append(", "); | 337 str->append(", "); |
338 str->appendScalar(fCenter.fY); | 338 str->appendScalar(fCenter.fY); |
339 str->append(") "); | 339 str->append(") "); |
340 | 340 |
341 this->INHERITED::toString(str); | 341 this->INHERITED::toString(str); |
342 | 342 |
343 str->append(")"); | 343 str->append(")"); |
344 } | 344 } |
345 #endif | 345 #endif |
OLD | NEW |