diff options
Diffstat (limited to 'samplecode/SampleTextureDomain.cpp')
-rwxr-xr-x | samplecode/SampleTextureDomain.cpp | 42 |
1 files changed, 39 insertions, 3 deletions
diff --git a/samplecode/SampleTextureDomain.cpp b/samplecode/SampleTextureDomain.cpp index be000f9..4291468 100755 --- a/samplecode/SampleTextureDomain.cpp +++ b/samplecode/SampleTextureDomain.cpp @@ -1,6 +1,14 @@ + +/* + * Copyright 2011 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ #include "SampleCode.h" #include "SkCanvas.h" #include "SkDevice.h" +#include "SkBlurMaskFilter.h" namespace { SkBitmap make_bitmap() { @@ -31,7 +39,7 @@ protected: // overrides from SkEventSink virtual bool onQuery(SkEvent* evt) { if (SampleCode::TitleQ(*evt)) { - SampleCode::TitleR(evt, "Texture Domian"); + SampleCode::TitleR(evt, "Texture Domain"); return true; } return this->INHERITED::onQuery(evt); @@ -54,8 +62,8 @@ protected: // Note: GPU-backed bitmaps follow a different rendering path // when copying from one GPU device to another. SkRefPtr<SkDevice> primaryDevice(canvas->getDevice()); - SkRefPtr<SkDevice> secondDevice(canvas->createDevice( - SkBitmap::kARGB_8888_Config, 5, 5, true, true)); + SkRefPtr<SkDevice> secondDevice(canvas->createCompatibleDevice( + SkBitmap::kARGB_8888_Config, 5, 5, true)); secondDevice->unref(); SkCanvas secondCanvas(secondDevice.get()); @@ -68,6 +76,34 @@ protected: srcRect.setXYWH(1, 1, 3, 3); dstRect.setXYWH(405.0f, 5.0f, 305.0f, 305.0f); canvas->drawBitmapRect(deviceBitmap, &srcRect, dstRect, &paint); + + // Test that bitmap blurring using a subrect + // renders correctly + srcRect.setXYWH(1, 1, 3, 3); + dstRect.setXYWH(5.0f, 405.0f, 305.0f, 305.0f); + SkMaskFilter* mf = SkBlurMaskFilter::Create( + 5, + SkBlurMaskFilter::kNormal_BlurStyle, + SkBlurMaskFilter::kHighQuality_BlurFlag | + SkBlurMaskFilter::kIgnoreTransform_BlurFlag); + paint.setMaskFilter(mf)->unref(); + canvas->drawBitmapRect(deviceBitmap, &srcRect, dstRect, &paint); + + // Blur and a rotation + NULL src rect + // This should not trigger the texture domain code + // but it will test a code path in SkGpuDevice::drawBitmap + // that handles blurs with rects transformed to non- + // orthogonal rects. It also tests the NULL src rect handling + mf = SkBlurMaskFilter::Create( + 5, + SkBlurMaskFilter::kNormal_BlurStyle, + SkBlurMaskFilter::kHighQuality_BlurFlag); + paint.setMaskFilter(mf)->unref(); + + dstRect.setXYWH(-150.0f, -150.0f, 300.0f, 300.0f); + canvas->translate(550, 550); + canvas->rotate(45); + canvas->drawBitmapRect(fBM, NULL, dstRect, &paint); } private: typedef SkView INHERITED; |