Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(645)

Unified Diff: tests/GrSurfaceTest.cpp

Issue 1121813002: new image from backend desc (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: fix no-gpu version Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/image/SkSurface_Gpu.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « src/image/SkSurface_Gpu.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698