OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright 2016 Google Inc. | 2 * Copyright 2016 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 | 8 |
9 #include "SkLights.h" | 9 #include "SkLights.h" |
10 #include "SkReadBuffer.h" | 10 #include "SkReadBuffer.h" |
(...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
585 str->appendf("ShadowShader: ()"); | 585 str->appendf("ShadowShader: ()"); |
586 } | 586 } |
587 #endif | 587 #endif |
588 | 588 |
589 sk_sp<SkFlattenable> SkShadowShaderImpl::CreateProc(SkReadBuffer& buf) { | 589 sk_sp<SkFlattenable> SkShadowShaderImpl::CreateProc(SkReadBuffer& buf) { |
590 | 590 |
591 // Discarding SkShader flattenable params | 591 // Discarding SkShader flattenable params |
592 bool hasLocalMatrix = buf.readBool(); | 592 bool hasLocalMatrix = buf.readBool(); |
593 SkAssertResult(!hasLocalMatrix); | 593 SkAssertResult(!hasLocalMatrix); |
594 | 594 |
595 int numLights = buf.readInt(); | 595 sk_sp<SkLights> lights; |
robertphillips
2016/08/11 14:56:18
same here
vjiaoblack
2016/08/11 19:18:54
Done.
| |
596 | 596 lights->unFlatten(buf); |
597 SkLights::Builder builder; | |
598 | |
599 for (int l = 0; l < numLights; ++l) { | |
600 bool isAmbient = buf.readBool(); | |
601 | |
602 SkColor3f color; | |
603 if (!buf.readScalarArray(&color.fX, 3)) { | |
604 return nullptr; | |
605 } | |
606 | |
607 if (isAmbient) { | |
608 builder.add(SkLights::Light(color)); | |
609 } else { | |
610 SkVector3 dir; | |
611 if (!buf.readScalarArray(&dir.fX, 3)) { | |
612 return nullptr; | |
613 } | |
614 | |
615 sk_sp<SkImage> depthMap; | |
616 if (!(depthMap = sk_ref_sp<SkImage>(buf.readImage()))) { | |
617 return nullptr; | |
618 } | |
619 | |
620 SkLights::Light light = SkLights::Light(color, dir); | |
621 light.setShadowMap(depthMap); | |
622 | |
623 builder.add(light); | |
624 } | |
625 } | |
626 | |
627 sk_sp<SkLights> lights(builder.finish()); | |
628 | 597 |
629 int diffuseWidth = buf.readInt(); | 598 int diffuseWidth = buf.readInt(); |
630 int diffuseHeight = buf.readInt(); | 599 int diffuseHeight = buf.readInt(); |
631 | 600 |
632 sk_sp<SkShader> povDepthShader(buf.readFlattenable<SkShader>()); | 601 sk_sp<SkShader> povDepthShader(buf.readFlattenable<SkShader>()); |
633 sk_sp<SkShader> diffuseShader(buf.readFlattenable<SkShader>()); | 602 sk_sp<SkShader> diffuseShader(buf.readFlattenable<SkShader>()); |
634 | 603 |
635 return sk_make_sp<SkShadowShaderImpl>(std::move(povDepthShader), | 604 return sk_make_sp<SkShadowShaderImpl>(std::move(povDepthShader), |
636 std::move(diffuseShader), | 605 std::move(diffuseShader), |
637 std::move(lights), | 606 std::move(lights), |
638 diffuseWidth, diffuseHeight); | 607 diffuseWidth, diffuseHeight); |
639 } | 608 } |
640 | 609 |
641 void SkShadowShaderImpl::flatten(SkWriteBuffer& buf) const { | 610 void SkShadowShaderImpl::flatten(SkWriteBuffer& buf) const { |
642 this->INHERITED::flatten(buf); | 611 this->INHERITED::flatten(buf); |
643 | 612 |
644 buf.writeInt(fLights->numLights()); | 613 fLights->flatten(buf); |
645 | |
646 for (int l = 0; l < fLights->numLights(); ++l) { | |
647 const SkLights::Light& light = fLights->light(l); | |
648 | |
649 bool isAmbient = SkLights::Light::kAmbient_LightType == light.type(); | |
650 | |
651 buf.writeBool(isAmbient); | |
652 buf.writeScalarArray(&light.color().fX, 3); | |
653 if (!isAmbient) { | |
654 buf.writeScalarArray(&light.dir().fX, 3); | |
655 } | |
656 | |
657 buf.writeImage(light.getShadowMap()); | |
658 } | |
659 | 614 |
660 buf.writeInt(fDiffuseWidth); | 615 buf.writeInt(fDiffuseWidth); |
661 buf.writeInt(fDiffuseHeight); | 616 buf.writeInt(fDiffuseHeight); |
662 | 617 |
663 buf.writeFlattenable(fPovDepthShader.get()); | 618 buf.writeFlattenable(fPovDepthShader.get()); |
664 buf.writeFlattenable(fDiffuseShader.get()); | 619 buf.writeFlattenable(fDiffuseShader.get()); |
665 } | 620 } |
666 | 621 |
667 size_t SkShadowShaderImpl::onContextSize(const ContextRec& rec) const { | 622 size_t SkShadowShaderImpl::onContextSize(const ContextRec& rec) const { |
668 return sizeof(ShadowShaderContext); | 623 return sizeof(ShadowShaderContext); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
717 | 672 |
718 /////////////////////////////////////////////////////////////////////////////// | 673 /////////////////////////////////////////////////////////////////////////////// |
719 | 674 |
720 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkShadowShader) | 675 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkShadowShader) |
721 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkShadowShaderImpl) | 676 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkShadowShaderImpl) |
722 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 677 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
723 | 678 |
724 /////////////////////////////////////////////////////////////////////////////// | 679 /////////////////////////////////////////////////////////////////////////////// |
725 | 680 |
726 #endif | 681 #endif |
OLD | NEW |