Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(70)

Side by Side Diff: src/core/SkLightingShader.cpp

Issue 1870443002: Serialize invNormRotation in SkLightingShader. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: rebase Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « include/core/SkPicture.h ('k') | src/core/SkReadBuffer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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 ///////////////////////////////////////////////////////////////////////////////
OLDNEW
« no previous file with comments | « include/core/SkPicture.h ('k') | src/core/SkReadBuffer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698