aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/ok_dsts.cpp
blob: c25a8d5fee943675aa53b2cc2527262f93a14704 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*
 * Copyright 2017 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#include "ok.h"
#include "SkSurface.h"

struct SWDst : Dst {
    SkImageInfo      info;
    sk_sp<SkSurface> surface;

    static std::unique_ptr<Dst> Create(Options options) {
        SkImageInfo info = SkImageInfo::MakeN32Premul(0,0);
        if (options("ct") == "565") { info = info.makeColorType(kRGB_565_SkColorType); }
        if (options("ct") == "f16") { info = info.makeColorType(kRGBA_F16_SkColorType); }

        if (options("cs") == "srgb") {
            auto cs = info.colorType() == kRGBA_F16_SkColorType ? SkColorSpace::MakeSRGBLinear()
                                                                : SkColorSpace::MakeSRGB();
            info = info.makeColorSpace(std::move(cs));
        }

        SWDst dst;
        dst.info = info;
        return move_unique(dst);
    }

    Status draw(Src* src) override {
        auto size = src->size();
        surface = SkSurface::MakeRaster(info.makeWH(size.width(), size.height()));
        return src->draw(surface->getCanvas());
    }

    sk_sp<SkImage> image() override {
        return surface->makeImageSnapshot();
    }
};
static Register sw{"sw", "draw with the software backend", SWDst::Create};
static Register _8888{"8888", "alias for sw", SWDst::Create};

static Register _565{"565", "alias for sw:ct=565", [](Options options) {
    options["ct"] = "565";
    return SWDst::Create(options);
}};

static Register srgb{"srgb", "alias for sw:cs=srgb", [](Options options) {
    options["cs"] = "srgb";
    return SWDst::Create(options);
}};

static Register f16{"f16", "alias for sw:ct=f16,cs=srgb", [](Options options) {
    options["ct"] = "f16";
    options["cs"] = "srgb";
    return SWDst::Create(options);
}};

extern bool gSkForceRasterPipelineBlitter;
static Register rp{"rp", "draw forcing SkRasterPipelineBlitter", [](Options options) {
    gSkForceRasterPipelineBlitter = true;
    return SWDst::Create(options);
}};