ok_dsts.cpp revision 0222e709a3d045077bd6457b25abd854ef5c35c2
17ac04838c58eebbac477895fafdd4b0421727b9eMike Klein/* 27ac04838c58eebbac477895fafdd4b0421727b9eMike Klein * Copyright 2017 Google Inc. 37ac04838c58eebbac477895fafdd4b0421727b9eMike Klein * 47ac04838c58eebbac477895fafdd4b0421727b9eMike Klein * Use of this source code is governed by a BSD-style license that can be 57ac04838c58eebbac477895fafdd4b0421727b9eMike Klein * found in the LICENSE file. 67ac04838c58eebbac477895fafdd4b0421727b9eMike Klein */ 77ac04838c58eebbac477895fafdd4b0421727b9eMike Klein 87ac04838c58eebbac477895fafdd4b0421727b9eMike Klein#include "ok.h" 97ac04838c58eebbac477895fafdd4b0421727b9eMike Klein#include "SkSurface.h" 107ac04838c58eebbac477895fafdd4b0421727b9eMike Klein 117ac04838c58eebbac477895fafdd4b0421727b9eMike Kleinstruct SWDst : Dst { 120222e709a3d045077bd6457b25abd854ef5c35c2Mike Klein SkImageInfo info; 137ac04838c58eebbac477895fafdd4b0421727b9eMike Klein sk_sp<SkSurface> surface; 147ac04838c58eebbac477895fafdd4b0421727b9eMike Klein 150222e709a3d045077bd6457b25abd854ef5c35c2Mike Klein static std::unique_ptr<Dst> Create(Options options) { 160222e709a3d045077bd6457b25abd854ef5c35c2Mike Klein SkImageInfo info = SkImageInfo::MakeN32Premul(0,0); 177ac04838c58eebbac477895fafdd4b0421727b9eMike Klein if (options("ct") == "565") { info = info.makeColorType(kRGB_565_SkColorType); } 187ac04838c58eebbac477895fafdd4b0421727b9eMike Klein if (options("ct") == "f16") { info = info.makeColorType(kRGBA_F16_SkColorType); } 190222e709a3d045077bd6457b25abd854ef5c35c2Mike Klein 207ac04838c58eebbac477895fafdd4b0421727b9eMike Klein SWDst dst; 210222e709a3d045077bd6457b25abd854ef5c35c2Mike Klein dst.info = info; 227ac04838c58eebbac477895fafdd4b0421727b9eMike Klein return move_unique(dst); 237ac04838c58eebbac477895fafdd4b0421727b9eMike Klein } 247ac04838c58eebbac477895fafdd4b0421727b9eMike Klein 250222e709a3d045077bd6457b25abd854ef5c35c2Mike Klein bool draw(Src* src) override { 260222e709a3d045077bd6457b25abd854ef5c35c2Mike Klein auto size = src->size(); 270222e709a3d045077bd6457b25abd854ef5c35c2Mike Klein surface = SkSurface::MakeRaster(info.makeWH(size.width(), size.height())); 280222e709a3d045077bd6457b25abd854ef5c35c2Mike Klein return src->draw(surface->getCanvas()); 297ac04838c58eebbac477895fafdd4b0421727b9eMike Klein } 307ac04838c58eebbac477895fafdd4b0421727b9eMike Klein 310222e709a3d045077bd6457b25abd854ef5c35c2Mike Klein sk_sp<SkImage> image() override { 320222e709a3d045077bd6457b25abd854ef5c35c2Mike Klein return surface->makeImageSnapshot(); 337ac04838c58eebbac477895fafdd4b0421727b9eMike Klein } 347ac04838c58eebbac477895fafdd4b0421727b9eMike Klein}; 357ac04838c58eebbac477895fafdd4b0421727b9eMike Kleinstatic Register sw{"sw", SWDst::Create}; 36