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

#include "src/gpu/graphite/Renderer.h"

#include "src/gpu/AtlasTypes.h"
#include "src/gpu/graphite/render/TextDirectRenderStep.h"
#include "src/gpu/graphite/render/TextSDFRenderStep.h"

namespace skgpu::graphite {

const Renderer& Renderer::TextDirect(MaskFormat maskFormat) {
    static const TextDirectRenderStep kMask{true};
    static const TextDirectRenderStep kBitmap{false};

    static const Renderer kTextMaskRenderer{"TextMaskRenderer",
                                            &kMask};
    static const Renderer kTextBitmapRenderer{"TextBitmapRenderer",
                                              &kBitmap};

    switch(maskFormat) {
        case MaskFormat::kA8: return kTextMaskRenderer;
        case MaskFormat::kA565: return kTextBitmapRenderer;
        case MaskFormat::kARGB: return kTextBitmapRenderer;
    }
    SkUNREACHABLE;
}

const Renderer& Renderer::TextSDF(bool useLCDText) {
    static const TextSDFRenderStep kA8{false};
    static const TextSDFRenderStep kLCD{true};

    static const Renderer kTextSDFA8Renderer{"TextSDFA8Renderer",
                                             &kA8};
    static const Renderer kTextSDFLCDRenderer{"TextSDFLCDRenderer",
                                              &kLCD};

    if (useLCDText) {
        return kTextSDFLCDRenderer;
    } else {
        return kTextSDFA8Renderer;
    }
    SkUNREACHABLE;
}

} // namespace skgpu
