Chromium Code Reviews| 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 404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 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 int numLights = buf.readInt(); |
| 420 | 420 |
| 421 SkLights::Builder builder; | 421 SkLights::Builder builder; |
| 422 | 422 |
| 423 for (int l = 0; l < numLights; ++l) { | 423 for (int l = 0; l < numLights; ++l) { |
| 424 bool isAmbient = buf.readBool(); | 424 bool isAmbient = buf.readBool(); |
| 425 bool isPoint = buf.readBool(); | |
| 425 | 426 |
| 426 SkColor3f color; | 427 SkColor3f color; |
| 427 if (!buf.readScalarArray(&color.fX, 3)) { | 428 if (!buf.readScalarArray(&color.fX, 3)) { |
| 428 return nullptr; | 429 return nullptr; |
| 429 } | 430 } |
| 430 | 431 |
| 431 if (isAmbient) { | 432 if (isAmbient) { |
| 432 builder.add(SkLights::Light(color)); | 433 builder.add(SkLights::Light::MakeAmbient(color)); |
| 433 } else { | 434 } else { |
|
robertphillips
2016/08/10 17:48:39
dir -> dirOrPos
vjiaoblack
2016/08/11 14:27:23
Done.
| |
| 434 SkVector3 dir; | 435 SkVector3 dir; |
| 435 if (!buf.readScalarArray(&dir.fX, 3)) { | 436 if (!buf.readScalarArray(&dir.fX, 3)) { |
| 436 return nullptr; | 437 return nullptr; |
| 437 } | 438 } |
| 438 builder.add(SkLights::Light(color, dir)); | 439 if (isPoint) { |
| 440 builder.add(SkLights::Light::MakePoint(color, dir)); | |
| 441 } else { | |
| 442 builder.add(SkLights::Light::MakeDirectional(color, dir)); | |
| 443 } | |
| 439 } | 444 } |
| 440 } | 445 } |
| 441 | 446 |
| 442 sk_sp<SkLights> lights(builder.finish()); | 447 sk_sp<SkLights> lights(builder.finish()); |
| 443 | 448 |
| 444 sk_sp<SkNormalSource> normalSource(buf.readFlattenable<SkNormalSource>()); | 449 sk_sp<SkNormalSource> normalSource(buf.readFlattenable<SkNormalSource>()); |
| 445 | 450 |
| 446 bool hasDiffuse = buf.readBool(); | 451 bool hasDiffuse = buf.readBool(); |
| 447 sk_sp<SkShader> diffuseShader = nullptr; | 452 sk_sp<SkShader> diffuseShader = nullptr; |
| 448 if (hasDiffuse) { | 453 if (hasDiffuse) { |
| 449 diffuseShader = buf.readFlattenable<SkShader>(); | 454 diffuseShader = buf.readFlattenable<SkShader>(); |
| 450 } | 455 } |
| 451 | 456 |
| 452 return sk_make_sp<SkLightingShaderImpl>(std::move(diffuseShader), std::move( normalSource), | 457 return sk_make_sp<SkLightingShaderImpl>(std::move(diffuseShader), std::move( normalSource), |
| 453 std::move(lights)); | 458 std::move(lights)); |
| 454 } | 459 } |
| 455 | 460 |
| 456 void SkLightingShaderImpl::flatten(SkWriteBuffer& buf) const { | 461 void SkLightingShaderImpl::flatten(SkWriteBuffer& buf) const { |
| 457 this->INHERITED::flatten(buf); | 462 this->INHERITED::flatten(buf); |
| 458 | 463 |
| 459 buf.writeInt(fLights->numLights()); | 464 buf.writeInt(fLights->numLights()); |
| 460 for (int l = 0; l < fLights->numLights(); ++l) { | 465 for (int l = 0; l < fLights->numLights(); ++l) { |
| 461 const SkLights::Light& light = fLights->light(l); | 466 const SkLights::Light& light = fLights->light(l); |
| 462 | 467 |
| 463 bool isAmbient = SkLights::Light::kAmbient_LightType == light.type(); | 468 bool isAmbient = SkLights::Light::kAmbient_LightType == light.type(); |
| 469 bool isPoint = SkLights::Light::kPoint_LightType == light.type(); | |
| 464 | 470 |
| 465 buf.writeBool(isAmbient); | 471 buf.writeBool(isAmbient); |
| 472 buf.writeBool(isPoint); | |
| 466 buf.writeScalarArray(&light.color().fX, 3); | 473 buf.writeScalarArray(&light.color().fX, 3); |
| 467 if (!isAmbient) { | 474 if (!isAmbient) { |
| 468 buf.writeScalarArray(&light.dir().fX, 3); | 475 buf.writeScalarArray(&light.dir().fX, 3); |
| 469 } | 476 } |
| 470 } | 477 } |
| 471 | 478 |
| 472 buf.writeFlattenable(fNormalSource.get()); | 479 buf.writeFlattenable(fNormalSource.get()); |
| 473 buf.writeBool(fDiffuseShader); | 480 buf.writeBool(fDiffuseShader); |
| 474 if (fDiffuseShader) { | 481 if (fDiffuseShader) { |
| 475 buf.writeFlattenable(fDiffuseShader.get()); | 482 buf.writeFlattenable(fDiffuseShader.get()); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 524 std::move(lights)); | 531 std::move(lights)); |
| 525 } | 532 } |
| 526 | 533 |
| 527 /////////////////////////////////////////////////////////////////////////////// | 534 /////////////////////////////////////////////////////////////////////////////// |
| 528 | 535 |
| 529 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingShader) | 536 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingShader) |
| 530 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkLightingShaderImpl) | 537 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkLightingShaderImpl) |
| 531 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 538 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
| 532 | 539 |
| 533 /////////////////////////////////////////////////////////////////////////////// | 540 /////////////////////////////////////////////////////////////////////////////// |
| OLD | NEW |