// Ensure that the 'getConservativeBounds' calls are returning bounds clamped // to the render target static void test_clip_bounds(skiatest::Reporter* reporter, GrContext* context) { static const int kXSize = 100; static const int kYSize = 100; GrTextureDesc desc; desc.fFlags = kRenderTarget_GrTextureFlagBit; desc.fConfig = kAlpha_8_GrPixelConfig; desc.fWidth = kXSize; desc.fHeight = kYSize; GrTexture* texture = context->createUncachedTexture(desc, NULL, 0); if (!texture) { return; } SkAutoUnref au(texture); SkIRect intScreen = SkIRect::MakeWH(kXSize, kYSize); SkRect screen; screen = SkRect::MakeWH(SkIntToScalar(kXSize), SkIntToScalar(kYSize)); SkRect clipRect(screen); clipRect.outset(10, 10); // create a clip stack that will (trivially) reduce to a single rect that // is larger than the screen SkClipStack stack; stack.clipDevRect(clipRect, SkRegion::kReplace_Op, false); bool isIntersectionOfRects = true; SkRect devStackBounds; stack.getConservativeBounds(0, 0, kXSize, kYSize, &devStackBounds, &isIntersectionOfRects); // make sure that the SkClipStack is behaving itself REPORTER_ASSERT(reporter, screen == devStackBounds); REPORTER_ASSERT(reporter, isIntersectionOfRects); // wrap the SkClipStack in a GrClipData GrClipData clipData; clipData.fClipStack = &stack; SkIRect devGrClipDataBound; clipData.getConservativeBounds(texture, &devGrClipDataBound, &isIntersectionOfRects); // make sure that GrClipData is behaving itself REPORTER_ASSERT(reporter, intScreen == devGrClipDataBound); REPORTER_ASSERT(reporter, isIntersectionOfRects); }
// Ensure that the 'getConservativeBounds' calls are returning bounds clamped // to the render target DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrClipBounds, reporter, ctxInfo) { static const int kXSize = 100; static const int kYSize = 100; const SkIRect intScreen = SkIRect::MakeWH(kXSize, kYSize); const SkRect screen = SkRect::Make(intScreen); SkRect clipRect(screen); clipRect.outset(10, 10); // create a clip stack that will (trivially) reduce to a single rect that // is larger than the screen SkClipStack stack; stack.clipRect(clipRect, SkMatrix::I(), kReplace_SkClipOp, false); bool isIntersectionOfRects = true; SkRect devStackBounds; stack.getConservativeBounds(0, 0, kXSize, kYSize, &devStackBounds, &isIntersectionOfRects); // make sure that the SkClipStack is behaving itself REPORTER_ASSERT(reporter, screen == devStackBounds); REPORTER_ASSERT(reporter, isIntersectionOfRects); // wrap the SkClipStack in a GrClip GrClipStackClip clipData(&stack); SkIRect devGrClipBound; clipData.getConservativeBounds(kXSize, kYSize, &devGrClipBound, &isIntersectionOfRects); // make sure that GrClip is behaving itself REPORTER_ASSERT(reporter, intScreen == devGrClipBound); REPORTER_ASSERT(reporter, isIntersectionOfRects); }