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

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

Issue 2237493002: Added PointLights to SkLights::Light (Closed) Base URL: https://skia.googlesource.com/skia@master
Patch Set: changed a vec3 to a point3 Created 4 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
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 "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
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
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 ///////////////////////////////////////////////////////////////////////////////
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698