/*
 * 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 "include/core/SkData.h"
#include "include/effects/SkOverdrawColorFilter.h"
#include "include/effects/SkRuntimeEffect.h"
#include "include/private/SkColorData.h"
#include "src/core/SkRuntimeEffectPriv.h"

sk_sp<SkColorFilter> SkOverdrawColorFilter::MakeWithSkColors(const SkColor colors[kNumColors]) {
    sk_sp<SkRuntimeEffect> effect = SkMakeCachedRuntimeEffect(R"(
        uniform half4 color0;
        uniform half4 color1;
        uniform half4 color2;
        uniform half4 color3;
        uniform half4 color4;
        uniform half4 color5;

        half4 main(half4 color) {
            half alpha = 255.0 * color.a;
            color = alpha < 0.5 ? color0
                  : alpha < 1.5 ? color1
                  : alpha < 2.5 ? color2
                  : alpha < 3.5 ? color3
                  : alpha < 4.5 ? color4 : color5;
            return color;
        }
    )");
    if (effect) {
        auto data = SkData::MakeUninitialized(kNumColors * sizeof(SkPMColor4f));
        SkPMColor4f* premul = (SkPMColor4f*)data->writable_data();
        for (int i = 0; i < kNumColors; ++i) {
            premul[i] = SkColor4f::FromColor(colors[i]).premul();
        }
        return effect->makeColorFilter(std::move(data));
    }
    return nullptr;
}
