Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(273)

Side by Side Diff: experimental/fiddle/fiddle_main.cpp

Issue 1349163003: experiment/fiddle (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 * Copyright 2015 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8 #include <stdio.h>
9
10 #include "base64.h"
11 #include "fiddle_main.h"
12 #include "OSMesaContextHolder.h"
13
14 // Globals externed in fiddle_main.h
15 SkBitmap source;
16 SkImage* image(nullptr);
mtklein 2015/09/17 13:58:22 Just curious: you seem to be managing this manuall
17
18 const char* FLAGS_source(nullptr);
mtklein 2015/09/17 13:58:22 Any reason these FLAGS_ guys aren't static?
19 int32_t FLAGS_width(256);
20 int32_t FLAGS_height(256);
21 bool FLAGS_gpu(false);
22 bool FLAGS_noraster(false);
23 bool FLAGS_pdf(false);
24
25 static void help() {
26 const char options[] =
27 "\nOptions:\n"
28 " --width WIDTH Set the canvas width (default is 256).\n"
29 " --height HEIGHT Set the canvas height (default is 256).\n"
30 " --source PATH Set the source image file.\n"
31 " --noraster Disable the raster backend.\n"
mtklein 2015/09/17 13:58:22 Why are any of these options? Let's just run them
32 " --gpu Enable the GPU backend.\n"
33 " --pdf Enable the PDF backend.\n\n";
34 fputs(options, stderr);
mtklein 2015/09/17 13:58:22 If you use fprintf you can keep your (default is %
35 exit(2);
36 }
37
38 static void parse_flags(int, char** argv) {
39 ++argv; // skip argv[0]
40 while (*argv) { // argv is always NULL-terminated
41 if (0 == strcmp(*argv, "--width")) {
42 if (!*++argv) {
43 help();
44 }
45 FLAGS_width = atoi(*argv);
46 } else if (0 == strcmp(*argv, "--height")) {
47 if (!*++argv) {
48 help();
49 }
50 FLAGS_height = atoi(*argv);
51 } else if (0 == strcmp(*argv, "--source")) {
52 if (!*++argv) {
53 help();
54 }
55 FLAGS_source = *argv;
56 } else if (0 == strcmp(*argv, "--gpu")) {
57 FLAGS_gpu = true;
58 } else if (0 == strcmp(*argv, "--noraster")) {
59 FLAGS_noraster = true;
60 } else if (0 == strcmp(*argv, "--pdf")) {
61 FLAGS_pdf = true;
62 } else {
63 help();
64 }
65 ++argv;
66 }
67 }
68
69 static void dump_output(SkData* pngData, const char* name, bool last = true) {
70 if (pngData) {
71 printf("\t\"%s\": \"", name);
72 EncodeToBase64(pngData->data(), pngData->size(), stdout);
73 fputs(last ? "\"\n" : "\",\n", stdout);
74 }
75 }
76
77 static SkData* encode_snapshot(SkSurface* surface) {
78 SkAutoTUnref<SkImage> img(surface->newImageSnapshot());
79 return img ? img->encode() : nullptr;
80 }
81
82 static GrContext* create_mesa_grcontext() {
83 SkAutoTUnref<const GrGLInterface> mesa(GrGLCreateMesaInterface());
84 intptr_t backend = reinterpret_cast<intptr_t>(mesa.get());
85 return backend ? GrContext::Create(kOpenGL_GrBackend, backend) : nullptr;
86 }
87
88 int main(int argc, char** argv) {
89 parse_flags(argc, argv);
90 if (FLAGS_source) {
91 SkAutoTUnref<SkData> data(SkData::NewFromFileName(FLAGS_source));
92 if (!data) {
93 perror("Unable to open the source image file.");
mtklein 2015/09/17 13:58:22 I don't think you mean to be using perror. perror
94 } else {
95 image = SkImage::NewFromEncoded(data);
96 bool success = SkInstallDiscardablePixelRef(data, &source);
97 if (!image || !success) {
98 perror("Unable to decode the source image.");
99 }
100 }
101 }
102 SkISize size = SkISize::Make(FLAGS_width, FLAGS_height);
103 SkAutoTUnref<SkData> rasterData, gpuData, pdfData;
104 if (!FLAGS_noraster) {
105 SkAutoTUnref<SkSurface> rasterSurface(
106 SkSurface::NewRaster(SkImageInfo::MakeN32Premul(size)));
107 draw(rasterSurface->getCanvas());
108 rasterData.reset(encode_snapshot(rasterSurface));
109 }
110 if (FLAGS_gpu) {
111 OSMesaContextHolder osMesaContextHolder;
112 SkAutoTUnref<GrContext> grContext(create_mesa_grcontext());
113 if (!grContext) {
114 fputs("Unable to get Mesa GrContext.\n", stderr);
115 } else {
116 SkAutoTUnref<SkSurface> surface(
117 SkSurface::NewRenderTarget(
118 grContext,
119 SkSurface::kNo_Budgeted,
120 SkImageInfo::MakeN32Premul(size)));
121 if (!surface) {
122 fputs("Unable to get render surface.\n", stderr);
123 exit(1);
124 }
125 draw(surface->getCanvas());
126 gpuData.reset(encode_snapshot(surface));
127 }
128 }
129 if (FLAGS_pdf) {
130 SkDynamicMemoryWStream pdfStream;
131 SkAutoTUnref<SkDocument> document(SkDocument::CreatePDF(&pdfStream));
132 draw(document->beginPage(FLAGS_width, FLAGS_height));
133 document->close();
134 pdfData.reset(pdfStream.copyToData());
135 }
136
137 printf("{\n");
138 dump_output(rasterData, "Raster", !gpuData && !pdfData);
139 dump_output(gpuData, "Gpu", !pdfData);
140 dump_output(pdfData, "Pdf");
141 printf("}\n");
142
143 SkSafeSetNull(image);
144 return 0;
145 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698