OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 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 #ifndef PictureRenderer_DEFINED | 8 #ifndef PictureRenderer_DEFINED |
9 #define PictureRenderer_DEFINED | 9 #define PictureRenderer_DEFINED |
10 | 10 |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
76 static_assert(!(kHinting_DrawFilterFlag & SkPaint::kAllFlags), | 76 static_assert(!(kHinting_DrawFilterFlag & SkPaint::kAllFlags), |
77 "hinting_flag_must_be_greater"); | 77 "hinting_flag_must_be_greater"); |
78 static_assert(!(kSlightHinting_DrawFilterFlag & SkPaint::kAllFlags), | 78 static_assert(!(kSlightHinting_DrawFilterFlag & SkPaint::kAllFlags), |
79 "slight_hinting_flag_must_be_greater"); | 79 "slight_hinting_flag_must_be_greater"); |
80 | 80 |
81 /** | 81 /** |
82 * Called with each new SkPicture to render. | 82 * Called with each new SkPicture to render. |
83 * | 83 * |
84 * @param pict The SkPicture to render. | 84 * @param pict The SkPicture to render. |
85 * @param writePath The output directory within which this renderer should w
rite all images, | 85 * @param writePath The output directory within which this renderer should w
rite all images, |
86 * or NULL if this renderer should not write all images. | 86 * or nullptr if this renderer should not write all images. |
87 * @param mismatchPath The output directory within which this renderer shoul
d write any images | 87 * @param mismatchPath The output directory within which this renderer shoul
d write any images |
88 * which do not match expectations, or NULL if this renderer should not
write mismatches. | 88 * which do not match expectations, or nullptr if this renderer should n
ot write mismatches. |
89 * @param inputFilename The name of the input file we are rendering. | 89 * @param inputFilename The name of the input file we are rendering. |
90 * @param useChecksumBasedFilenames Whether to use checksum-based filenames
when writing | 90 * @param useChecksumBasedFilenames Whether to use checksum-based filenames
when writing |
91 * bitmap images to disk. | 91 * bitmap images to disk. |
92 * @param useMultiPictureDraw true if MultiPictureDraw should be used for re
ndering | 92 * @param useMultiPictureDraw true if MultiPictureDraw should be used for re
ndering |
93 */ | 93 */ |
94 virtual void init(const SkPicture* pict, | 94 virtual void init(const SkPicture* pict, |
95 const SkString* writePath, | 95 const SkString* writePath, |
96 const SkString* mismatchPath, | 96 const SkString* mismatchPath, |
97 const SkString* inputFilename, | 97 const SkString* inputFilename, |
98 bool useChecksumBasedFilenames, | 98 bool useChecksumBasedFilenames, |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
131 * | 131 * |
132 * If fWritePath has been specified, the result of the work will be written
to that dir. | 132 * If fWritePath has been specified, the result of the work will be written
to that dir. |
133 * If fMismatchPath has been specified, and the actual image result differs
from its | 133 * If fMismatchPath has been specified, and the actual image result differs
from its |
134 * expectation, the result of the work will be written to that dir. | 134 * expectation, the result of the work will be written to that dir. |
135 * | 135 * |
136 * @param out If non-null, the implementing subclass MAY allocate an SkBitma
p, copy the | 136 * @param out If non-null, the implementing subclass MAY allocate an SkBitma
p, copy the |
137 * output image into it, and return it here. (Some subclasses ig
nore this parameter) | 137 * output image into it, and return it here. (Some subclasses ig
nore this parameter) |
138 * @return bool True if rendering succeeded and, if fWritePath had been spec
ified, the output | 138 * @return bool True if rendering succeeded and, if fWritePath had been spec
ified, the output |
139 * was successfully written to a file. | 139 * was successfully written to a file. |
140 */ | 140 */ |
141 virtual bool render(SkBitmap** out = NULL) = 0; | 141 virtual bool render(SkBitmap** out = nullptr) = 0; |
142 | 142 |
143 /** | 143 /** |
144 * Called once finished with a particular SkPicture, before calling init aga
in, and before | 144 * Called once finished with a particular SkPicture, before calling init aga
in, and before |
145 * being done with this Renderer. | 145 * being done with this Renderer. |
146 */ | 146 */ |
147 virtual void end(); | 147 virtual void end(); |
148 | 148 |
149 /** | 149 /** |
150 * If this PictureRenderer is actually a TiledPictureRender, return a pointe
r to this as a | 150 * If this PictureRenderer is actually a TiledPictureRender, return a pointe
r to this as a |
151 * TiledPictureRender so its methods can be called. | 151 * TiledPictureRender so its methods can be called. |
152 */ | 152 */ |
153 virtual TiledPictureRenderer* getTiledRenderer() { return NULL; } | 153 virtual TiledPictureRenderer* getTiledRenderer() { return nullptr; } |
154 | 154 |
155 /** | 155 /** |
156 * Resets the GPU's state. Does nothing if the backing is raster. For a GPU
renderer, calls | 156 * Resets the GPU's state. Does nothing if the backing is raster. For a GPU
renderer, calls |
157 * flush, swapBuffers and, if callFinish is true, finish. | 157 * flush, swapBuffers and, if callFinish is true, finish. |
158 * @param callFinish Whether to call finish. | 158 * @param callFinish Whether to call finish. |
159 */ | 159 */ |
160 void resetState(bool callFinish); | 160 void resetState(bool callFinish); |
161 | 161 |
162 /** | 162 /** |
163 * Remove all decoded textures from the CPU caches and all uploaded textures | 163 * Remove all decoded textures from the CPU caches and all uploaded textures |
164 * from the GPU. | 164 * from the GPU. |
165 */ | 165 */ |
166 void purgeTextures(); | 166 void purgeTextures(); |
167 | 167 |
168 /** | 168 /** |
169 * Set the backend type. Returns true on success and false on failure. | 169 * Set the backend type. Returns true on success and false on failure. |
170 */ | 170 */ |
171 #if SK_SUPPORT_GPU | 171 #if SK_SUPPORT_GPU |
172 bool setDeviceType(SkDeviceTypes deviceType, GrGLStandard gpuAPI = kNone_GrG
LStandard) { | 172 bool setDeviceType(SkDeviceTypes deviceType, GrGLStandard gpuAPI = kNone_GrG
LStandard) { |
173 #else | 173 #else |
174 bool setDeviceType(SkDeviceTypes deviceType) { | 174 bool setDeviceType(SkDeviceTypes deviceType) { |
175 #endif | 175 #endif |
176 fDeviceType = deviceType; | 176 fDeviceType = deviceType; |
177 #if SK_SUPPORT_GPU | 177 #if SK_SUPPORT_GPU |
178 // In case this function is called more than once | 178 // In case this function is called more than once |
179 SkSafeUnref(fGrContext); | 179 SkSafeUnref(fGrContext); |
180 fGrContext = NULL; | 180 fGrContext = nullptr; |
181 // Set to Native so it will have an initial value. | 181 // Set to Native so it will have an initial value. |
182 GrContextFactory::GLContextType glContextType = GrContextFactory::kNativ
e_GLContextType; | 182 GrContextFactory::GLContextType glContextType = GrContextFactory::kNativ
e_GLContextType; |
183 #endif | 183 #endif |
184 switch(deviceType) { | 184 switch(deviceType) { |
185 case kBitmap_DeviceType: | 185 case kBitmap_DeviceType: |
186 return true; | 186 return true; |
187 #if SK_SUPPORT_GPU | 187 #if SK_SUPPORT_GPU |
188 case kGPU_DeviceType: | 188 case kGPU_DeviceType: |
189 // Already set to GrContextFactory::kNative_GLContextType, above
. | 189 // Already set to GrContextFactory::kNative_GLContextType, above
. |
190 break; | 190 break; |
(...skipping 10 matching lines...) Expand all Loading... |
201 glContextType = GrContextFactory::kMESA_GLContextType; | 201 glContextType = GrContextFactory::kMESA_GLContextType; |
202 break; | 202 break; |
203 #endif | 203 #endif |
204 #endif | 204 #endif |
205 default: | 205 default: |
206 // Invalid device type. | 206 // Invalid device type. |
207 return false; | 207 return false; |
208 } | 208 } |
209 #if SK_SUPPORT_GPU | 209 #if SK_SUPPORT_GPU |
210 fGrContext = fGrContextFactory.get(glContextType, gpuAPI); | 210 fGrContext = fGrContextFactory.get(glContextType, gpuAPI); |
211 if (NULL == fGrContext) { | 211 if (nullptr == fGrContext) { |
212 return false; | 212 return false; |
213 } else { | 213 } else { |
214 fGrContext->ref(); | 214 fGrContext->ref(); |
215 return true; | 215 return true; |
216 } | 216 } |
217 #endif | 217 #endif |
218 } | 218 } |
219 | 219 |
220 #if SK_SUPPORT_GPU | 220 #if SK_SUPPORT_GPU |
221 void setSampleCount(int sampleCount) { | 221 void setSampleCount(int sampleCount) { |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
383 case kAngle_DeviceType: | 383 case kAngle_DeviceType: |
384 glContextType = GrContextFactory::kANGLE_GLContextType; | 384 glContextType = GrContextFactory::kANGLE_GLContextType; |
385 break; | 385 break; |
386 #endif | 386 #endif |
387 #if SK_MESA | 387 #if SK_MESA |
388 case kMesa_DeviceType: | 388 case kMesa_DeviceType: |
389 glContextType = GrContextFactory::kMESA_GLContextType; | 389 glContextType = GrContextFactory::kMESA_GLContextType; |
390 break; | 390 break; |
391 #endif | 391 #endif |
392 default: | 392 default: |
393 return NULL; | 393 return nullptr; |
394 } | 394 } |
395 return fGrContextFactory.getGLContext(glContextType); | 395 return fGrContextFactory.getGLContext(glContextType); |
396 } | 396 } |
397 | 397 |
398 GrContext* getGrContext() { | 398 GrContext* getGrContext() { |
399 return fGrContext; | 399 return fGrContext; |
400 } | 400 } |
401 | 401 |
402 const GrContextOptions& getGrContextOptions() { | 402 const GrContextOptions& getGrContextOptions() { |
403 return fGrContextFactory.getGlobalOptions(); | 403 return fGrContextFactory.getGlobalOptions(); |
404 } | 404 } |
405 #endif | 405 #endif |
406 | 406 |
407 SkCanvas* getCanvas() { | 407 SkCanvas* getCanvas() { |
408 return fCanvas; | 408 return fCanvas; |
409 } | 409 } |
410 | 410 |
411 const SkPicture* getPicture() { | 411 const SkPicture* getPicture() { |
412 return fPicture; | 412 return fPicture; |
413 } | 413 } |
414 | 414 |
415 #if SK_SUPPORT_GPU | 415 #if SK_SUPPORT_GPU |
416 explicit PictureRenderer(const GrContextOptions &opts) | 416 explicit PictureRenderer(const GrContextOptions &opts) |
417 #else | 417 #else |
418 PictureRenderer() | 418 PictureRenderer() |
419 #endif | 419 #endif |
420 : fJsonSummaryPtr(NULL) | 420 : fJsonSummaryPtr(nullptr) |
421 , fDeviceType(kBitmap_DeviceType) | 421 , fDeviceType(kBitmap_DeviceType) |
422 , fEnableWrites(false) | 422 , fEnableWrites(false) |
423 , fBBoxHierarchyType(kNone_BBoxHierarchyType) | 423 , fBBoxHierarchyType(kNone_BBoxHierarchyType) |
424 , fHasDrawFilters(false) | 424 , fHasDrawFilters(false) |
425 , fScaleFactor(SK_Scalar1) | 425 , fScaleFactor(SK_Scalar1) |
426 #if SK_SUPPORT_GPU | 426 #if SK_SUPPORT_GPU |
427 , fGrContextFactory(opts) | 427 , fGrContextFactory(opts) |
428 , fGrContext(NULL) | 428 , fGrContext(nullptr) |
429 , fSampleCount(0) | 429 , fSampleCount(0) |
430 , fUseDFText(false) | 430 , fUseDFText(false) |
431 #endif | 431 #endif |
432 { | 432 { |
433 sk_bzero(fDrawFilters, sizeof(fDrawFilters)); | 433 sk_bzero(fDrawFilters, sizeof(fDrawFilters)); |
434 fViewport.set(0, 0); | 434 fViewport.set(0, 0); |
435 } | 435 } |
436 | 436 |
437 #if SK_SUPPORT_GPU | 437 #if SK_SUPPORT_GPU |
438 virtual ~PictureRenderer() { | 438 virtual ~PictureRenderer() { |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
474 * Scales the provided canvas to the scale factor set by setScaleFactor. | 474 * Scales the provided canvas to the scale factor set by setScaleFactor. |
475 */ | 475 */ |
476 void scaleToScaleFactor(SkCanvas*); | 476 void scaleToScaleFactor(SkCanvas*); |
477 | 477 |
478 SkBBHFactory* getFactory(); | 478 SkBBHFactory* getFactory(); |
479 uint32_t recordFlags() const { return 0; } | 479 uint32_t recordFlags() const { return 0; } |
480 SkCanvas* setupCanvas(); | 480 SkCanvas* setupCanvas(); |
481 virtual SkCanvas* setupCanvas(int width, int height); | 481 virtual SkCanvas* setupCanvas(int width, int height); |
482 | 482 |
483 /** | 483 /** |
484 * Copy src to dest; if src==NULL, set dest to empty string. | 484 * Copy src to dest; if src==nullptr, set dest to empty string. |
485 */ | 485 */ |
486 static void CopyString(SkString* dest, const SkString* src); | 486 static void CopyString(SkString* dest, const SkString* src); |
487 | 487 |
488 private: | 488 private: |
489 SkISize fViewport; | 489 SkISize fViewport; |
490 SkScalar fScaleFactor; | 490 SkScalar fScaleFactor; |
491 #if SK_SUPPORT_GPU | 491 #if SK_SUPPORT_GPU |
492 GrContextFactory fGrContextFactory; | 492 GrContextFactory fGrContextFactory; |
493 GrContext* fGrContext; | 493 GrContext* fGrContext; |
494 int fSampleCount; | 494 int fSampleCount; |
495 bool fUseDFText; | 495 bool fUseDFText; |
496 #endif | 496 #endif |
497 | 497 |
498 virtual SkString getConfigNameInternal() = 0; | 498 virtual SkString getConfigNameInternal() = 0; |
499 | 499 |
500 typedef SkRefCnt INHERITED; | 500 typedef SkRefCnt INHERITED; |
501 }; | 501 }; |
502 | 502 |
503 /** | 503 /** |
504 * This class does not do any rendering, but its render function executes record
ing, which we want | 504 * This class does not do any rendering, but its render function executes record
ing, which we want |
505 * to time. | 505 * to time. |
506 */ | 506 */ |
507 class RecordPictureRenderer : public PictureRenderer { | 507 class RecordPictureRenderer : public PictureRenderer { |
508 public: | 508 public: |
509 #if SK_SUPPORT_GPU | 509 #if SK_SUPPORT_GPU |
510 RecordPictureRenderer(const GrContextOptions &opts) : INHERITED(opts) { } | 510 RecordPictureRenderer(const GrContextOptions &opts) : INHERITED(opts) { } |
511 #endif | 511 #endif |
512 | 512 |
513 bool render(SkBitmap** out = NULL) override; | 513 bool render(SkBitmap** out = nullptr) override; |
514 | 514 |
515 SkString getPerIterTimeFormat() override { return SkString("%.4f"); } | 515 SkString getPerIterTimeFormat() override { return SkString("%.4f"); } |
516 | 516 |
517 SkString getNormalTimeFormat() override { return SkString("%6.4f"); } | 517 SkString getNormalTimeFormat() override { return SkString("%6.4f"); } |
518 | 518 |
519 protected: | 519 protected: |
520 SkCanvas* setupCanvas(int width, int height) override; | 520 SkCanvas* setupCanvas(int width, int height) override; |
521 | 521 |
522 private: | 522 private: |
523 SkString getConfigNameInternal() override; | 523 SkString getConfigNameInternal() override; |
524 | 524 |
525 typedef PictureRenderer INHERITED; | 525 typedef PictureRenderer INHERITED; |
526 }; | 526 }; |
527 | 527 |
528 class PipePictureRenderer : public PictureRenderer { | 528 class PipePictureRenderer : public PictureRenderer { |
529 public: | 529 public: |
530 #if SK_SUPPORT_GPU | 530 #if SK_SUPPORT_GPU |
531 PipePictureRenderer(const GrContextOptions &opts) : INHERITED(opts) { } | 531 PipePictureRenderer(const GrContextOptions &opts) : INHERITED(opts) { } |
532 #endif | 532 #endif |
533 | 533 |
534 bool render(SkBitmap** out = NULL) override; | 534 bool render(SkBitmap** out = nullptr) override; |
535 | 535 |
536 private: | 536 private: |
537 SkString getConfigNameInternal() override; | 537 SkString getConfigNameInternal() override; |
538 | 538 |
539 typedef PictureRenderer INHERITED; | 539 typedef PictureRenderer INHERITED; |
540 }; | 540 }; |
541 | 541 |
542 class SimplePictureRenderer : public PictureRenderer { | 542 class SimplePictureRenderer : public PictureRenderer { |
543 public: | 543 public: |
544 #if SK_SUPPORT_GPU | 544 #if SK_SUPPORT_GPU |
545 SimplePictureRenderer(const GrContextOptions &opts) : INHERITED(opts) { } | 545 SimplePictureRenderer(const GrContextOptions &opts) : INHERITED(opts) { } |
546 #endif | 546 #endif |
547 | 547 |
548 virtual void init(const SkPicture* pict, | 548 virtual void init(const SkPicture* pict, |
549 const SkString* writePath, | 549 const SkString* writePath, |
550 const SkString* mismatchPath, | 550 const SkString* mismatchPath, |
551 const SkString* inputFilename, | 551 const SkString* inputFilename, |
552 bool useChecksumBasedFilenames, | 552 bool useChecksumBasedFilenames, |
553 bool useMultiPictureDraw) override; | 553 bool useMultiPictureDraw) override; |
554 | 554 |
555 bool render(SkBitmap** out = NULL) override; | 555 bool render(SkBitmap** out = nullptr) override; |
556 | 556 |
557 private: | 557 private: |
558 SkString getConfigNameInternal() override; | 558 SkString getConfigNameInternal() override; |
559 | 559 |
560 typedef PictureRenderer INHERITED; | 560 typedef PictureRenderer INHERITED; |
561 }; | 561 }; |
562 | 562 |
563 class TiledPictureRenderer : public PictureRenderer { | 563 class TiledPictureRenderer : public PictureRenderer { |
564 public: | 564 public: |
565 #if SK_SUPPORT_GPU | 565 #if SK_SUPPORT_GPU |
566 TiledPictureRenderer(const GrContextOptions &opts); | 566 TiledPictureRenderer(const GrContextOptions &opts); |
567 #else | 567 #else |
568 TiledPictureRenderer(); | 568 TiledPictureRenderer(); |
569 #endif | 569 #endif |
570 | 570 |
571 virtual void init(const SkPicture* pict, | 571 virtual void init(const SkPicture* pict, |
572 const SkString* writePath, | 572 const SkString* writePath, |
573 const SkString* mismatchPath, | 573 const SkString* mismatchPath, |
574 const SkString* inputFilename, | 574 const SkString* inputFilename, |
575 bool useChecksumBasedFilenames, | 575 bool useChecksumBasedFilenames, |
576 bool useMultiPictureDraw) override; | 576 bool useMultiPictureDraw) override; |
577 | 577 |
578 /** | 578 /** |
579 * Renders to tiles, rather than a single canvas. | 579 * Renders to tiles, rather than a single canvas. |
580 * If fWritePath was provided, a separate file is | 580 * If fWritePath was provided, a separate file is |
581 * created for each tile, named "path0.png", "path1.png", etc. | 581 * created for each tile, named "path0.png", "path1.png", etc. |
582 */ | 582 */ |
583 bool render(SkBitmap** out = NULL) override; | 583 bool render(SkBitmap** out = nullptr) override; |
584 | 584 |
585 void end() override; | 585 void end() override; |
586 | 586 |
587 void setTileWidth(int width) { | 587 void setTileWidth(int width) { |
588 fTileWidth = width; | 588 fTileWidth = width; |
589 } | 589 } |
590 | 590 |
591 int getTileWidth() const { | 591 int getTileWidth() const { |
592 return fTileWidth; | 592 return fTileWidth; |
593 } | 593 } |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
696 * into an SkPicturePlayback, which we want to time. | 696 * into an SkPicturePlayback, which we want to time. |
697 */ | 697 */ |
698 class PlaybackCreationRenderer : public PictureRenderer { | 698 class PlaybackCreationRenderer : public PictureRenderer { |
699 public: | 699 public: |
700 #if SK_SUPPORT_GPU | 700 #if SK_SUPPORT_GPU |
701 PlaybackCreationRenderer(const GrContextOptions &opts) : INHERITED(opts) { } | 701 PlaybackCreationRenderer(const GrContextOptions &opts) : INHERITED(opts) { } |
702 #endif | 702 #endif |
703 | 703 |
704 void setup() override; | 704 void setup() override; |
705 | 705 |
706 bool render(SkBitmap** out = NULL) override; | 706 bool render(SkBitmap** out = nullptr) override; |
707 | 707 |
708 SkString getPerIterTimeFormat() override { return SkString("%.4f"); } | 708 SkString getPerIterTimeFormat() override { return SkString("%.4f"); } |
709 | 709 |
710 SkString getNormalTimeFormat() override { return SkString("%6.4f"); } | 710 SkString getNormalTimeFormat() override { return SkString("%6.4f"); } |
711 | 711 |
712 private: | 712 private: |
713 SkAutoTDelete<SkPictureRecorder> fRecorder; | 713 SkAutoTDelete<SkPictureRecorder> fRecorder; |
714 | 714 |
715 SkString getConfigNameInternal() override; | 715 SkString getConfigNameInternal() override; |
716 | 716 |
717 typedef PictureRenderer INHERITED; | 717 typedef PictureRenderer INHERITED; |
718 }; | 718 }; |
719 | 719 |
720 #if SK_SUPPORT_GPU | 720 #if SK_SUPPORT_GPU |
721 extern PictureRenderer* CreateGatherPixelRefsRenderer(const GrContextOptions& op
ts); | 721 extern PictureRenderer* CreateGatherPixelRefsRenderer(const GrContextOptions& op
ts); |
722 #else | 722 #else |
723 extern PictureRenderer* CreateGatherPixelRefsRenderer(); | 723 extern PictureRenderer* CreateGatherPixelRefsRenderer(); |
724 #endif | 724 #endif |
725 | 725 |
726 } | 726 } |
727 | 727 |
728 #endif // PictureRenderer_DEFINED | 728 #endif // PictureRenderer_DEFINED |
OLD | NEW |