OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 #include "gm.h" | 8 #include "gm.h" |
9 #include "SkCanvas.h" | 9 #include "SkCanvas.h" |
10 #include "SkGradientShader.h" | 10 #include "SkGradientShader.h" |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
165 } | 165 } |
166 } | 166 } |
167 } | 167 } |
168 | 168 |
169 // This GM attempts to reveal any issues we may have when the GPU has to | 169 // This GM attempts to reveal any issues we may have when the GPU has to |
170 // break up a large texture in order to draw it. The XOR transfer mode will | 170 // break up a large texture in order to draw it. The XOR transfer mode will |
171 // create stripes in the image if there is imprecision in the destination | 171 // create stripes in the image if there is imprecision in the destination |
172 // tile placement. | 172 // tile placement. |
173 class DrawBitmapRect4 : public skiagm::GM { | 173 class DrawBitmapRect4 : public skiagm::GM { |
174 bool fUseIRect; | 174 bool fUseIRect; |
| 175 SkBitmap fBigBitmap; |
| 176 |
175 public: | 177 public: |
176 DrawBitmapRect4(bool useIRect) : fUseIRect(useIRect) { | 178 DrawBitmapRect4(bool useIRect) : fUseIRect(useIRect) { |
177 this->setBGColor(0x88444444); | 179 this->setBGColor(0x88444444); |
178 } | 180 } |
179 | 181 |
180 protected: | 182 protected: |
181 virtual SkString onShortName() SK_OVERRIDE { | 183 virtual SkString onShortName() SK_OVERRIDE { |
182 SkString str; | 184 SkString str; |
183 str.printf("bigbitmaprect_%s", fUseIRect ? "i" : "s"); | 185 str.printf("bigbitmaprect_%s", fUseIRect ? "i" : "s"); |
184 return str; | 186 return str; |
185 } | 187 } |
186 | 188 |
187 virtual SkISize onISize() SK_OVERRIDE { | 189 virtual SkISize onISize() SK_OVERRIDE { |
188 return SkISize::Make(640, 480); | 190 return SkISize::Make(640, 480); |
189 } | 191 } |
190 | 192 |
| 193 virtual void onOnceBeforeDraw() SK_OVERRIDE { |
| 194 make_big_bitmap(&fBigBitmap); |
| 195 } |
| 196 |
191 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { | 197 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { |
192 | 198 |
193 SkXfermode* mode = SkXfermode::Create(SkXfermode::kXor_Mode); | 199 SkXfermode* mode = SkXfermode::Create(SkXfermode::kXor_Mode); |
194 | 200 |
195 SkPaint paint; | 201 SkPaint paint; |
196 paint.setAlpha(128); | 202 paint.setAlpha(128); |
197 paint.setXfermode(mode)->unref(); | 203 paint.setXfermode(mode)->unref(); |
198 | 204 |
199 SkBitmap bitmap; | |
200 make_big_bitmap(&bitmap); | |
201 | |
202 SkRect srcR1 = { 0.0f, 0.0f, 4096.0f, 2040.0f }; | 205 SkRect srcR1 = { 0.0f, 0.0f, 4096.0f, 2040.0f }; |
203 SkRect dstR1 = { 10.1f, 10.1f, 629.9f, 400.9f }; | 206 SkRect dstR1 = { 10.1f, 10.1f, 629.9f, 400.9f }; |
204 | 207 |
205 SkRect srcR2 = { 4085.0f, 10.0f, 4087.0f, 12.0f }; | 208 SkRect srcR2 = { 4085.0f, 10.0f, 4087.0f, 12.0f }; |
206 SkRect dstR2 = { 10, 410, 30, 430 }; | 209 SkRect dstR2 = { 10, 410, 30, 430 }; |
207 | 210 |
208 if (!fUseIRect) { | 211 if (!fUseIRect) { |
209 canvas->drawBitmapRectToRect(bitmap, &srcR1, dstR1, &paint); | 212 canvas->drawBitmapRectToRect(fBigBitmap, &srcR1, dstR1, &paint); |
210 canvas->drawBitmapRectToRect(bitmap, &srcR2, dstR2, &paint); | 213 canvas->drawBitmapRectToRect(fBigBitmap, &srcR2, dstR2, &paint); |
211 } else { | 214 } else { |
212 SkIRect iSrcR1, iSrcR2; | 215 SkIRect iSrcR1, iSrcR2; |
213 | 216 |
214 srcR1.roundOut(&iSrcR1); | 217 srcR1.roundOut(&iSrcR1); |
215 srcR2.roundOut(&iSrcR2); | 218 srcR2.roundOut(&iSrcR2); |
216 | 219 |
217 canvas->drawBitmapRect(bitmap, &iSrcR1, dstR1, &paint); | 220 canvas->drawBitmapRect(fBigBitmap, &iSrcR1, dstR1, &paint); |
218 canvas->drawBitmapRect(bitmap, &iSrcR2, dstR2, &paint); | 221 canvas->drawBitmapRect(fBigBitmap, &iSrcR2, dstR2, &paint); |
219 } | 222 } |
220 } | 223 } |
221 | 224 |
222 private: | 225 private: |
223 typedef skiagm::GM INHERITED; | 226 typedef skiagm::GM INHERITED; |
224 }; | 227 }; |
225 | 228 |
226 ////////////////////////////////////////////////////////////////////////////// | 229 ////////////////////////////////////////////////////////////////////////////// |
227 | 230 |
228 static skiagm::GM* MyFactory0(void*) { return new DrawBitmapRect2(false); } | 231 static skiagm::GM* MyFactory0(void*) { return new DrawBitmapRect2(false); } |
229 static skiagm::GM* MyFactory1(void*) { return new DrawBitmapRect2(true); } | 232 static skiagm::GM* MyFactory1(void*) { return new DrawBitmapRect2(true); } |
230 | 233 |
231 static skiagm::GM* MyFactory2(void*) { return new DrawBitmapRect3(); } | 234 static skiagm::GM* MyFactory2(void*) { return new DrawBitmapRect3(); } |
232 | 235 |
233 #ifndef SK_BUILD_FOR_ANDROID | 236 #ifndef SK_BUILD_FOR_ANDROID |
234 static skiagm::GM* MyFactory3(void*) { return new DrawBitmapRect4(false); } | 237 static skiagm::GM* MyFactory3(void*) { return new DrawBitmapRect4(false); } |
235 static skiagm::GM* MyFactory4(void*) { return new DrawBitmapRect4(true); } | 238 static skiagm::GM* MyFactory4(void*) { return new DrawBitmapRect4(true); } |
236 #endif | 239 #endif |
237 | 240 |
238 static skiagm::GMRegistry reg0(MyFactory0); | 241 static skiagm::GMRegistry reg0(MyFactory0); |
239 static skiagm::GMRegistry reg1(MyFactory1); | 242 static skiagm::GMRegistry reg1(MyFactory1); |
240 | 243 |
241 static skiagm::GMRegistry reg2(MyFactory2); | 244 static skiagm::GMRegistry reg2(MyFactory2); |
242 | 245 |
243 #ifndef SK_BUILD_FOR_ANDROID | 246 #ifndef SK_BUILD_FOR_ANDROID |
244 static skiagm::GMRegistry reg3(MyFactory3); | 247 static skiagm::GMRegistry reg3(MyFactory3); |
245 static skiagm::GMRegistry reg4(MyFactory4); | 248 static skiagm::GMRegistry reg4(MyFactory4); |
246 #endif | 249 #endif |
OLD | NEW |