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

Side by Side Diff: tests/SurfaceTest.cpp

Issue 1191513002: Don't clear in SkSurface::NewWrappedRenderTarget (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: cleanup Created 5 years, 6 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 unified diff | Download patch
« no previous file with comments | « src/image/SkSurface_Gpu.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "SkCanvas.h" 8 #include "SkCanvas.h"
9 #include "SkData.h" 9 #include "SkData.h"
10 #include "SkDevice.h" 10 #include "SkDevice.h"
11 #include "SkImageEncoder.h" 11 #include "SkImageEncoder.h"
12 #include "SkImage_Base.h" 12 #include "SkImage_Base.h"
13 #include "SkRRect.h" 13 #include "SkRRect.h"
14 #include "SkSurface.h" 14 #include "SkSurface.h"
15 #include "SkUtils.h" 15 #include "SkUtils.h"
16 #include "Test.h" 16 #include "Test.h"
17 17
18 #if SK_SUPPORT_GPU 18 #if SK_SUPPORT_GPU
19 #include "GrContextFactory.h" 19 #include "GrContextFactory.h"
20 #else 20 #include "GrTest.h"
21 #include "gl/GrGLInterface.h"
22 #include "gl/GrGLUtil.h"#else
reed1 2015/06/15 16:09:26 LF before #else ?
21 class GrContextFactory; 23 class GrContextFactory;
22 class GrContext; 24 class GrContext;
23 #endif 25 #endif
24 26
25 enum SurfaceType { 27 enum SurfaceType {
26 kRaster_SurfaceType, 28 kRaster_SurfaceType,
27 kRasterDirect_SurfaceType, 29 kRasterDirect_SurfaceType,
28 kGpu_SurfaceType, 30 kGpu_SurfaceType,
29 kGpuScratch_SurfaceType, 31 kGpuScratch_SurfaceType,
30 }; 32 };
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 REPORTER_ASSERT(reporter, NULL == 92 REPORTER_ASSERT(reporter, NULL ==
91 SkSurface::NewRenderTarget(ctx, SkSurface::kNo_Budgeted, info, 0, NULL)); 93 SkSurface::NewRenderTarget(ctx, SkSurface::kNo_Budgeted, info, 0, NULL));
92 } 94 }
93 } 95 }
94 96
95 #if SK_SUPPORT_GPU 97 #if SK_SUPPORT_GPU
96 static void test_wrapped_texture_surface(skiatest::Reporter* reporter, GrContext * ctx) { 98 static void test_wrapped_texture_surface(skiatest::Reporter* reporter, GrContext * ctx) {
97 if (NULL == ctx) { 99 if (NULL == ctx) {
98 return; 100 return;
99 } 101 }
100 // Test the wrapped factory for SkSurface by creating a texture using ctx an d then treat it as
101 // an external texture and wrap it in a SkSurface.
102 102
103 GrSurfaceDesc texDesc; 103 GrTestTarget tt;
104 texDesc.fConfig = kRGBA_8888_GrPixelConfig; 104 ctx->getTestTarget(&tt);
105 texDesc.fFlags = kRenderTarget_GrSurfaceFlag; 105 if (!tt.target()) {
106 texDesc.fWidth = texDesc.fHeight = 100; 106 SkDEBUGFAIL("Couldn't get Gr test target.");
107 texDesc.fSampleCnt = 0;
108 texDesc.fOrigin = kTopLeft_GrSurfaceOrigin;
109 SkAutoTUnref<GrSurface> dummySurface(ctx->textureProvider()->createTexture(t exDesc, false));
110
111 REPORTER_ASSERT(reporter, dummySurface && dummySurface->asTexture() &&
112 dummySurface->asRenderTarget());
113 if (!dummySurface || !dummySurface->asTexture() || !dummySurface->asRenderTa rget()) {
114 return; 107 return;
115 } 108 }
116 109
117 GrBackendObject textureHandle = dummySurface->asTexture()->getTextureHandle( ); 110 // We currently have only implemented the texture uploads for GL.
111 const GrGLInterface* gl = tt.glInterface();
112 if (!gl) {
113 return;
114 }
115
116 // Test the wrapped factory for SkSurface by creating a texture using GL and then wrap it in
117 // a SkSurface.
118 GrGLuint texID;
119 static const int kW = 100;
120 static const int kH = 100;
121 static const uint32_t kOrigColor = 0xFFAABBCC;
122 SkAutoTArray<uint32_t> pixels(kW * kH);
123 sk_memset32(pixels.get(), kOrigColor, kW * kH);
124 GR_GL_CALL(gl, GenTextures(1, &texID));
125 GR_GL_CALL(gl, ActiveTexture(GR_GL_TEXTURE0));
126 GR_GL_CALL(gl, PixelStorei(GR_GL_UNPACK_ALIGNMENT, 1));
127 GR_GL_CALL(gl, BindTexture(GR_GL_TEXTURE_2D, texID));
128 GR_GL_CALL(gl, TexParameteri(GR_GL_TEXTURE_2D, GR_GL_TEXTURE_MAG_FILTER,
129 GR_GL_NEAREST));
130 GR_GL_CALL(gl, TexParameteri(GR_GL_TEXTURE_2D, GR_GL_TEXTURE_MIN_FILTER,
131 GR_GL_NEAREST));
132 GR_GL_CALL(gl, TexParameteri(GR_GL_TEXTURE_2D, GR_GL_TEXTURE_WRAP_S,
133 GR_GL_CLAMP_TO_EDGE));
134 GR_GL_CALL(gl, TexParameteri(GR_GL_TEXTURE_2D, GR_GL_TEXTURE_WRAP_T,
135 GR_GL_CLAMP_TO_EDGE));
136 GR_GL_CALL(gl, TexImage2D(GR_GL_TEXTURE_2D, 0, GR_GL_RGBA, kW, kH, 0, GR_GL_ RGBA,
137 GR_GL_UNSIGNED_BYTE,
138 pixels.get()));
118 139
119 GrBackendTextureDesc wrappedDesc; 140 GrBackendTextureDesc wrappedDesc;
120 wrappedDesc.fConfig = dummySurface->config(); 141 wrappedDesc.fConfig = kRGBA_8888_GrPixelConfig;
121 wrappedDesc.fWidth = dummySurface->width(); 142 wrappedDesc.fWidth = kW;
122 wrappedDesc.fHeight = dummySurface->height(); 143 wrappedDesc.fHeight = kH;
123 wrappedDesc.fOrigin = dummySurface->origin(); 144 wrappedDesc.fOrigin = kBottomLeft_GrSurfaceOrigin;
124 wrappedDesc.fSampleCnt = dummySurface->asRenderTarget()->numColorSamples(); 145 wrappedDesc.fSampleCnt = 0;
125 wrappedDesc.fFlags = kRenderTarget_GrBackendTextureFlag; 146 wrappedDesc.fFlags = kRenderTarget_GrBackendTextureFlag;
126 wrappedDesc.fTextureHandle = textureHandle; 147 wrappedDesc.fTextureHandle = texID;
127 148
128 SkAutoTUnref<SkSurface> surface(SkSurface::NewWrappedRenderTarget(ctx, wrapp edDesc, NULL)); 149 SkAutoTUnref<SkSurface> surface(SkSurface::NewWrappedRenderTarget(ctx, wrapp edDesc, NULL));
129 REPORTER_ASSERT(reporter, surface); 150 REPORTER_ASSERT(reporter, surface);
151 if (surface) {
152 // Validate that we can draw to the canvas and that the original texture color is preserved
153 // in pixels that aren't rendered to via the surface.
154 SkPaint paint;
155 static const SkColor kRectColor = ~kOrigColor | 0xFF000000;
156 paint.setColor(kRectColor);
157 surface->getCanvas()->drawRect(SkRect::MakeWH(SkIntToScalar(kW), SkIntTo Scalar(kH)/2),
158 paint);
159 SkImageInfo readInfo = SkImageInfo::MakeN32Premul(kW, kH);
160 surface->readPixels(readInfo, pixels.get(), kW * sizeof(uint32_t), 0, 0) ;
161 bool stop = false;
162 SkPMColor origColorPM = SkPackARGB32((kOrigColor >> 24 & 0xFF),
163 (kOrigColor >> 0 & 0xFF),
164 (kOrigColor >> 8 & 0xFF),
165 (kOrigColor >> 16 & 0xFF));
166 SkPMColor rectColorPM = SkPackARGB32((kRectColor >> 24 & 0xFF),
167 (kRectColor >> 16 & 0xFF),
168 (kRectColor >> 8 & 0xFF),
169 (kRectColor >> 0 & 0xFF));
170 for (int y = 0; y < kH/2 && !stop; ++y) {
171 for (int x = 0; x < kW && !stop; ++x) {
172 REPORTER_ASSERT(reporter, rectColorPM == pixels[x + y * kW]);
173 if (rectColorPM != pixels[x + y * kW]) {
174 stop = true;
175 }
176 }
177 }
178 stop = false;
179 for (int y = kH/2; y < kH && !stop; ++y) {
180 for (int x = 0; x < kW && !stop; ++x) {
181 REPORTER_ASSERT(reporter, origColorPM == pixels[x + y * kW]);
182 if (origColorPM != pixels[x + y * kW]) {
183 stop = true;
184 }
185 }
186 }
187 }
130 } 188 }
131 #endif 189 #endif
132 190
133 191
134 static void test_image(skiatest::Reporter* reporter) { 192 static void test_image(skiatest::Reporter* reporter) {
135 SkImageInfo info = SkImageInfo::MakeN32Premul(1, 1); 193 SkImageInfo info = SkImageInfo::MakeN32Premul(1, 1);
136 size_t rowBytes = info.minRowBytes(); 194 size_t rowBytes = info.minRowBytes();
137 size_t size = info.getSafeSize(rowBytes); 195 size_t size = info.getSafeSize(rowBytes);
138 SkData* data = SkData::NewUninitialized(size); 196 SkData* data = SkData::NewUninitialized(size);
139 197
(...skipping 597 matching lines...) Expand 10 before | Expand all | Expand 10 after
737 // Now lets jam new colors into our "external" texture, and see if the image s notice 795 // Now lets jam new colors into our "external" texture, and see if the image s notice
738 const SkPMColor expected1 = SkPreMultiplyColor(SK_ColorBLUE); 796 const SkPMColor expected1 = SkPreMultiplyColor(SK_ColorBLUE);
739 sk_memset32(storage, expected1, w * h); 797 sk_memset32(storage, expected1, w * h);
740 tex->writePixels(0, 0, w, h, kSkia8888_GrPixelConfig, storage, GrContext::kF lushWrites_PixelOp); 798 tex->writePixels(0, 0, w, h, kSkia8888_GrPixelConfig, storage, GrContext::kF lushWrites_PixelOp);
741 799
742 // We expect the ref'd image to see the new color, but cpy'd one should stil l see the old color 800 // We expect the ref'd image to see the new color, but cpy'd one should stil l see the old color
743 test_image_color(reporter, refImg, expected1); 801 test_image_color(reporter, refImg, expected1);
744 test_image_color(reporter, cpyImg, expected0); 802 test_image_color(reporter, cpyImg, expected0);
745 } 803 }
746 #endif 804 #endif
OLDNEW
« 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