| Index: tests/GrTextureMipMapInvalidationTest.cpp
|
| diff --git a/tests/GrTextureMipMapInvalidationTest.cpp b/tests/GrTextureMipMapInvalidationTest.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ab5c02ac94a75ecc07875bba9629c8e3fa56f075
|
| --- /dev/null
|
| +++ b/tests/GrTextureMipMapInvalidationTest.cpp
|
| @@ -0,0 +1,66 @@
|
| +/*
|
| + * Copyright 2013 Google Inc.
|
| + *
|
| + * Use of this source code is governed by a BSD-style license that can be
|
| + * found in the LICENSE file.
|
| + */
|
| +
|
| +#include "SkTypes.h"
|
| +
|
| +#if SK_SUPPORT_GPU
|
| +
|
| +#include "GrContext.h"
|
| +#include "GrContextFactory.h"
|
| +#include "GrTexture.h"
|
| +#include "GrTexturePriv.h"
|
| +#include "SkCanvas.h"
|
| +#include "SkGr.h"
|
| +#include "SkSurface.h"
|
| +#include "Test.h"
|
| +
|
| +// Tests that GrSurface::asTexture(), GrSurface::asRenderTarget(), and static upcasting of texture
|
| +// and render targets to GrSurface all work as expected.
|
| +DEF_GPUTEST(GrTextureMipMapInvalidationTest, reporter, factory) {
|
| + GrContext* context = factory->get(GrContextFactory::kNull_GLContextType);
|
| + if (context) {
|
| + GrSurfaceDesc desc;
|
| + desc.fConfig = kSkia8888_GrPixelConfig;
|
| + desc.fFlags = kRenderTarget_GrSurfaceFlag;
|
| + desc.fWidth = 256;
|
| + desc.fHeight = 256;
|
| + desc.fSampleCnt = 0;
|
| + GrSurface* texRT1 = context->textureProvider()->createTexture(desc, false, NULL, 0);
|
| + GrSurface* texRT2 = context->textureProvider()->createTexture(desc, false, NULL, 0);
|
| + REPORTER_ASSERT(reporter, NULL != texRT1);
|
| + REPORTER_ASSERT(reporter, NULL != texRT2);
|
| + GrTexture* tex = texRT1->asTexture();
|
| + REPORTER_ASSERT(reporter, NULL != tex);
|
| + SkBitmap bitmap;
|
| + GrWrapTextureInBitmap(tex, 256, 256, false, &bitmap);
|
| +
|
| + // No mipmaps initially
|
| + REPORTER_ASSERT(reporter, false == tex->texturePriv().hasMipMaps());
|
| +
|
| + // Painting with downscale and medium filter quality should result in mipmap creation
|
| + SkSurface* surface = SkSurface::NewRenderTargetDirect(texRT2->asRenderTarget());
|
| + SkPaint paint;
|
| + paint.setFilterQuality(kMedium_SkFilterQuality);
|
| + surface->getCanvas()->scale(0.2f, 0.2f);
|
| + surface->getCanvas()->drawBitmap(bitmap, 0, 0, &paint);
|
| + context->flush();
|
| +
|
| + REPORTER_ASSERT(reporter, true == tex->texturePriv().hasMipMaps());
|
| + REPORTER_ASSERT(reporter, false == tex->texturePriv().mipMapsAreDirty());
|
| +
|
| + // Invalidating the contents of the bitmap should invalidate the mipmap, but not de-allocate
|
| + bitmap.notifyPixelsChanged();
|
| + REPORTER_ASSERT(reporter, true == tex->texturePriv().hasMipMaps());
|
| + REPORTER_ASSERT(reporter, true == tex->texturePriv().mipMapsAreDirty());
|
| +
|
| + surface->unref();
|
| + texRT1->unref();
|
| + texRT2->unref();
|
| + }
|
| +}
|
| +
|
| +#endif
|
|
|