/*
 * Copyright 2015 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef SkLightingShader_DEFINED
#define SkLightingShader_DEFINED

#include "include/core/SkShader.h"
#include "src/shaders/SkLights.h"

class SkBitmap;
class SkMatrix;
class SkNormalSource;

class SkLightingShader {
public:
    /** Returns a shader that lights the shape, colored by the diffuseShader, using the
        normals from normalSource, with the set of lights provided.

        @param  diffuseShader     the shader that provides the colors. If nullptr, uses the paint's
                                  color.
        @param  normalSource      the source for the shape's normals. If nullptr, assumes straight
                                  up normals (<0,0,1>).
        @param  lights            the lights applied to the normals

        The lighting equation is currently:
            result = (LightColor * dot(Normal, LightDir) + AmbientColor) * DiffuseColor

    */
    static sk_sp<SkShader> Make(sk_sp<SkShader> diffuseShader, sk_sp<SkNormalSource> normalSource,
                                sk_sp<SkLights> lights);

    static void RegisterFlattenables();
};

#endif
