Index: experimental/SkV8Example/SkV8Example.cpp |
diff --git a/experimental/SkV8Example/SkV8Example.cpp b/experimental/SkV8Example/SkV8Example.cpp |
index eb0e7133769eec94198d58352b8b36509a0968d1..96b52725d5530d351283f0d34aa475789141f1a0 100644 |
--- a/experimental/SkV8Example/SkV8Example.cpp |
+++ b/experimental/SkV8Example/SkV8Example.cpp |
@@ -27,6 +27,7 @@ using namespace v8; |
#include "SkGpuDevice.h" |
#include "SkGraphics.h" |
#include "SkScalar.h" |
+#include "SkSurface.h" |
DEFINE_string2(infile, i, NULL, "Name of file to load JS from.\n"); |
@@ -49,9 +50,10 @@ SkV8ExampleWindow::SkV8ExampleWindow(void* hwnd, JsContext* context) |
, fCurContext(NULL) |
, fCurIntf(NULL) |
, fCurRenderTarget(NULL) |
+ , fCurSurface(NULL) |
#endif |
{ |
- this->setConfig(SkBitmap::kARGB_8888_Config); |
+ this->setColorType(kBGRA_8888_SkColorType); |
this->setVisibleP(true); |
this->setClipToBounds(false); |
@@ -60,6 +62,15 @@ SkV8ExampleWindow::SkV8ExampleWindow(void* hwnd, JsContext* context) |
#endif |
} |
+SkV8ExampleWindow::~SkV8ExampleWindow() { |
+#if SK_SUPPORT_GPU |
+ SkSafeUnref(fCurContext); |
+ SkSafeUnref(fCurIntf); |
+ SkSafeUnref(fCurRenderTarget); |
+ SkSafeUnref(fCurSurface); |
+#endif |
+} |
+ |
#if SK_SUPPORT_GPU |
void SkV8ExampleWindow::windowSizeChanged() { |
if (FLAGS_gpu) { |
@@ -92,6 +103,8 @@ void SkV8ExampleWindow::windowSizeChanged() { |
SkSafeUnref(fCurRenderTarget); |
fCurRenderTarget = fCurContext->wrapBackendRenderTarget(desc); |
+ SkSafeUnref(fCurSurface); |
+ fCurSurface = SkSurface::NewRenderTargetDirect(fCurRenderTarget); |
} |
} |
#endif |
@@ -99,9 +112,12 @@ void SkV8ExampleWindow::windowSizeChanged() { |
#if SK_SUPPORT_GPU |
SkCanvas* SkV8ExampleWindow::createCanvas() { |
if (FLAGS_gpu) { |
- SkAutoTUnref<SkBaseDevice> device( |
- new SkGpuDevice(fCurContext, fCurRenderTarget)); |
- return new SkCanvas(device); |
+ SkCanvas* c = fCurSurface->getCanvas(); |
+ // Increase the ref count since the surface keeps a reference |
+ // to the canvas, but callers of createCanvas put the results |
+ // in a SkAutoTUnref. |
+ c->ref(); |
+ return c; |
} else { |
return this->INHERITED::createCanvas(); |
} |