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

Side by Side Diff: src/core/SkBlitter_Sprite.cpp

Issue 2053823002: Make SkBlitter hierarchy explicit about what needs to be implemented. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 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/core/SkBlitter.cpp ('k') | src/core/SkLinearBitmapPipeline_sample.h » ('j') | 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 2006 The Android Open Source Project 2 * Copyright 2006 The Android Open Source Project
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 "SkOpts.h" 8 #include "SkOpts.h"
9 #include "SkSmallAllocator.h" 9 #include "SkSmallAllocator.h"
10 #include "SkSpriteBlitter.h" 10 #include "SkSpriteBlitter.h"
11 11
12 SkSpriteBlitter::SkSpriteBlitter(const SkPixmap& source) : fSource(source) {} 12 SkSpriteBlitter::SkSpriteBlitter(const SkPixmap& source)
13 : fSource(source) {}
13 14
14 void SkSpriteBlitter::setup(const SkPixmap& dst, int left, int top, const SkPain t& paint) { 15 void SkSpriteBlitter::setup(const SkPixmap& dst, int left, int top, const SkPain t& paint) {
15 fDst = dst; 16 fDst = dst;
16 fLeft = left; 17 fLeft = left;
17 fTop = top; 18 fTop = top;
18 fPaint = &paint; 19 fPaint = &paint;
19 } 20 }
20 21
21 #ifdef SK_DEBUG
22 void SkSpriteBlitter::blitH(int x, int y, int width) { 22 void SkSpriteBlitter::blitH(int x, int y, int width) {
23 SkDEBUGFAIL("how did we get here?"); 23 SkDEBUGFAIL("how did we get here?");
24
25 // Fallback to blitRect.
26 this->blitRect(x, y, width, 1);
24 } 27 }
25 28
26 void SkSpriteBlitter::blitAntiH(int x, int y, const SkAlpha antialias[], 29 void SkSpriteBlitter::blitAntiH(int x, int y, const SkAlpha antialias[], const i nt16_t runs[]) {
27 const int16_t runs[]) {
28 SkDEBUGFAIL("how did we get here?"); 30 SkDEBUGFAIL("how did we get here?");
31
32 // No fallback strategy.
29 } 33 }
30 34
31 void SkSpriteBlitter::blitV(int x, int y, int height, SkAlpha alpha) { 35 void SkSpriteBlitter::blitV(int x, int y, int height, SkAlpha alpha) {
32 SkDEBUGFAIL("how did we get here?"); 36 SkDEBUGFAIL("how did we get here?");
37
38 // Fall back to superclass if the code gets here in release mode.
39 INHERITED::blitV(x, y, height, alpha);
33 } 40 }
34 41
35 void SkSpriteBlitter::blitMask(const SkMask&, const SkIRect& clip) { 42 void SkSpriteBlitter::blitMask(const SkMask& mask, const SkIRect& clip) {
36 SkDEBUGFAIL("how did we get here?"); 43 SkDEBUGFAIL("how did we get here?");
44
45 // Fall back to superclass if the code gets here in release mode.
46 INHERITED::blitMask(mask, clip);
37 } 47 }
38 #endif
39 48
40 /////////////////////////////////////////////////////////////////////////////// 49 ///////////////////////////////////////////////////////////////////////////////
41 50
42 // Only valid if... 51 // Only valid if...
43 // 1. src == dst format 52 // 1. src == dst format
44 // 2. paint has no modifiers (i.e. alpha, colorfilter, etc.) 53 // 2. paint has no modifiers (i.e. alpha, colorfilter, etc.)
45 // 3. xfermode needs no blending: e.g. kSrc_Mode or kSrcOver_Mode + opaque src 54 // 3. xfermode needs no blending: e.g. kSrc_Mode or kSrcOver_Mode + opaque src
46 // 55 //
47 class SkSpriteBlitter_Src_SrcOver : public SkSpriteBlitter { 56 class SkSpriteBlitter_Src_SrcOver final : public SkSpriteBlitter {
48 public: 57 public:
49 static bool Supports(const SkPixmap& dst, const SkPixmap& src, const SkPaint & paint) { 58 static bool Supports(const SkPixmap& dst, const SkPixmap& src, const SkPaint & paint) {
50 if (dst.colorType() != src.colorType()) { 59 if (dst.colorType() != src.colorType()) {
51 return false; 60 return false;
52 } 61 }
53 if (dst.info().profileType() != src.info().profileType()) { 62 if (dst.info().profileType() != src.info().profileType()) {
54 return false; 63 return false;
55 } 64 }
56 if (paint.getMaskFilter() || paint.getColorFilter() || paint.getImageFil ter()) { 65 if (paint.getMaskFilter() || paint.getColorFilter() || paint.getImageFil ter()) {
57 return false; 66 return false;
(...skipping 15 matching lines...) Expand all
73 // At this point memcpy can't be used. The following check for using Src Over. 82 // At this point memcpy can't be used. The following check for using Src Over.
74 83
75 if (dst.colorType() != kN32_SkColorType 84 if (dst.colorType() != kN32_SkColorType
76 || dst.info().profileType() != kSRGB_SkColorProfileType) { 85 || dst.info().profileType() != kSRGB_SkColorProfileType) {
77 return false; 86 return false;
78 } 87 }
79 88
80 return SkXfermode::kSrcOver_Mode == mode; 89 return SkXfermode::kSrcOver_Mode == mode;
81 } 90 }
82 91
83 SkSpriteBlitter_Src_SrcOver(const SkPixmap& src) : INHERITED(src) {} 92 SkSpriteBlitter_Src_SrcOver(const SkPixmap& src)
93 : INHERITED(src) {}
84 94
85 void setup(const SkPixmap& dst, int left, int top, const SkPaint& paint) ove rride { 95 void setup(const SkPixmap& dst, int left, int top, const SkPaint& paint) ove rride {
86 SkASSERT(Supports(dst, fSource, paint)); 96 SkASSERT(Supports(dst, fSource, paint));
87 this->INHERITED::setup(dst, left, top, paint); 97 this->INHERITED::setup(dst, left, top, paint);
88 SkXfermode::Mode mode; 98 SkXfermode::Mode mode;
89 if (!SkXfermode::AsMode(paint.getXfermode(), &mode)) { 99 if (!SkXfermode::AsMode(paint.getXfermode(), &mode)) {
90 SkFAIL("Should never happen."); 100 SkFAIL("Should never happen.");
91 } 101 }
92 102
93 SkASSERT(mode == SkXfermode::kSrcOver_Mode || mode == SkXfermode::kSrc_M ode); 103 SkASSERT(mode == SkXfermode::kSrcOver_Mode || mode == SkXfermode::kSrc_M ode);
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 default: 187 default:
178 break; 188 break;
179 } 189 }
180 } 190 }
181 191
182 if (blitter) { 192 if (blitter) {
183 blitter->setup(dst, left, top, paint); 193 blitter->setup(dst, left, top, paint);
184 } 194 }
185 return blitter; 195 return blitter;
186 } 196 }
OLDNEW
« no previous file with comments | « src/core/SkBlitter.cpp ('k') | src/core/SkLinearBitmapPipeline_sample.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698