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

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

Issue 1253223003: Update SkLightingShader to take a localMatrix (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Fix serialization bug Created 5 years, 4 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 | « src/effects/SkLightingShader.h ('k') | no next file » | 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 /* 2 /*
3 * Copyright 2015 Google Inc. 3 * Copyright 2015 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 #include "SkBitmapProcState.h" 9 #include "SkBitmapProcState.h"
10 #include "SkColor.h" 10 #include "SkColor.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 44
45 /** Create a new lighting shader that use the provided normal map, light 45 /** Create a new lighting shader that use the provided normal map, light
46 and ambient color to light the diffuse bitmap. 46 and ambient color to light the diffuse bitmap.
47 @param diffuse the diffuse bitmap 47 @param diffuse the diffuse bitmap
48 @param normal the normal map 48 @param normal the normal map
49 @param light the light applied to the normal map 49 @param light the light applied to the normal map
50 @param ambient the linear (unpremul) ambient light color 50 @param ambient the linear (unpremul) ambient light color
51 */ 51 */
52 SkLightingShaderImpl(const SkBitmap& diffuse, const SkBitmap& normal, 52 SkLightingShaderImpl(const SkBitmap& diffuse, const SkBitmap& normal,
53 const SkLightingShader::Light& light, 53 const SkLightingShader::Light& light,
54 const SkColor ambient) 54 const SkColor ambient, const SkMatrix* localMatrix)
55 : fDiffuseMap(diffuse) 55 : INHERITED(localMatrix)
56 , fDiffuseMap(diffuse)
56 , fNormalMap(normal) 57 , fNormalMap(normal)
57 , fLight(light) 58 , fLight(light)
58 , fAmbientColor(ambient) { 59 , fAmbientColor(ambient) {
59 if (!fLight.fDirection.normalize()) { 60 if (!fLight.fDirection.normalize()) {
60 fLight.fDirection = SkPoint3::Make(0.0f, 0.0f, 1.0f); 61 fLight.fDirection = SkPoint3::Make(0.0f, 0.0f, 1.0f);
61 } 62 }
62 SkColorSetA(fLight.fColor, 0xFF); 63 SkColorSetA(fLight.fColor, 0xFF);
63 SkColorSetA(fAmbientColor, 0xFF); 64 SkColorSetA(fAmbientColor, 0xFF);
64 } 65 }
65 66
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 474
474 //////////////////////////////////////////////////////////////////////////// 475 ////////////////////////////////////////////////////////////////////////////
475 476
476 #ifndef SK_IGNORE_TO_STRING 477 #ifndef SK_IGNORE_TO_STRING
477 void SkLightingShaderImpl::toString(SkString* str) const { 478 void SkLightingShaderImpl::toString(SkString* str) const {
478 str->appendf("LightingShader: ()"); 479 str->appendf("LightingShader: ()");
479 } 480 }
480 #endif 481 #endif
481 482
482 SkFlattenable* SkLightingShaderImpl::CreateProc(SkReadBuffer& buf) { 483 SkFlattenable* SkLightingShaderImpl::CreateProc(SkReadBuffer& buf) {
484 SkMatrix localMatrix;
485 buf.readMatrix(&localMatrix);
486
483 SkBitmap diffuse; 487 SkBitmap diffuse;
484 if (!buf.readBitmap(&diffuse)) { 488 if (!buf.readBitmap(&diffuse)) {
485 return NULL; 489 return NULL;
486 } 490 }
487 diffuse.setImmutable(); 491 diffuse.setImmutable();
488 492
489 SkBitmap normal; 493 SkBitmap normal;
490 if (!buf.readBitmap(&normal)) { 494 if (!buf.readBitmap(&normal)) {
491 return NULL; 495 return NULL;
492 } 496 }
493 normal.setImmutable(); 497 normal.setImmutable();
494 498
495 SkLightingShader::Light light; 499 SkLightingShader::Light light;
496 if (!buf.readScalarArray(&light.fDirection.fX, 3)) { 500 if (!buf.readScalarArray(&light.fDirection.fX, 3)) {
497 return NULL; 501 return NULL;
498 } 502 }
499 light.fColor = buf.readColor(); 503 light.fColor = buf.readColor();
500 504
501 SkColor ambient = buf.readColor(); 505 SkColor ambient = buf.readColor();
502 506
503 // TODO: this would be nice to enable 507 return SkNEW_ARGS(SkLightingShaderImpl, (diffuse, normal, light, ambient, &l ocalMatrix));
504 // return SkCreateLightingShader(diffuse, normal, light, ambient, NULL);
505 return SkNEW_ARGS(SkLightingShaderImpl, (diffuse, normal, light, ambient));
506 } 508 }
507 509
508 void SkLightingShaderImpl::flatten(SkWriteBuffer& buf) const { 510 void SkLightingShaderImpl::flatten(SkWriteBuffer& buf) const {
511 buf.writeMatrix(this->getLocalMatrix());
512
509 buf.writeBitmap(fDiffuseMap); 513 buf.writeBitmap(fDiffuseMap);
510 buf.writeBitmap(fNormalMap); 514 buf.writeBitmap(fNormalMap);
511 buf.writeScalarArray(&fLight.fDirection.fX, 3); 515 buf.writeScalarArray(&fLight.fDirection.fX, 3);
512 buf.writeColor(fLight.fColor); 516 buf.writeColor(fLight.fColor);
513 buf.writeColor(fAmbientColor); 517 buf.writeColor(fAmbientColor);
514 } 518 }
515 519
516 SkShader::Context* SkLightingShaderImpl::onCreateContext(const ContextRec& rec, 520 SkShader::Context* SkLightingShaderImpl::onCreateContext(const ContextRec& rec,
517 void* storage) const { 521 void* storage) const {
518 522
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 // communicates between its matrix-proc and its sampler-proc. Until we can 562 // communicates between its matrix-proc and its sampler-proc. Until we can
559 // widen that, we have to reject bitmaps that are larger. 563 // widen that, we have to reject bitmaps that are larger.
560 // 564 //
561 static const int kMaxSize = 65535; 565 static const int kMaxSize = 65535;
562 566
563 return bm.width() > kMaxSize || bm.height() > kMaxSize; 567 return bm.width() > kMaxSize || bm.height() > kMaxSize;
564 } 568 }
565 569
566 SkShader* SkLightingShader::Create(const SkBitmap& diffuse, const SkBitmap& norm al, 570 SkShader* SkLightingShader::Create(const SkBitmap& diffuse, const SkBitmap& norm al,
567 const SkLightingShader::Light& light, 571 const SkLightingShader::Light& light,
568 const SkColor ambient) { 572 const SkColor ambient,
573 const SkMatrix* localMatrix) {
569 if (diffuse.isNull() || bitmap_is_too_big(diffuse) || 574 if (diffuse.isNull() || bitmap_is_too_big(diffuse) ||
570 normal.isNull() || bitmap_is_too_big(normal) || 575 normal.isNull() || bitmap_is_too_big(normal) ||
571 diffuse.width() != normal.width() || 576 diffuse.width() != normal.width() ||
572 diffuse.height() != normal.height()) { 577 diffuse.height() != normal.height()) {
573 return nullptr; 578 return nullptr;
574 } 579 }
575 580
576 return SkNEW_ARGS(SkLightingShaderImpl, (diffuse, normal, light, ambient)); 581 return SkNEW_ARGS(SkLightingShaderImpl, (diffuse, normal, light, ambient, lo calMatrix));
577 } 582 }
578 583
579 /////////////////////////////////////////////////////////////////////////////// 584 ///////////////////////////////////////////////////////////////////////////////
OLDNEW
« no previous file with comments | « src/effects/SkLightingShader.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698