OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkTypes.h" | 8 #include "SkTypes.h" |
9 | 9 |
10 #if SK_SUPPORT_GPU | 10 #if SK_SUPPORT_GPU |
11 | 11 |
12 #include "GrContext.h" | 12 #include "GrContext.h" |
13 #include "GrContextFactory.h" | 13 #include "GrContextFactory.h" |
14 #include "GrRenderTarget.h" | 14 #include "GrRenderTarget.h" |
15 #include "GrTexture.h" | 15 #include "GrTexture.h" |
16 #include "GrSurfacePriv.h" | 16 #include "GrSurfacePriv.h" |
17 #include "SkCanvas.h" | |
18 #include "SkImage.h" | |
19 #include "SkSurface.h" | |
20 #include "SkUtils.h" | |
17 #include "Test.h" | 21 #include "Test.h" |
18 | 22 |
19 // Tests that GrSurface::asTexture(), GrSurface::asRenderTarget(), and static up casting of texture | 23 // Tests that GrSurface::asTexture(), GrSurface::asRenderTarget(), and static up casting of texture |
20 // and render targets to GrSurface all work as expected. | 24 // and render targets to GrSurface all work as expected. |
21 DEF_GPUTEST(GrSurface, reporter, factory) { | 25 DEF_GPUTEST(GrSurface, reporter, factory) { |
22 GrContext* context = factory->get(GrContextFactory::kNull_GLContextType); | 26 GrContext* context = factory->get(GrContextFactory::kNull_GLContextType); |
23 if (context) { | 27 if (context) { |
24 GrSurfaceDesc desc; | 28 GrSurfaceDesc desc; |
25 desc.fConfig = kSkia8888_GrPixelConfig; | 29 desc.fConfig = kSkia8888_GrPixelConfig; |
26 desc.fFlags = kRenderTarget_GrSurfaceFlag; | 30 desc.fFlags = kRenderTarget_GrSurfaceFlag; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
60 static_cast<GrSurface*>(texRT2->asTexture())); | 64 static_cast<GrSurface*>(texRT2->asTexture())); |
61 REPORTER_ASSERT(reporter, static_cast<GrSurface*>(texRT2->asRenderTarget ()) == | 65 REPORTER_ASSERT(reporter, static_cast<GrSurface*>(texRT2->asRenderTarget ()) == |
62 static_cast<GrSurface*>(texRT2->asTexture())) ; | 66 static_cast<GrSurface*>(texRT2->asTexture())) ; |
63 | 67 |
64 texRT1->unref(); | 68 texRT1->unref(); |
65 texRT2->unref(); | 69 texRT2->unref(); |
66 tex1->unref(); | 70 tex1->unref(); |
67 } | 71 } |
68 } | 72 } |
69 | 73 |
74 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.
| |
75 const SkImageInfo info = SkImageInfo::MakeN32Premul(w, h); | |
76 SkAutoTUnref<SkSurface> surface(SkSurface::NewRenderTarget(ctx, SkSurface::k No_Budgeted, info)); | |
77 if (!surface) { | |
78 return NULL; | |
79 } | |
80 surface->getCanvas()->drawColor(color); | |
81 surface->getCanvas()->flush(); | |
82 return surface->newImageSnapshot(); | |
83 } | |
84 | |
85 static void test_tex_image(skiatest::Reporter* reporter, GrContext* ctx, GrBacke ndObject nativeTex, | |
86 int w, int h, bool testCopy, SkPMColor expected) { | |
87 GrBackendTextureDesc desc; | |
88 desc.fConfig = kSkia8888_GrPixelConfig; | |
89 // need to be a rendertarget for now... | |
90 desc.fFlags = kRenderTarget_GrBackendTextureFlag; //kNone_GrBackendTexture Flag; | |
91 desc.fWidth = w; | |
92 desc.fHeight = h; | |
93 desc.fSampleCnt = 0; | |
94 desc.fTextureHandle = nativeTex; | |
95 SkAutoTUnref<SkImage> image(testCopy ? | |
96 SkImage::NewFromTextureCopy(ctx, desc) : | |
97 SkImage::NewFromTexture(ctx, desc)); | |
98 REPORTER_ASSERT(reporter, image.get() != NULL); | |
99 if (image) { | |
100 const SkImageInfo info = SkImageInfo::MakeN32Premul(1, 1); | |
101 SkPMColor pixel; | |
102 REPORTER_ASSERT(reporter, image->readPixels(info, &pixel, sizeof(pixel), 0, 0)); | |
103 REPORTER_ASSERT(reporter, pixel == expected); | |
104 } | |
105 } | |
106 | |
robertphillips
2015/05/07 20:09:08
// Test wrapping a GrBackendObject in a surface, r
reed1
2015/05/07 20:28:00
Acknowledged.
| |
107 DEF_GPUTEST(SkImage_NewFromTexture, reporter, factory) { | |
108 GrContext* ctx = factory->get(GrContextFactory::kNative_GLContextType); | |
109 if (!ctx) { | |
110 REPORTER_ASSERT(reporter, false); | |
111 return; | |
112 } | |
113 | |
114 const int w = 10; | |
115 const int h = 10; | |
116 const SkColor srcColor = SK_ColorRED; | |
robertphillips
2015/05/07 20:09:07
constify 'expected' too ?
reed1
2015/05/07 20:28:00
Done.
| |
117 SkPMColor expected = SkPreMultiplyColor(srcColor); | |
118 SkAutoTUnref<SkImage> srcImg(make_gpu_image(ctx, w, h, srcColor)); | |
119 if (!srcImg) { | |
120 REPORTER_ASSERT(reporter, false); | |
121 return; | |
122 } | |
123 | |
124 GrBackendObject srcTex = srcImg->getTexture()->getTextureHandle(); | |
125 test_tex_image(reporter, ctx, srcTex, w, h, false, expected); | |
126 test_tex_image(reporter, ctx, srcTex, w, h, true, expected); | |
127 } | |
128 | |
robertphillips
2015/05/07 20:09:08
// Test pulling a GrBackendObject from a GrTexture
reed1
2015/05/07 20:28:00
Acknowledged.
| |
129 DEF_GPUTEST(SkImage_NewFromTexture2, reporter, factory) { | |
130 GrContext* ctx = factory->get(GrContextFactory::kNative_GLContextType); | |
131 if (!ctx) { | |
132 REPORTER_ASSERT(reporter, false); | |
133 return; | |
134 } | |
135 GrTextureProvider* provider = ctx->textureProvider(); | |
136 | |
137 const int w = 10; | |
138 const int h = 10; | |
139 SkPMColor storage[w * h]; | |
140 SkPMColor expected = SkPreMultiplyColor(SK_ColorRED); | |
141 sk_memset32(storage, expected, w * h); | |
142 | |
143 GrSurfaceDesc desc; | |
144 desc.fFlags = kRenderTarget_GrSurfaceFlag; // needs to be a rendertarget fo r readpixels(); | |
145 desc.fOrigin = kDefault_GrSurfaceOrigin; | |
146 desc.fWidth = w; | |
147 desc.fHeight = h; | |
148 desc.fConfig = kSkia8888_GrPixelConfig; | |
149 desc.fSampleCnt = 0; | |
150 | |
151 SkAutoTUnref<GrTexture> tex(provider->createTexture(desc, false, storage, w * 4)); | |
152 if (!tex) { | |
153 REPORTER_ASSERT(reporter, false); | |
154 return; | |
155 } | |
156 | |
157 GrBackendObject srcTex = tex->getTextureHandle(); | |
158 test_tex_image(reporter, ctx, srcTex, w, h, false, expected); | |
159 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.
| |
160 } | |
161 | |
70 #endif | 162 #endif |
OLD | NEW |