Index: experimental/fiddle/fiddle_main.cpp |
diff --git a/experimental/fiddle/fiddle_main.cpp b/experimental/fiddle/fiddle_main.cpp |
deleted file mode 100644 |
index 3e1570813d0d5d4954bb0aadfa5b44d60fc8cfb3..0000000000000000000000000000000000000000 |
--- a/experimental/fiddle/fiddle_main.cpp |
+++ /dev/null |
@@ -1,164 +0,0 @@ |
-/* |
- * Copyright 2015 Google Inc. |
- * |
- * Use of this source code is governed by a BSD-style license that can be |
- * found in the LICENSE file. |
- */ |
- |
-#include <stdio.h> |
- |
-#include <GL/osmesa.h> |
- |
-#include "fiddle_main.h" |
- |
-// Globals externed in fiddle_main.h |
-SkBitmap source; |
-sk_sp<SkImage> image; |
- |
-static void encode_to_base64(const void* data, size_t size, FILE* out) { |
- const uint8_t* input = reinterpret_cast<const uint8_t*>(data); |
- const uint8_t* end = &input[size]; |
- static const char codes[] = |
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ" |
- "abcdefghijklmnopqrstuvwxyz0123456789+/"; |
- while (input != end) { |
- uint8_t b = (*input & 0xFC) >> 2; |
- fputc(codes[b], out); |
- b = (*input & 0x03) << 4; |
- ++input; |
- if (input == end) { |
- fputc(codes[b], out); |
- fputs("==", out); |
- return; |
- } |
- b |= (*input & 0xF0) >> 4; |
- fputc(codes[b], out); |
- b = (*input & 0x0F) << 2; |
- ++input; |
- if (input == end) { |
- fputc(codes[b], out); |
- fputc('=', out); |
- return; |
- } |
- b |= (*input & 0xC0) >> 6; |
- fputc(codes[b], out); |
- b = *input & 0x3F; |
- fputc(codes[b], out); |
- ++input; |
- } |
-} |
- |
-static void dump_output(const sk_sp<SkData>& data, |
- const char* name, bool last = true) { |
- if (data) { |
- printf("\t\"%s\": \"", name); |
- encode_to_base64(data->data(), data->size(), stdout); |
- fputs(last ? "\"\n" : "\",\n", stdout); |
- } |
-} |
- |
-static SkData* encode_snapshot(const sk_sp<SkSurface>& surface) { |
- sk_sp<SkImage> img(surface->makeImageSnapshot()); |
- return img ? img->encode() : nullptr; |
-} |
- |
-static OSMesaContext create_osmesa_context() { |
- OSMesaContext osMesaContext = |
- OSMesaCreateContextExt(OSMESA_BGRA, 0, 0, 0, nullptr); |
- if (osMesaContext != nullptr) { |
- static uint32_t buffer[16 * 16]; |
- OSMesaMakeCurrent(osMesaContext, &buffer, GL_UNSIGNED_BYTE, 16, 16); |
- } |
- return osMesaContext; |
-} |
- |
-static sk_sp<GrContext> create_mesa_grcontext() { |
- if (nullptr == OSMesaGetCurrentContext()) { |
- return nullptr; |
- } |
- auto osmesa_get = [](void* ctx, const char name[]) { |
- SkASSERT(nullptr == ctx); |
- SkASSERT(OSMesaGetCurrentContext()); |
- return OSMesaGetProcAddress(name); |
- }; |
- sk_sp<const GrGLInterface> mesa(GrGLAssembleInterface(nullptr, osmesa_get)); |
- if (!mesa) { |
- return nullptr; |
- } |
- return sk_sp<GrContext>(GrContext::Create( |
- kOpenGL_GrBackend, |
- reinterpret_cast<intptr_t>(mesa.get()))); |
-} |
- |
-int main() { |
- const DrawOptions options = GetDrawOptions(); |
- if (options.source) { |
- sk_sp<SkData> data(SkData::NewFromFileName(options.source)); |
- if (!data) { |
- perror(options.source); |
- return 1; |
- } else { |
- image = SkImage::MakeFromEncoded(std::move(data)); |
- if (!image) { |
- perror("Unable to decode the source image."); |
- return 1; |
- } |
- SkAssertResult(image->asLegacyBitmap( |
- &source, SkImage::kRO_LegacyBitmapMode)); |
- } |
- } |
- sk_sp<SkData> rasterData, gpuData, pdfData, skpData; |
- if (options.raster) { |
- auto rasterSurface = |
- SkSurface::MakeRaster(SkImageInfo::MakeN32Premul(options.size)); |
- draw(rasterSurface->getCanvas()); |
- rasterData.reset(encode_snapshot(rasterSurface)); |
- } |
- if (options.gpu) { |
- OSMesaContext osMesaContext = create_osmesa_context(); |
- auto grContext = create_mesa_grcontext(); |
- if (!grContext) { |
- fputs("Unable to get Mesa GrContext.\n", stderr); |
- } else { |
- auto surface = SkSurface::MakeRenderTarget( |
- grContext.get(), |
- SkBudgeted::kNo, |
- SkImageInfo::MakeN32Premul(options.size)); |
- if (!surface) { |
- fputs("Unable to get render surface.\n", stderr); |
- exit(1); |
- } |
- draw(surface->getCanvas()); |
- gpuData.reset(encode_snapshot(surface)); |
- } |
- if (osMesaContext) { |
- OSMesaDestroyContext(osMesaContext); |
- } |
- } |
- if (options.pdf) { |
- SkDynamicMemoryWStream pdfStream; |
- sk_sp<SkDocument> document(SkDocument::CreatePDF(&pdfStream)); |
- draw(document->beginPage(options.size.width(), options.size.height())); |
- document->close(); |
- pdfData.reset(pdfStream.copyToData()); |
- } |
- if (options.skp) { |
- SkSize size; |
- size = options.size; |
- SkPictureRecorder recorder; |
- draw(recorder.beginRecording(size.width(), size.height())); |
- auto picture = recorder.finishRecordingAsPicture(); |
- SkDynamicMemoryWStream skpStream; |
- picture->serialize(&skpStream); |
- skpData.reset(skpStream.copyToData()); |
- } |
- |
- printf("{\n"); |
- dump_output(rasterData, "Raster", !gpuData && !pdfData && !skpData); |
- dump_output(gpuData, "Gpu", !pdfData && !skpData); |
- dump_output(pdfData, "Pdf", !skpData); |
- dump_output(skpData, "Skp"); |
- printf("}\n"); |
- |
- return 0; |
-} |