Add srgb and f16 modes to fiddle
authorMatt Sarett <msarett@google.com>
Tue, 29 Nov 2016 22:14:58 +0000 (17:14 -0500)
committerSkia Commit-Bot <skia-commit-bot@chromium.org>
Thu, 1 Dec 2016 18:12:57 +0000 (18:12 +0000)
BUG=skia:5945

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4546

Change-Id: I29b87a3b2eb20b8d28f8fb970b5192807bebdc48
Reviewed-on: https://skia-review.googlesource.com/4546
Reviewed-by: Joe Gregorio <jcgregorio@google.com>
Commit-Queue: Matt Sarett <msarett@google.com>

tools/fiddle/draw.cpp
tools/fiddle/fiddle_main.cpp
tools/fiddle/fiddle_main.h

index 68cbbdf8d60e0c62c5f2ee59220e0adbd065d652..efab8b4f5b557df713674d9972d8adc7b02e2abc 100644 (file)
@@ -13,7 +13,7 @@
 DrawOptions GetDrawOptions() {
     // path *should* be absolute.
     static const char path[] = "resources/color_wheel.png";
-    return DrawOptions(256, 256, true, true, true, true, path);
+    return DrawOptions(256, 256, true, true, true, true, true, true, path);
 }
 void draw(SkCanvas* canvas) {
     canvas->clear(SK_ColorWHITE);
index 9e3929291213f2d303bfdce8c9ca9714e049d662..2e3d37b08f5ab26dc137958ad2dd7b91fa7a9e43 100644 (file)
@@ -105,9 +105,19 @@ int main() {
         }
     }
     sk_sp<SkData> rasterData, gpuData, pdfData, skpData;
+    SkColorType colorType = kN32_SkColorType;
+    sk_sp<SkColorSpace> colorSpace = nullptr;
+    if (options.f16) {
+        SkASSERT(options.srgb);
+        colorType = kRGBA_F16_SkColorType;
+        colorSpace = SkColorSpace::MakeNamed(SkColorSpace::kSRGBLinear_Named);
+    } else if (options.srgb) {
+        colorSpace = SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named);
+    }
+    SkImageInfo info = SkImageInfo::Make(options.size.width(), options.size.height(), colorType,
+                                         kPremul_SkAlphaType, colorSpace);
     if (options.raster) {
-        auto rasterSurface =
-                SkSurface::MakeRaster(SkImageInfo::MakeN32Premul(options.size));
+        auto rasterSurface = SkSurface::MakeRaster(info);
         srand(0);
         draw(rasterSurface->getCanvas());
         rasterData.reset(encode_snapshot(rasterSurface));
@@ -117,10 +127,7 @@ int main() {
         if (!grContext) {
             fputs("Unable to get GrContext.\n", stderr);
         } else {
-            auto surface = SkSurface::MakeRenderTarget(
-                    grContext.get(),
-                    SkBudgeted::kNo,
-                    SkImageInfo::MakeN32Premul(options.size));
+            auto surface = SkSurface::MakeRenderTarget(grContext.get(), SkBudgeted::kNo, info);
             if (!surface) {
                 fputs("Unable to get render surface.\n", stderr);
                 exit(1);
index 0f36ad7804459f6882b68cdc65b4078cc7f467e6..a03eebca6ce8db6234e96165d414c12288c72461 100644 (file)
@@ -24,18 +24,26 @@ extern SkBitmap source;
 extern sk_sp<SkImage> image;
 
 struct DrawOptions {
-    DrawOptions(int w, int h, bool r, bool g, bool p, bool k, const char* s)
+    DrawOptions(int w, int h, bool r, bool g, bool p, bool k, bool srgb, bool f16, const char* s)
         : size(SkISize::Make(w, h))
         , raster(r)
         , gpu(g)
         , pdf(p)
         , skp(k)
-        , source(s) {}
+        , srgb(srgb)
+        , f16(f16)
+        , source(s)
+    {
+        // F16 mode is only valid for color correct backends.
+        SkASSERT(srgb || !f16);
+    }
     SkISize size;
     bool raster;
     bool gpu;
     bool pdf;
     bool skp;
+    bool srgb;
+    bool f16;
     const char* source;
 };