| 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 "SkBitmapProcState.h" | 8 #include "SkBitmapProcState.h" |
| 9 #include "SkColor.h" | 9 #include "SkColor.h" |
| 10 #include "SkEmptyShader.h" | 10 #include "SkEmptyShader.h" |
| (...skipping 588 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 599 SkVector3 dir; | 599 SkVector3 dir; |
| 600 if (!buf.readScalarArray(&dir.fX, 3)) { | 600 if (!buf.readScalarArray(&dir.fX, 3)) { |
| 601 return nullptr; | 601 return nullptr; |
| 602 } | 602 } |
| 603 builder.add(SkLight(color, dir)); | 603 builder.add(SkLight(color, dir)); |
| 604 } | 604 } |
| 605 } | 605 } |
| 606 | 606 |
| 607 SkAutoTUnref<const SkLightingShader::Lights> lights(builder.finish()); | 607 SkAutoTUnref<const SkLightingShader::Lights> lights(builder.finish()); |
| 608 | 608 |
| 609 return sk_make_sp<SkLightingShaderImpl>(diffuse, normal, lights, SkVector::M
ake(1.0f, 0.0f), | 609 SkVector invNormRotation = {1,0}; |
| 610 if (!buf.isVersionLT(SkReadBuffer::kLightingShaderWritesInvNormRotation)) { |
| 611 invNormRotation = buf.readPoint(); |
| 612 } |
| 613 |
| 614 return sk_make_sp<SkLightingShaderImpl>(diffuse, normal, lights, invNormRota
tion, |
| 610 &diffLocalM, &normLocalM); | 615 &diffLocalM, &normLocalM); |
| 611 } | 616 } |
| 612 | 617 |
| 613 void SkLightingShaderImpl::flatten(SkWriteBuffer& buf) const { | 618 void SkLightingShaderImpl::flatten(SkWriteBuffer& buf) const { |
| 614 this->INHERITED::flatten(buf); | 619 this->INHERITED::flatten(buf); |
| 615 | 620 |
| 616 bool hasNormLocalM = !fNormLocalMatrix.isIdentity(); | 621 bool hasNormLocalM = !fNormLocalMatrix.isIdentity(); |
| 617 buf.writeBool(hasNormLocalM); | 622 buf.writeBool(hasNormLocalM); |
| 618 if (hasNormLocalM) { | 623 if (hasNormLocalM) { |
| 619 buf.writeMatrix(fNormLocalMatrix); | 624 buf.writeMatrix(fNormLocalMatrix); |
| 620 } | 625 } |
| 621 | 626 |
| 622 buf.writeBitmap(fDiffuseMap); | 627 buf.writeBitmap(fDiffuseMap); |
| 623 buf.writeBitmap(fNormalMap); | 628 buf.writeBitmap(fNormalMap); |
| 624 | 629 |
| 625 buf.writeInt(fLights->numLights()); | 630 buf.writeInt(fLights->numLights()); |
| 626 for (int l = 0; l < fLights->numLights(); ++l) { | 631 for (int l = 0; l < fLights->numLights(); ++l) { |
| 627 const SkLight& light = fLights->light(l); | 632 const SkLight& light = fLights->light(l); |
| 628 | 633 |
| 629 bool isAmbient = SkLight::kAmbient_LightType == light.type(); | 634 bool isAmbient = SkLight::kAmbient_LightType == light.type(); |
| 630 | 635 |
| 631 buf.writeBool(isAmbient); | 636 buf.writeBool(isAmbient); |
| 632 buf.writeScalarArray(&light.color().fX, 3); | 637 buf.writeScalarArray(&light.color().fX, 3); |
| 633 if (!isAmbient) { | 638 if (!isAmbient) { |
| 634 buf.writeScalarArray(&light.dir().fX, 3); | 639 buf.writeScalarArray(&light.dir().fX, 3); |
| 635 } | 640 } |
| 636 } | 641 } |
| 642 buf.writePoint(fInvNormRotation); |
| 637 } | 643 } |
| 638 | 644 |
| 639 bool SkLightingShaderImpl::computeNormTotalInverse(const ContextRec& rec, | 645 bool SkLightingShaderImpl::computeNormTotalInverse(const ContextRec& rec, |
| 640 SkMatrix* normTotalInverse) c
onst { | 646 SkMatrix* normTotalInverse) c
onst { |
| 641 SkMatrix total; | 647 SkMatrix total; |
| 642 total.setConcat(*rec.fMatrix, fNormLocalMatrix); | 648 total.setConcat(*rec.fMatrix, fNormLocalMatrix); |
| 643 | 649 |
| 644 const SkMatrix* m = &total; | 650 const SkMatrix* m = &total; |
| 645 if (rec.fLocalMatrix) { | 651 if (rec.fLocalMatrix) { |
| 646 total.setConcat(*m, *rec.fLocalMatrix); | 652 total.setConcat(*m, *rec.fLocalMatrix); |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 716 normLocalM); | 722 normLocalM); |
| 717 } | 723 } |
| 718 | 724 |
| 719 /////////////////////////////////////////////////////////////////////////////// | 725 /////////////////////////////////////////////////////////////////////////////// |
| 720 | 726 |
| 721 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingShader) | 727 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingShader) |
| 722 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkLightingShaderImpl) | 728 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkLightingShaderImpl) |
| 723 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 729 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
| 724 | 730 |
| 725 /////////////////////////////////////////////////////////////////////////////// | 731 /////////////////////////////////////////////////////////////////////////////// |
| OLD | NEW |