Chromium Code Reviews| Index: tests/GrSurfaceTest.cpp |
| diff --git a/tests/GrSurfaceTest.cpp b/tests/GrSurfaceTest.cpp |
| index 685bf4187461f352c6bdca227f0e78326393ff6e..68d067d75566de5d61a639cfc9a5d3eb47472960 100644 |
| --- a/tests/GrSurfaceTest.cpp |
| +++ b/tests/GrSurfaceTest.cpp |
| @@ -14,6 +14,10 @@ |
| #include "GrRenderTarget.h" |
| #include "GrTexture.h" |
| #include "GrSurfacePriv.h" |
| +#include "SkCanvas.h" |
| +#include "SkImage.h" |
| +#include "SkSurface.h" |
| +#include "SkUtils.h" |
| #include "Test.h" |
| // Tests that GrSurface::asTexture(), GrSurface::asRenderTarget(), and static upcasting of texture |
| @@ -67,4 +71,92 @@ DEF_GPUTEST(GrSurface, reporter, factory) { |
| } |
| } |
| +static SkImage* make_gpu_image(GrContext* ctx, int w, int h, SkColor color) { |
|
bsalomon
2015/05/07 19:52:22
This file is really about testing GrSurface, not S
reed1
2015/05/07 20:28:00
Done.
|
| + const SkImageInfo info = SkImageInfo::MakeN32Premul(w, h); |
| + SkAutoTUnref<SkSurface> surface(SkSurface::NewRenderTarget(ctx, SkSurface::kNo_Budgeted, info)); |
| + if (!surface) { |
| + return NULL; |
| + } |
| + surface->getCanvas()->drawColor(color); |
| + surface->getCanvas()->flush(); |
| + return surface->newImageSnapshot(); |
| +} |
| + |
| +static void test_tex_image(skiatest::Reporter* reporter, GrContext* ctx, GrBackendObject nativeTex, |
| + int w, int h, bool testCopy, SkPMColor expected) { |
| + GrBackendTextureDesc desc; |
| + desc.fConfig = kSkia8888_GrPixelConfig; |
| + // need to be a rendertarget for now... |
| + desc.fFlags = kRenderTarget_GrBackendTextureFlag; //kNone_GrBackendTextureFlag; |
| + desc.fWidth = w; |
| + desc.fHeight = h; |
| + desc.fSampleCnt = 0; |
| + desc.fTextureHandle = nativeTex; |
| + SkAutoTUnref<SkImage> image(testCopy ? |
| + SkImage::NewFromTextureCopy(ctx, desc) : |
| + SkImage::NewFromTexture(ctx, desc)); |
| + REPORTER_ASSERT(reporter, image.get() != NULL); |
| + if (image) { |
| + const SkImageInfo info = SkImageInfo::MakeN32Premul(1, 1); |
| + SkPMColor pixel; |
| + REPORTER_ASSERT(reporter, image->readPixels(info, &pixel, sizeof(pixel), 0, 0)); |
| + REPORTER_ASSERT(reporter, pixel == expected); |
| + } |
| +} |
| + |
|
robertphillips
2015/05/07 20:09:08
// Test wrapping a GrBackendObject in a surface, r
reed1
2015/05/07 20:28:00
Acknowledged.
|
| +DEF_GPUTEST(SkImage_NewFromTexture, reporter, factory) { |
| + GrContext* ctx = factory->get(GrContextFactory::kNative_GLContextType); |
| + if (!ctx) { |
| + REPORTER_ASSERT(reporter, false); |
| + return; |
| + } |
| + |
| + const int w = 10; |
| + const int h = 10; |
| + const SkColor srcColor = SK_ColorRED; |
|
robertphillips
2015/05/07 20:09:07
constify 'expected' too ?
reed1
2015/05/07 20:28:00
Done.
|
| + SkPMColor expected = SkPreMultiplyColor(srcColor); |
| + SkAutoTUnref<SkImage> srcImg(make_gpu_image(ctx, w, h, srcColor)); |
| + if (!srcImg) { |
| + REPORTER_ASSERT(reporter, false); |
| + return; |
| + } |
| + |
| + GrBackendObject srcTex = srcImg->getTexture()->getTextureHandle(); |
| + test_tex_image(reporter, ctx, srcTex, w, h, false, expected); |
| + test_tex_image(reporter, ctx, srcTex, w, h, true, expected); |
| +} |
| + |
|
robertphillips
2015/05/07 20:09:08
// Test pulling a GrBackendObject from a GrTexture
reed1
2015/05/07 20:28:00
Acknowledged.
|
| +DEF_GPUTEST(SkImage_NewFromTexture2, reporter, factory) { |
| + GrContext* ctx = factory->get(GrContextFactory::kNative_GLContextType); |
| + if (!ctx) { |
| + REPORTER_ASSERT(reporter, false); |
| + return; |
| + } |
| + GrTextureProvider* provider = ctx->textureProvider(); |
| + |
| + const int w = 10; |
| + const int h = 10; |
| + SkPMColor storage[w * h]; |
| + SkPMColor expected = SkPreMultiplyColor(SK_ColorRED); |
| + sk_memset32(storage, expected, w * h); |
| + |
| + GrSurfaceDesc desc; |
| + desc.fFlags = kRenderTarget_GrSurfaceFlag; // needs to be a rendertarget for readpixels(); |
| + desc.fOrigin = kDefault_GrSurfaceOrigin; |
| + desc.fWidth = w; |
| + desc.fHeight = h; |
| + desc.fConfig = kSkia8888_GrPixelConfig; |
| + desc.fSampleCnt = 0; |
| + |
| + SkAutoTUnref<GrTexture> tex(provider->createTexture(desc, false, storage, w * 4)); |
| + if (!tex) { |
| + REPORTER_ASSERT(reporter, false); |
| + return; |
| + } |
| + |
| + GrBackendObject srcTex = tex->getTextureHandle(); |
| + test_tex_image(reporter, ctx, srcTex, w, h, false, expected); |
| + test_tex_image(reporter, ctx, srcTex, w, h, true, expected); |
|
robertphillips
2015/05/07 20:09:08
Re-scribble on 'tex' and readback again ?
reed1
2015/05/07 20:28:00
Done.
|
| +} |
| + |
| #endif |