| 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 |