1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- /*
- * Copyright 2016 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #include "src/core/SkReadBuffer.h"
- #include "src/shaders/SkLights.h"
- sk_sp<SkLights> SkLights::MakeFromBuffer(SkReadBuffer& buf) {
- Builder builder;
- SkColor3f ambColor;
- if (!buf.readScalarArray(&ambColor.fX, 3)) {
- return nullptr;
- }
- builder.setAmbientLightColor(ambColor);
- int numLights = buf.readInt();
- for (int l = 0; l < numLights; ++l) {
- bool isPoint = buf.readBool();
- SkColor3f color;
- if (!buf.readScalarArray(&color.fX, 3)) {
- return nullptr;
- }
- SkVector3 dirOrPos;
- if (!buf.readScalarArray(&dirOrPos.fX, 3)) {
- return nullptr;
- }
- if (isPoint) {
- SkScalar intensity;
- intensity = buf.readScalar();
- Light light = Light::MakePoint(color, dirOrPos, intensity);
- builder.add(light);
- } else {
- Light light = Light::MakeDirectional(color, dirOrPos);
- builder.add(light);
- }
- }
- return builder.finish();
- }
- void SkLights::flatten(SkWriteBuffer& buf) const {
- buf.writeScalarArray(&this->ambientLightColor().fX, 3);
- buf.writeInt(this->numLights());
- for (int l = 0; l < this->numLights(); ++l) {
- const Light& light = this->light(l);
- bool isPoint = Light::kPoint_LightType == light.type();
- buf.writeBool(isPoint);
- buf.writeScalarArray(&light.color().fX, 3);
- buf.writeScalarArray(&light.dir().fX, 3);
- if (isPoint) {
- buf.writeScalar(light.intensity());
- }
- }
- }
|