aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm/texdata.cpp
diff options
context:
space:
mode:
authorGravatar robertphillips <robertphillips@google.com>2016-04-28 14:32:04 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-04-28 14:32:04 -0700
commit175dd9b5e3d7d749738dac743d2ac360b5340187 (patch)
treeff0ab4b2fb12c714a1723775d031220a68225d6d /gm/texdata.cpp
parent801b44c45348144a483793e7b24f4d4092a4f74d (diff)
Clean up test drawContext usage
The general idea is to provide access to SkGpuDevice's drawContext rather than its GrRenderTarget. That is usually what the testing framework actually wants. GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1930623003 Review-Url: https://codereview.chromium.org/1930623003
Diffstat (limited to 'gm/texdata.cpp')
-rw-r--r--gm/texdata.cpp177
1 files changed, 91 insertions, 86 deletions
diff --git a/gm/texdata.cpp b/gm/texdata.cpp
index 20cad0c739..977947b0c6 100644
--- a/gm/texdata.cpp
+++ b/gm/texdata.cpp
@@ -19,100 +19,105 @@
static const int S = 200;
DEF_SIMPLE_GM_BG(texdata, canvas, 2 * S, 2 * S, SK_ColorBLACK) {
- GrRenderTarget* target = canvas->internal_private_accessTopLayerRenderTarget();
- GrContext* ctx = canvas->getGrContext();
- sk_sp<GrDrawContext> drawContext(ctx ? ctx->drawContext(sk_ref_sp(target)) : nullptr);
- if (drawContext && target) {
- SkAutoTArray<SkPMColor> gTextureData((2 * S) * (2 * S));
- static const int stride = 2 * S;
- static const SkPMColor gray = SkPackARGB32(0x40, 0x40, 0x40, 0x40);
- static const SkPMColor white = SkPackARGB32(0xff, 0xff, 0xff, 0xff);
- static const SkPMColor red = SkPackARGB32(0x80, 0x80, 0x00, 0x00);
- static const SkPMColor blue = SkPackARGB32(0x80, 0x00, 0x00, 0x80);
- static const SkPMColor green = SkPackARGB32(0x80, 0x00, 0x80, 0x00);
- static const SkPMColor black = SkPackARGB32(0x00, 0x00, 0x00, 0x00);
- for (int i = 0; i < 2; ++i) {
- int offset = 0;
- // fill upper-left
- for (int y = 0; y < S; ++y) {
- for (int x = 0; x < S; ++x) {
- gTextureData[offset + y * stride + x] = gray;
- }
- }
- // fill upper-right
- offset = S;
- for (int y = 0; y < S; ++y) {
- for (int x = 0; x < S; ++x) {
- gTextureData[offset + y * stride + x] = white;
- }
- }
- // fill lower left
- offset = S * stride;
- for (int y = 0; y < S; ++y) {
- for (int x = 0; x < S; ++x) {
- gTextureData[offset + y * stride + x] = black;
- }
- }
- // fill lower right
- offset = S * stride + S;
- for (int y = 0; y < S; ++y) {
- for (int x = 0; x < S; ++x) {
- gTextureData[offset + y * stride + x] = gray;
- }
- }
+ GrDrawContext* drawContext = canvas->internal_private_accessTopLayerDrawContext();
+ if (!drawContext) {
+ skiagm::GM::DrawGpuOnlyMessage(canvas);
+ return;
+ }
- GrSurfaceDesc desc;
- // use RT flag bit because in GL it makes the texture be bottom-up
- desc.fFlags = i ? kRenderTarget_GrSurfaceFlag :
- kNone_GrSurfaceFlags;
- desc.fConfig = kSkia8888_GrPixelConfig;
- desc.fWidth = 2 * S;
- desc.fHeight = 2 * S;
- GrTexture* texture = ctx->textureProvider()->createTexture(
- desc, SkBudgeted::kNo, gTextureData.get(), 0);
+ GrContext* context = canvas->getGrContext();
+ if (!context) {
+ return;
+ }
- if (!texture) {
- return;
- }
- SkAutoTUnref<GrTexture> au(texture);
+ SkAutoTArray<SkPMColor> gTextureData((2 * S) * (2 * S));
+ static const int stride = 2 * S;
+ static const SkPMColor gray = SkPackARGB32(0x40, 0x40, 0x40, 0x40);
+ static const SkPMColor white = SkPackARGB32(0xff, 0xff, 0xff, 0xff);
+ static const SkPMColor red = SkPackARGB32(0x80, 0x80, 0x00, 0x00);
+ static const SkPMColor blue = SkPackARGB32(0x80, 0x00, 0x00, 0x80);
+ static const SkPMColor green = SkPackARGB32(0x80, 0x00, 0x80, 0x00);
+ static const SkPMColor black = SkPackARGB32(0x00, 0x00, 0x00, 0x00);
+ for (int i = 0; i < 2; ++i) {
+ int offset = 0;
+ // fill upper-left
+ for (int y = 0; y < S; ++y) {
+ for (int x = 0; x < S; ++x) {
+ gTextureData[offset + y * stride + x] = gray;
+ }
+ }
+ // fill upper-right
+ offset = S;
+ for (int y = 0; y < S; ++y) {
+ for (int x = 0; x < S; ++x) {
+ gTextureData[offset + y * stride + x] = white;
+ }
+ }
+ // fill lower left
+ offset = S * stride;
+ for (int y = 0; y < S; ++y) {
+ for (int x = 0; x < S; ++x) {
+ gTextureData[offset + y * stride + x] = black;
+ }
+ }
+ // fill lower right
+ offset = S * stride + S;
+ for (int y = 0; y < S; ++y) {
+ for (int x = 0; x < S; ++x) {
+ gTextureData[offset + y * stride + x] = gray;
+ }
+ }
- // setup new clip
- GrClip clip(SkRect::MakeWH(2*S, 2*S));
+ GrSurfaceDesc desc;
+ // use RT flag bit because in GL it makes the texture be bottom-up
+ desc.fFlags = i ? kRenderTarget_GrSurfaceFlag :
+ kNone_GrSurfaceFlags;
+ desc.fConfig = kSkia8888_GrPixelConfig;
+ desc.fWidth = 2 * S;
+ desc.fHeight = 2 * S;
+ GrTexture* texture = context->textureProvider()->createTexture(
+ desc, SkBudgeted::kNo, gTextureData.get(), 0);
- GrPaint paint;
- paint.setPorterDuffXPFactory(SkXfermode::kSrcOver_Mode);
+ if (!texture) {
+ return;
+ }
+ SkAutoTUnref<GrTexture> au(texture);
- SkMatrix vm;
- if (i) {
- vm.setRotate(90 * SK_Scalar1,
- S * SK_Scalar1,
- S * SK_Scalar1);
- } else {
- vm.reset();
- }
- SkMatrix tm;
- tm = vm;
- tm.postIDiv(2*S, 2*S);
- paint.addColorTextureProcessor(texture, tm);
+ // setup new clip
+ GrClip clip(SkRect::MakeWH(2*S, 2*S));
- drawContext->drawRect(clip, paint, vm, SkRect::MakeWH(2*S, 2*S));
+ GrPaint paint;
+ paint.setPorterDuffXPFactory(SkXfermode::kSrcOver_Mode);
- // now update the lower right of the texture in first pass
- // or upper right in second pass
- offset = 0;
- for (int y = 0; y < S; ++y) {
- for (int x = 0; x < S; ++x) {
- gTextureData[offset + y * stride + x] =
- ((x + y) % 2) ? (i ? green : red) : blue;
- }
- }
- texture->writePixels(S, (i ? 0 : S), S, S,
- texture->config(), gTextureData.get(),
- 4 * stride);
- drawContext->drawRect(clip, paint, vm, SkRect::MakeWH(2*S, 2*S));
- }
+ SkMatrix vm;
+ if (i) {
+ vm.setRotate(90 * SK_Scalar1,
+ S * SK_Scalar1,
+ S * SK_Scalar1);
} else {
- skiagm::GM::DrawGpuOnlyMessage(canvas);
+ vm.reset();
}
+ SkMatrix tm;
+ tm = vm;
+ tm.postIDiv(2*S, 2*S);
+ paint.addColorTextureProcessor(texture, tm);
+
+ drawContext->drawRect(clip, paint, vm, SkRect::MakeWH(2*S, 2*S));
+
+ // now update the lower right of the texture in first pass
+ // or upper right in second pass
+ offset = 0;
+ for (int y = 0; y < S; ++y) {
+ for (int x = 0; x < S; ++x) {
+ gTextureData[offset + y * stride + x] =
+ ((x + y) % 2) ? (i ? green : red) : blue;
+ }
+ }
+ texture->writePixels(S, (i ? 0 : S), S, S,
+ texture->config(), gTextureData.get(),
+ 4 * stride);
+ drawContext->drawRect(clip, paint, vm, SkRect::MakeWH(2*S, 2*S));
+ }
}
#endif
+