| Index: gm/discard.cpp
|
| diff --git a/gm/discard.cpp b/gm/discard.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ae3947dfe414b0ffc5ab547bad8e033d36ea8ddf
|
| --- /dev/null
|
| +++ b/gm/discard.cpp
|
| @@ -0,0 +1,95 @@
|
| +/*
|
| + * Copyright 2014 Google Inc.
|
| + *
|
| + * Use of this source code is governed by a BSD-style license that can be
|
| + * found in the LICENSE file.
|
| + */
|
| +
|
| +#if SK_SUPPORT_GPU
|
| +
|
| +#include "gm.h"
|
| +#include "SkCanvas.h"
|
| +#include "SkColorShader.h"
|
| +#include "SkPaint.h"
|
| +#include "SkSurface.h"
|
| +
|
| +namespace skiagm {
|
| +
|
| +/*
|
| + * This GM exercises SkCanvas::discard() by creating an offscreen SkSurface and repeatedly
|
| + * discarding it, drawing to it, and then drawing it to the main canvas.
|
| + */
|
| +class DiscardGM : public GM {
|
| +
|
| +public:
|
| + DiscardGM() {
|
| + }
|
| +
|
| + virtual uint32_t onGetFlags() const SK_OVERRIDE { return kGPUOnly_Flag; }
|
| +
|
| +protected:
|
| + virtual SkString onShortName() SK_OVERRIDE {
|
| + return SkString("discard");
|
| + }
|
| +
|
| + virtual SkISize onISize() SK_OVERRIDE {
|
| + return SkISize::Make(100, 100);
|
| + }
|
| +
|
| + virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
|
| + GrContext* context = canvas->getGrContext();
|
| + if (NULL == context) {
|
| + return;
|
| + }
|
| +
|
| + SkISize size = this->getISize();
|
| + size.fWidth /= 10;
|
| + size.fHeight /= 10;
|
| + SkImageInfo info = SkImageInfo::MakeN32Premul(size);
|
| + SkSurface* surface = SkSurface::NewRenderTarget(context, info);
|
| +
|
| + if (NULL == surface) {
|
| + return;
|
| + }
|
| +
|
| + canvas->clear(SK_ColorBLACK);
|
| +
|
| + SkRandom rand;
|
| + for (int x = 0; x < 10; ++x) {
|
| + for (int y = 0; y < 10; ++y) {
|
| + surface->getCanvas()->discard();
|
| + // Make something that isn't too close to the background color, black.
|
| + SkColor color = rand.nextU() | 0xFF404040;
|
| + switch (rand.nextULessThan(3)) {
|
| + case 0:
|
| + surface->getCanvas()->drawColor(color);
|
| + break;
|
| + case 1:
|
| + surface->getCanvas()->clear(color);
|
| + break;
|
| + case 2:
|
| + SkColorShader shader(color);
|
| + SkPaint paint;
|
| + paint.setShader(&shader);
|
| + surface->getCanvas()->drawPaint(paint);
|
| + break;
|
| + }
|
| + surface->draw(canvas, 10*x, 10*y, NULL);
|
| + }
|
| + }
|
| +
|
| + surface->getCanvas()->discard();
|
| + surface->unref();
|
| + }
|
| +
|
| +private:
|
| + typedef GM INHERITED;
|
| +};
|
| +
|
| +//////////////////////////////////////////////////////////////////////////////
|
| +
|
| +DEF_GM( return SkNEW(DiscardGM); )
|
| +
|
| +} // end namespace
|
| +
|
| +#endif
|
|
|