gfx/skia/trunk/src/core/SkCoreBlitters.h

branch
TOR_BUG_9701
changeset 11
deefc01c0e14
equal deleted inserted replaced
-1:000000000000 0:c37989ea9a8a
1 /*
2 * Copyright 2006 The Android Open Source Project
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8 #ifndef SkCoreBlitters_DEFINED
9 #define SkCoreBlitters_DEFINED
10
11 #include "SkBitmapProcShader.h"
12 #include "SkBlitter.h"
13 #include "SkBlitRow.h"
14 #include "SkShader.h"
15 #include "SkSmallAllocator.h"
16
17 class SkRasterBlitter : public SkBlitter {
18 public:
19 SkRasterBlitter(const SkBitmap& device) : fDevice(device) {}
20
21 protected:
22 const SkBitmap& fDevice;
23
24 private:
25 typedef SkBlitter INHERITED;
26 };
27
28 class SkShaderBlitter : public SkRasterBlitter {
29 public:
30 SkShaderBlitter(const SkBitmap& device, const SkPaint& paint);
31 virtual ~SkShaderBlitter();
32
33 protected:
34 uint32_t fShaderFlags;
35 SkShader* fShader;
36
37 private:
38 // illegal
39 SkShaderBlitter& operator=(const SkShaderBlitter&);
40
41 typedef SkRasterBlitter INHERITED;
42 };
43
44 ///////////////////////////////////////////////////////////////////////////////
45
46 class SkA8_Coverage_Blitter : public SkRasterBlitter {
47 public:
48 SkA8_Coverage_Blitter(const SkBitmap& device, const SkPaint& paint);
49 virtual void blitH(int x, int y, int width) SK_OVERRIDE;
50 virtual void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]) SK_OVERRIDE;
51 virtual void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE;
52 virtual void blitRect(int x, int y, int width, int height) SK_OVERRIDE;
53 virtual void blitMask(const SkMask&, const SkIRect&) SK_OVERRIDE;
54 virtual const SkBitmap* justAnOpaqueColor(uint32_t*) SK_OVERRIDE;
55 };
56
57 class SkA8_Blitter : public SkRasterBlitter {
58 public:
59 SkA8_Blitter(const SkBitmap& device, const SkPaint& paint);
60 virtual void blitH(int x, int y, int width);
61 virtual void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]);
62 virtual void blitV(int x, int y, int height, SkAlpha alpha);
63 virtual void blitRect(int x, int y, int width, int height);
64 virtual void blitMask(const SkMask&, const SkIRect&);
65 virtual const SkBitmap* justAnOpaqueColor(uint32_t*);
66
67 private:
68 unsigned fSrcA;
69
70 // illegal
71 SkA8_Blitter& operator=(const SkA8_Blitter&);
72
73 typedef SkRasterBlitter INHERITED;
74 };
75
76 class SkA8_Shader_Blitter : public SkShaderBlitter {
77 public:
78 SkA8_Shader_Blitter(const SkBitmap& device, const SkPaint& paint);
79 virtual ~SkA8_Shader_Blitter();
80 virtual void blitH(int x, int y, int width);
81 virtual void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]);
82 virtual void blitMask(const SkMask&, const SkIRect&);
83
84 private:
85 SkXfermode* fXfermode;
86 SkPMColor* fBuffer;
87 uint8_t* fAAExpand;
88
89 // illegal
90 SkA8_Shader_Blitter& operator=(const SkA8_Shader_Blitter&);
91
92 typedef SkShaderBlitter INHERITED;
93 };
94
95 ////////////////////////////////////////////////////////////////
96
97 class SkARGB32_Blitter : public SkRasterBlitter {
98 public:
99 SkARGB32_Blitter(const SkBitmap& device, const SkPaint& paint);
100 virtual void blitH(int x, int y, int width);
101 virtual void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]);
102 virtual void blitV(int x, int y, int height, SkAlpha alpha);
103 virtual void blitRect(int x, int y, int width, int height);
104 virtual void blitMask(const SkMask&, const SkIRect&);
105 virtual const SkBitmap* justAnOpaqueColor(uint32_t*);
106
107 protected:
108 SkColor fColor;
109 SkPMColor fPMColor;
110 SkBlitRow::ColorProc fColor32Proc;
111 SkBlitRow::ColorRectProc fColorRect32Proc;
112
113 private:
114 unsigned fSrcA, fSrcR, fSrcG, fSrcB;
115
116 // illegal
117 SkARGB32_Blitter& operator=(const SkARGB32_Blitter&);
118
119 typedef SkRasterBlitter INHERITED;
120 };
121
122 class SkARGB32_Opaque_Blitter : public SkARGB32_Blitter {
123 public:
124 SkARGB32_Opaque_Blitter(const SkBitmap& device, const SkPaint& paint)
125 : INHERITED(device, paint) { SkASSERT(paint.getAlpha() == 0xFF); }
126 virtual void blitMask(const SkMask&, const SkIRect&);
127
128 private:
129 typedef SkARGB32_Blitter INHERITED;
130 };
131
132 class SkARGB32_Black_Blitter : public SkARGB32_Opaque_Blitter {
133 public:
134 SkARGB32_Black_Blitter(const SkBitmap& device, const SkPaint& paint)
135 : INHERITED(device, paint) {}
136 virtual void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]);
137
138 private:
139 typedef SkARGB32_Opaque_Blitter INHERITED;
140 };
141
142 class SkARGB32_Shader_Blitter : public SkShaderBlitter {
143 public:
144 SkARGB32_Shader_Blitter(const SkBitmap& device, const SkPaint& paint);
145 virtual ~SkARGB32_Shader_Blitter();
146 virtual void blitH(int x, int y, int width) SK_OVERRIDE;
147 virtual void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE;
148 virtual void blitRect(int x, int y, int width, int height) SK_OVERRIDE;
149 virtual void blitAntiH(int x, int y, const SkAlpha[], const int16_t[]) SK_OVERRIDE;
150 virtual void blitMask(const SkMask&, const SkIRect&) SK_OVERRIDE;
151
152 private:
153 SkXfermode* fXfermode;
154 SkPMColor* fBuffer;
155 SkBlitRow::Proc32 fProc32;
156 SkBlitRow::Proc32 fProc32Blend;
157 bool fShadeDirectlyIntoDevice;
158 bool fConstInY;
159
160 // illegal
161 SkARGB32_Shader_Blitter& operator=(const SkARGB32_Shader_Blitter&);
162
163 typedef SkShaderBlitter INHERITED;
164 };
165
166 ///////////////////////////////////////////////////////////////////////////////
167
168 /* These return the correct subclass of blitter for their device config.
169
170 Currently, they make the following assumptions about the state of the
171 paint:
172
173 1. If there is an xfermode, there will also be a shader
174 2. If there is a colorfilter, there will be a shader that itself handles
175 calling the filter, so the blitter can always ignore the colorfilter obj
176
177 These pre-conditions must be handled by the caller, in our case
178 SkBlitter::Choose(...)
179 */
180
181 SkBlitter* SkBlitter_ChooseD565(const SkBitmap& device, const SkPaint& paint,
182 SkTBlitterAllocator* allocator);
183
184 #endif

mercurial