Index: experimental/PdfViewer/pdf_viewer_main.cpp |
diff --git a/experimental/PdfViewer/pdf_viewer_main.cpp b/experimental/PdfViewer/pdf_viewer_main.cpp |
index f5bfdbbd7e35eeef353dcc9702eb0df455f9f208..fab3dc01dfd1928e29b1d989a2091747a0e0e2f0 100644 |
--- a/experimental/PdfViewer/pdf_viewer_main.cpp |
+++ b/experimental/PdfViewer/pdf_viewer_main.cpp |
@@ -21,6 +21,12 @@ |
#include "SkTArray.h" |
#include "SkNulCanvas.h" |
+#if SK_SUPPORT_GPU |
+#include "GrContextFactory.h" |
+#include "GrContext.h" |
+#include "SkGpuDevice.h" |
+#endif |
+ |
DEFINE_string2(readPath, r, "", "pdf files or directories of pdf files to process."); |
DEFINE_string2(writePath, w, "", "Directory to write the rendered pages."); |
DEFINE_bool2(noExtensionForOnePagePdf, n, false, "No page extension if only one page."); |
@@ -36,10 +42,18 @@ DEFINE_double(DPI, 72, "DPI to be used for rendering (scale)."); |
DEFINE_int32(benchLoad, 0, "Load the pdf file minimally N times, without any rendering and \n" |
"\tminimal parsing to ensure correctness. Default 0 (disabled)."); |
DEFINE_int32(benchRender, 0, "Render the pdf content N times. Default 0 (disabled)"); |
+#if SK_SUPPORT_GPU |
DEFINE_string2(config, c, "8888", "Canvas to render:\n" |
"\t8888 - argb\n" |
+ "\tgpu: use the gpu\n" |
"\tnul - render in null canvas, any draw will just return.\n" |
); |
+#else |
+DEFINE_string2(config, c, "8888", "Canvas to render:\n" |
+ "\t8888 - argb\n" |
+ "\tnul - render in null canvas, any draw will just return.\n" |
+ ); |
+#endif |
DEFINE_bool2(transparentBackground, t, false, "Make background transparent instead of white."); |
/** |
@@ -112,6 +126,10 @@ extern "C" SkBitmap* gDumpBitmap; |
extern "C" SkCanvas* gDumpCanvas; |
#endif |
+#if SK_SUPPORT_GPU |
+GrContextFactory gContextFactory; |
+#endif |
+ |
static bool render_page(const SkString& outputDir, |
const SkString& inputFilename, |
const SkPdfRenderer& renderer, |
@@ -146,7 +164,31 @@ static bool render_page(const SkString& outputDir, |
SkAutoTUnref<SkBaseDevice> device; |
if (strcmp(FLAGS_config[0], "8888") == 0) { |
device.reset(SkNEW_ARGS(SkBitmapDevice, (bitmap))); |
- } else { |
+ } |
+#if SK_SUPPORT_GPU |
+ else if (strcmp(FLAGS_config[0], "gpu") == 0) { |
+ SkAutoTUnref<GrSurface> target; |
+ GrContext* gr = gContextFactory.get(GrContextFactory::kNative_GLContextType, |
+ kNone_GrGLStandard); |
+ if (gr) { |
+ // create a render target to back the device |
+ GrTextureDesc desc; |
+ desc.fConfig = kSkia8888_GrPixelConfig; |
+ desc.fFlags = kRenderTarget_GrTextureFlagBit; |
+ desc.fWidth = SkScalarCeilToInt(width); |
+ desc.fHeight = SkScalarCeilToInt(height); |
+ desc.fSampleCnt = 0; |
+ target.reset(gr->createUncachedTexture(desc, NULL, 0)); |
+ } |
+ if (NULL == target.get()) { |
+ SkASSERT(0); |
+ return false; |
+ } |
+ |
+ device.reset(SkGpuDevice::Create(target)); |
+ } |
+#endif |
+ else { |
SkDebugf("unknown --config: %s\n", FLAGS_config[0]); |
return false; |
} |