diff options
-rw-r--r-- | samplecode/SampleApp.cpp | 8 | ||||
-rw-r--r-- | samplecode/SampleBitmapRect.cpp | 33 | ||||
-rw-r--r-- | samplecode/SampleCode.h | 4 |
3 files changed, 33 insertions, 12 deletions
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp index a5987f26c2..55b1e48557 100644 --- a/samplecode/SampleApp.cpp +++ b/samplecode/SampleApp.cpp @@ -51,6 +51,8 @@ extern SkView* create_overview(int, const SkViewFactory[]); #include "GrGLConfig.h" #endif +static SampleWindow* gSampleWindow; + /////////////// static const char view_inval_msg[] = "view-inval-msg"; @@ -240,6 +242,10 @@ SkScalar SampleCode::GetAnimScalar(SkScalar speed, SkScalar period) { return SkDoubleToScalar(value); } +GrContext* SampleCode::GetGr() { + return gSampleWindow ? gSampleWindow->getGrContext() : NULL; +} + ////////////////////////////////////////////////////////////////////////////// static SkView* curr_view(SkWindow* wind) { @@ -348,6 +354,8 @@ SampleWindow::CanvasType SampleWindow::cycle_canvastype(CanvasType ct) { } SampleWindow::SampleWindow(void* hwnd, int argc, char** argv) : INHERITED(hwnd) { + gSampleWindow = this; + #ifdef PIPE_FILE //Clear existing file or create file if it doesn't exist FILE* f = fopen(FILE_PATH, "wb"); diff --git a/samplecode/SampleBitmapRect.cpp b/samplecode/SampleBitmapRect.cpp index 002b2b9b17..08b8a5acd4 100644 --- a/samplecode/SampleBitmapRect.cpp +++ b/samplecode/SampleBitmapRect.cpp @@ -17,28 +17,34 @@ #include "SkOSFile.h" #include "SkStream.h" -static SkBitmap make_bitmap() { - SkBitmap bm; - bm.setConfig(SkBitmap::kARGB_8888_Config, 64, 64); - bm.allocPixels(); - SkCanvas canvas(bm); +#include "SkGpuDevice.h" + +static SkDevice* make_bitmap(SkBitmap* bitmap, GrContext* ctx) { + SkCanvas canvas; + + if (ctx) { + SkDevice* dev = new SkGpuDevice(ctx, SkBitmap::kARGB_8888_Config, 64, 64); + canvas.setDevice(dev)->unref(); + *bitmap = dev->accessBitmap(false); + } else { + bitmap->setConfig(SkBitmap::kARGB_8888_Config, 64, 64); + bitmap->allocPixels(); + canvas.setBitmapDevice(*bitmap); + } + canvas.drawColor(SK_ColorRED); SkPaint paint; paint.setAntiAlias(true); const SkPoint pts[] = { { 0, 0 }, { 64, 64 } }; const SkColor colors[] = { SK_ColorWHITE, SK_ColorBLUE }; paint.setShader(SkGradientShader::CreateLinear(pts, colors, NULL, 2, - SkShader::kClamp_TileMode))->unref(); + SkShader::kClamp_TileMode))->unref(); canvas.drawCircle(32, 32, 32, paint); - return bm; } class BitmapRectView : public SampleView { public: - SkBitmap fBitmap; - BitmapRectView() { - fBitmap = make_bitmap(); this->setBGColor(SK_ColorGRAY); } @@ -64,6 +70,9 @@ protected: paint.setStyle(SkPaint::kStroke_Style); paint.setColor(SK_ColorGREEN); + SkBitmap bitmap; + make_bitmap(&bitmap, NULL /*SampleCode::GetGr()*/); + SkRect dstR = { 0, 200, 128, 380 }; canvas->translate(16, 40); @@ -71,8 +80,8 @@ protected: SkRect srcR; srcR.set(src[i]); - canvas->drawBitmap(fBitmap, 0, 0, &paint); - canvas->drawBitmapRect(fBitmap, &src[i], dstR, &paint); + canvas->drawBitmap(bitmap, 0, 0, &paint); + canvas->drawBitmapRect(bitmap, &src[i], dstR, &paint); canvas->drawRect(dstR, paint); canvas->drawRect(srcR, paint); diff --git a/samplecode/SampleCode.h b/samplecode/SampleCode.h index c42ee25801..98162a72ee 100644 --- a/samplecode/SampleCode.h +++ b/samplecode/SampleCode.h @@ -6,6 +6,8 @@ #include "SkKey.h" #include "SkView.h" +class GrContext; + class SampleCode { public: static bool KeyQ(const SkEvent&, SkKey* outKey); @@ -23,6 +25,8 @@ public: static SkMSec GetAnimTimeDelta(); static SkScalar GetAnimSecondsDelta(); static SkScalar GetAnimScalar(SkScalar speedPerSec, SkScalar period = 0); + + static GrContext* GetGr(); }; ////////////////////////////////////////////////////////////////////////////// |