OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 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 | 7 |
8 #include "SkLinearGradient.h" | 8 #include "SkLinearGradient.h" |
9 | 9 |
10 static inline int repeat_bits(int x, const int bits) { | 10 static inline int repeat_bits(int x, const int bits) { |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
56 | 56 |
57 SkLinearGradient::SkLinearGradient(const SkPoint pts[2], const Descriptor& desc) | 57 SkLinearGradient::SkLinearGradient(const SkPoint pts[2], const Descriptor& desc) |
58 : SkGradientShaderBase(desc, pts_to_unit_matrix(pts)) | 58 : SkGradientShaderBase(desc, pts_to_unit_matrix(pts)) |
59 , fStart(pts[0]) | 59 , fStart(pts[0]) |
60 , fEnd(pts[1]) { | 60 , fEnd(pts[1]) { |
61 } | 61 } |
62 | 62 |
63 SkFlattenable* SkLinearGradient::CreateProc(SkReadBuffer& buffer) { | 63 SkFlattenable* SkLinearGradient::CreateProc(SkReadBuffer& buffer) { |
64 DescriptorScope desc; | 64 DescriptorScope desc; |
65 if (!desc.unflatten(buffer)) { | 65 if (!desc.unflatten(buffer)) { |
66 return NULL; | 66 return nullptr; |
67 } | 67 } |
68 SkPoint pts[2]; | 68 SkPoint pts[2]; |
69 pts[0] = buffer.readPoint(); | 69 pts[0] = buffer.readPoint(); |
70 pts[1] = buffer.readPoint(); | 70 pts[1] = buffer.readPoint(); |
71 return SkGradientShader::CreateLinear(pts, desc.fColors, desc.fPos, desc.fCo
unt, | 71 return SkGradientShader::CreateLinear(pts, desc.fColors, desc.fPos, desc.fCo
unt, |
72 desc.fTileMode, desc.fGradFlags, desc.
fLocalMatrix); | 72 desc.fTileMode, desc.fGradFlags, desc.
fLocalMatrix); |
73 } | 73 } |
74 | 74 |
75 void SkLinearGradient::flatten(SkWriteBuffer& buffer) const { | 75 void SkLinearGradient::flatten(SkWriteBuffer& buffer) const { |
76 this->INHERITED::flatten(buffer); | 76 this->INHERITED::flatten(buffer); |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
221 const SkPMColor* SK_RESTRICT cache = fCache->getCache32(); | 221 const SkPMColor* SK_RESTRICT cache = fCache->getCache32(); |
222 int toggle = init_dither_toggle(x, y); | 222 int toggle = init_dither_toggle(x, y); |
223 | 223 |
224 if (fDstToIndexClass != kPerspective_MatrixClass) { | 224 if (fDstToIndexClass != kPerspective_MatrixClass) { |
225 dstProc(fDstToIndex, SkIntToScalar(x) + SK_ScalarHalf, | 225 dstProc(fDstToIndex, SkIntToScalar(x) + SK_ScalarHalf, |
226 SkIntToScalar(y) + SK_ScalarHalf, &srcPt); | 226 SkIntToScalar(y) + SK_ScalarHalf, &srcPt); |
227 SkGradFixed dx, fx = SkScalarToGradFixed(srcPt.fX); | 227 SkGradFixed dx, fx = SkScalarToGradFixed(srcPt.fX); |
228 | 228 |
229 if (fDstToIndexClass == kFixedStepInX_MatrixClass) { | 229 if (fDstToIndexClass == kFixedStepInX_MatrixClass) { |
230 SkFixed dxStorage[1]; | 230 SkFixed dxStorage[1]; |
231 (void)fDstToIndex.fixedStepInX(SkIntToScalar(y), dxStorage, NULL); | 231 (void)fDstToIndex.fixedStepInX(SkIntToScalar(y), dxStorage, nullptr)
; |
232 // todo: do we need a real/high-precision value for dx here? | 232 // todo: do we need a real/high-precision value for dx here? |
233 dx = SkFixedToGradFixed(dxStorage[0]); | 233 dx = SkFixedToGradFixed(dxStorage[0]); |
234 } else { | 234 } else { |
235 SkASSERT(fDstToIndexClass == kLinear_MatrixClass); | 235 SkASSERT(fDstToIndexClass == kLinear_MatrixClass); |
236 dx = SkScalarToGradFixed(fDstToIndex.getScaleX()); | 236 dx = SkScalarToGradFixed(fDstToIndex.getScaleX()); |
237 } | 237 } |
238 | 238 |
239 LinearShadeProc shadeProc = shadeSpan_linear_repeat; | 239 LinearShadeProc shadeProc = shadeSpan_linear_repeat; |
240 if (0 == dx) { | 240 if (0 == dx) { |
241 shadeProc = shadeSpan_linear_vertical_lerp; | 241 shadeProc = shadeSpan_linear_vertical_lerp; |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
394 const uint16_t* SK_RESTRICT cache = fCache->getCache16(); | 394 const uint16_t* SK_RESTRICT cache = fCache->getCache16(); |
395 int toggle = init_dither_toggle16(x, y); | 395 int toggle = init_dither_toggle16(x, y); |
396 | 396 |
397 if (fDstToIndexClass != kPerspective_MatrixClass) { | 397 if (fDstToIndexClass != kPerspective_MatrixClass) { |
398 dstProc(fDstToIndex, SkIntToScalar(x) + SK_ScalarHalf, | 398 dstProc(fDstToIndex, SkIntToScalar(x) + SK_ScalarHalf, |
399 SkIntToScalar(y) + SK_ScalarHalf, &srcPt); | 399 SkIntToScalar(y) + SK_ScalarHalf, &srcPt); |
400 SkGradFixed dx, fx = SkScalarToGradFixed(srcPt.fX); | 400 SkGradFixed dx, fx = SkScalarToGradFixed(srcPt.fX); |
401 | 401 |
402 if (fDstToIndexClass == kFixedStepInX_MatrixClass) { | 402 if (fDstToIndexClass == kFixedStepInX_MatrixClass) { |
403 SkFixed dxStorage[1]; | 403 SkFixed dxStorage[1]; |
404 (void)fDstToIndex.fixedStepInX(SkIntToScalar(y), dxStorage, NULL); | 404 (void)fDstToIndex.fixedStepInX(SkIntToScalar(y), dxStorage, nullptr)
; |
405 // todo: do we need a real/high-precision value for dx here? | 405 // todo: do we need a real/high-precision value for dx here? |
406 dx = SkFixedToGradFixed(dxStorage[0]); | 406 dx = SkFixedToGradFixed(dxStorage[0]); |
407 } else { | 407 } else { |
408 SkASSERT(fDstToIndexClass == kLinear_MatrixClass); | 408 SkASSERT(fDstToIndexClass == kLinear_MatrixClass); |
409 dx = SkScalarToGradFixed(fDstToIndex.getScaleX()); | 409 dx = SkScalarToGradFixed(fDstToIndex.getScaleX()); |
410 } | 410 } |
411 | 411 |
412 LinearShade16Proc shadeProc = shadeSpan16_linear_repeat; | 412 LinearShade16Proc shadeProc = shadeSpan16_linear_repeat; |
413 if (fixed_nearly_zero(SkGradFixedToFixed(dx))) { | 413 if (fixed_nearly_zero(SkGradFixedToFixed(dx))) { |
414 shadeProc = shadeSpan16_linear_vertical; | 414 shadeProc = shadeSpan16_linear_vertical; |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
516 SkScalar* stops = stopsArray; | 516 SkScalar* stops = stopsArray; |
517 SkShader::TileMode tm; | 517 SkShader::TileMode tm; |
518 int colorCount = RandomGradientParams(d->fRandom, colors, &stops, &tm); | 518 int colorCount = RandomGradientParams(d->fRandom, colors, &stops, &tm); |
519 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateLinear(points, | 519 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateLinear(points, |
520 colors, stops,
colorCount, | 520 colors, stops,
colorCount, |
521 tm)); | 521 tm)); |
522 SkPaint paint; | 522 SkPaint paint; |
523 GrColor paintColor; | 523 GrColor paintColor; |
524 GrFragmentProcessor* fp; | 524 GrFragmentProcessor* fp; |
525 SkAssertResult(shader->asFragmentProcessor(d->fContext, paint, | 525 SkAssertResult(shader->asFragmentProcessor(d->fContext, paint, |
526 GrTest::TestMatrix(d->fRandom), N
ULL, | 526 GrTest::TestMatrix(d->fRandom), n
ullptr, |
527 &paintColor, d->fProcDataManager,
&fp)); | 527 &paintColor, d->fProcDataManager,
&fp)); |
528 return fp; | 528 return fp; |
529 } | 529 } |
530 | 530 |
531 ///////////////////////////////////////////////////////////////////// | 531 ///////////////////////////////////////////////////////////////////// |
532 | 532 |
533 void GrGLLinearGradient::emitCode(EmitArgs& args) { | 533 void GrGLLinearGradient::emitCode(EmitArgs& args) { |
534 const GrLinearGradient& ge = args.fFp.cast<GrLinearGradient>(); | 534 const GrLinearGradient& ge = args.fFp.cast<GrLinearGradient>(); |
535 this->emitUniforms(args.fBuilder, ge); | 535 this->emitUniforms(args.fBuilder, ge); |
536 SkString t = args.fBuilder->getFragmentShaderBuilder()->ensureFSCoords2D(arg
s.fCoords, 0); | 536 SkString t = args.fBuilder->getFragmentShaderBuilder()->ensureFSCoords2D(arg
s.fCoords, 0); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
583 str->append("SkLinearGradient ("); | 583 str->append("SkLinearGradient ("); |
584 | 584 |
585 str->appendf("start: (%f, %f)", fStart.fX, fStart.fY); | 585 str->appendf("start: (%f, %f)", fStart.fX, fStart.fY); |
586 str->appendf(" end: (%f, %f) ", fEnd.fX, fEnd.fY); | 586 str->appendf(" end: (%f, %f) ", fEnd.fX, fEnd.fY); |
587 | 587 |
588 this->INHERITED::toString(str); | 588 this->INHERITED::toString(str); |
589 | 589 |
590 str->append(")"); | 590 str->append(")"); |
591 } | 591 } |
592 #endif | 592 #endif |
OLD | NEW |