OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 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 "SkBitmapProcShader.h" | 8 #include "SkBitmapProcShader.h" |
9 #include "SkBitmapProcState.h" | 9 #include "SkBitmapProcState.h" |
10 #include "SkColor.h" | 10 #include "SkColor.h" |
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
409 str->appendf("LightingShader: ()"); | 409 str->appendf("LightingShader: ()"); |
410 } | 410 } |
411 #endif | 411 #endif |
412 | 412 |
413 sk_sp<SkFlattenable> SkLightingShaderImpl::CreateProc(SkReadBuffer& buf) { | 413 sk_sp<SkFlattenable> SkLightingShaderImpl::CreateProc(SkReadBuffer& buf) { |
414 | 414 |
415 // Discarding SkShader flattenable params | 415 // Discarding SkShader flattenable params |
416 bool hasLocalMatrix = buf.readBool(); | 416 bool hasLocalMatrix = buf.readBool(); |
417 SkAssertResult(!hasLocalMatrix); | 417 SkAssertResult(!hasLocalMatrix); |
418 | 418 |
419 int numLights = buf.readInt(); | 419 sk_sp<SkLights> lights; |
robertphillips
2016/08/11 14:56:18
How does this work? Isn't lights null here ?
vjiaoblack
2016/08/11 19:18:54
Done.
| |
420 | 420 lights->unFlatten(buf); |
421 SkLights::Builder builder; | |
422 | |
423 for (int l = 0; l < numLights; ++l) { | |
424 bool isAmbient = buf.readBool(); | |
425 | |
426 SkColor3f color; | |
427 if (!buf.readScalarArray(&color.fX, 3)) { | |
428 return nullptr; | |
429 } | |
430 | |
431 if (isAmbient) { | |
432 builder.add(SkLights::Light(color)); | |
433 } else { | |
434 SkVector3 dir; | |
435 if (!buf.readScalarArray(&dir.fX, 3)) { | |
436 return nullptr; | |
437 } | |
438 builder.add(SkLights::Light(color, dir)); | |
439 } | |
440 } | |
441 | |
442 sk_sp<SkLights> lights(builder.finish()); | |
443 | 421 |
444 sk_sp<SkNormalSource> normalSource(buf.readFlattenable<SkNormalSource>()); | 422 sk_sp<SkNormalSource> normalSource(buf.readFlattenable<SkNormalSource>()); |
445 | 423 |
446 bool hasDiffuse = buf.readBool(); | 424 bool hasDiffuse = buf.readBool(); |
447 sk_sp<SkShader> diffuseShader = nullptr; | 425 sk_sp<SkShader> diffuseShader = nullptr; |
448 if (hasDiffuse) { | 426 if (hasDiffuse) { |
449 diffuseShader = buf.readFlattenable<SkShader>(); | 427 diffuseShader = buf.readFlattenable<SkShader>(); |
450 } | 428 } |
451 | 429 |
452 return sk_make_sp<SkLightingShaderImpl>(std::move(diffuseShader), std::move( normalSource), | 430 return sk_make_sp<SkLightingShaderImpl>(std::move(diffuseShader), std::move( normalSource), |
453 std::move(lights)); | 431 std::move(lights)); |
454 } | 432 } |
455 | 433 |
456 void SkLightingShaderImpl::flatten(SkWriteBuffer& buf) const { | 434 void SkLightingShaderImpl::flatten(SkWriteBuffer& buf) const { |
457 this->INHERITED::flatten(buf); | 435 this->INHERITED::flatten(buf); |
458 | 436 |
459 buf.writeInt(fLights->numLights()); | 437 fLights->flatten(buf); |
460 for (int l = 0; l < fLights->numLights(); ++l) { | |
461 const SkLights::Light& light = fLights->light(l); | |
462 | |
463 bool isAmbient = SkLights::Light::kAmbient_LightType == light.type(); | |
464 | |
465 buf.writeBool(isAmbient); | |
466 buf.writeScalarArray(&light.color().fX, 3); | |
467 if (!isAmbient) { | |
468 buf.writeScalarArray(&light.dir().fX, 3); | |
469 } | |
470 } | |
471 | 438 |
472 buf.writeFlattenable(fNormalSource.get()); | 439 buf.writeFlattenable(fNormalSource.get()); |
473 buf.writeBool(fDiffuseShader); | 440 buf.writeBool(fDiffuseShader); |
474 if (fDiffuseShader) { | 441 if (fDiffuseShader) { |
475 buf.writeFlattenable(fDiffuseShader.get()); | 442 buf.writeFlattenable(fDiffuseShader.get()); |
476 } | 443 } |
477 } | 444 } |
478 | 445 |
479 size_t SkLightingShaderImpl::onContextSize(const ContextRec& rec) const { | 446 size_t SkLightingShaderImpl::onContextSize(const ContextRec& rec) const { |
480 return sizeof(LightingShaderContext); | 447 return sizeof(LightingShaderContext); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
524 std::move(lights)); | 491 std::move(lights)); |
525 } | 492 } |
526 | 493 |
527 /////////////////////////////////////////////////////////////////////////////// | 494 /////////////////////////////////////////////////////////////////////////////// |
528 | 495 |
529 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingShader) | 496 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingShader) |
530 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkLightingShaderImpl) | 497 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkLightingShaderImpl) |
531 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 498 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
532 | 499 |
533 /////////////////////////////////////////////////////////////////////////////// | 500 /////////////////////////////////////////////////////////////////////////////// |
OLD | NEW |