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

Side by Side Diff: skia/sgl/SkBitmapShader16BilerpTemplate.h

Issue 113827: Remove the remainder of the skia source code from the Chromium repo.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « skia/sgl/SkBitmapShader.cpp ('k') | skia/sgl/SkBitmapShaderTemplate.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /* libs/graphics/sgl/SkBitmapShader16BilerpTemplate.h
2 **
3 ** Copyright 2006, The Android Open Source Project
4 **
5 ** Licensed under the Apache License, Version 2.0 (the "License");
6 ** you may not use this file except in compliance with the License.
7 ** You may obtain a copy of the License at
8 **
9 ** http://www.apache.org/licenses/LICENSE-2.0
10 **
11 ** Unless required by applicable law or agreed to in writing, software
12 ** distributed under the License is distributed on an "AS IS" BASIS,
13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 ** See the License for the specific language governing permissions and
15 ** limitations under the License.
16 */
17
18 #include "SkFilterProc.h"
19
20 class BILERP_BITMAP16_SHADER_CLASS : public HasSpan16_Sampler_BitmapShader {
21 public:
22 BILERP_BITMAP16_SHADER_CLASS(const SkBitmap& src)
23 : HasSpan16_Sampler_BitmapShader(src, true,
24 SkShader::kClamp_TileMode,
25 SkShader::kClamp_TileMode)
26 {
27 }
28
29 virtual void shadeSpan(int x, int y, SkPMColor dstC[], int count)
30 {
31 SkASSERT(count > 0);
32
33 U8CPU alpha = this->getPaintAlpha();
34
35 const SkMatrix& inv = this->getTotalInverse();
36 const SkBitmap& srcBitmap = this->getSrcBitmap();
37 unsigned srcMaxX = srcBitmap.width() - 1;
38 unsigned srcMaxY = srcBitmap.height() - 1;
39 unsigned srcRB = srcBitmap.rowBytes();
40
41 BILERP_BITMAP16_SHADER_PREAMBLE(srcBitmap);
42
43 const SkFilterProc* proc_table = SkGetBilinearFilterProcTable();
44 const BILERP_BITMAP16_SHADER_TYPE* srcPixels = (const BILERP_BITMAP16_SH ADER_TYPE*)srcBitmap.getPixels();
45
46 if (this->getInverseClass() == kPerspective_MatrixClass)
47 {
48 SkPerspIter iter(inv, SkIntToScalar(x) + SK_ScalarHalf,
49 SkIntToScalar(y) + SK_ScalarHalf, count);
50 while ((count = iter.next()) != 0)
51 {
52 const SkFixed* srcXY = iter.getXY();
53 while (--count >= 0)
54 {
55 SkFixed fx = *srcXY++ - SK_FixedHalf;
56 SkFixed fy = *srcXY++ - SK_FixedHalf;
57 int ix = fx >> 16;
58 int iy = fy >> 16;
59 int x = SkClampMax(ix, srcMaxX);
60 int y = SkClampMax(iy, srcMaxY);
61
62 const BILERP_BITMAP16_SHADER_TYPE *p00, *p01, *p10, *p11;
63
64 p00 = p01 = ((const BILERP_BITMAP16_SHADER_TYPE*)((const cha r*)srcPixels + y * srcRB)) + x;
65 if ((unsigned)ix < srcMaxX)
66 p01 += 1;
67 p10 = p00;
68 p11 = p01;
69 if ((unsigned)iy < srcMaxY)
70 {
71 p10 = (const BILERP_BITMAP16_SHADER_TYPE*)((const char*) p10 + srcRB);
72 p11 = (const BILERP_BITMAP16_SHADER_TYPE*)((const char*) p11 + srcRB);
73 }
74
75 SkFilterProc proc = SkGetBilinearFilterProc(proc_table, fx, fy);
76 uint32_t c = proc(SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIX EL(*p00)),
77 SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIX EL(*p01)),
78 SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIX EL(*p10)),
79 SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIX EL(*p11)));
80
81 *dstC++ = expanded_rgb16_to_8888(c, alpha);
82 }
83 }
84 }
85 else // linear case
86 {
87 SkFixed fx, fy, dx, dy;
88
89 // now init fx, fy, dx, dy
90 {
91 SkPoint srcPt;
92 this->getInverseMapPtProc()(inv, SkIntToScalar(x) + SK_ScalarHal f,
93 SkIntToScalar(y) + SK_ScalarHal f, &srcPt);
94
95 fx = SkScalarToFixed(srcPt.fX) - SK_FixedHalf;
96 fy = SkScalarToFixed(srcPt.fY) - SK_FixedHalf;
97
98 if (this->getInverseClass() == kFixedStepInX_MatrixClass)
99 (void)inv.fixedStepInX(SkIntToScalar(y), &dx, &dy);
100 else
101 {
102 dx = SkScalarToFixed(inv.getScaleX());
103 dy = SkScalarToFixed(inv.getSkewY());
104 }
105 }
106
107 do {
108 int ix = fx >> 16;
109 int iy = fy >> 16;
110
111 const BILERP_BITMAP16_SHADER_TYPE *p00, *p01, *p10, *p11;
112
113 p00 = p01 = ((const BILERP_BITMAP16_SHADER_TYPE*)((const char*)s rcPixels +
114 SkClampMax(iy , srcMaxY) * srcRB)) +
115 SkClampMax(ix , srcMaxX);
116 if ((unsigned)ix < srcMaxX)
117 p01 += 1;
118 p10 = p00;
119 p11 = p01;
120 if ((unsigned)iy < srcMaxY)
121 {
122 p10 = (const BILERP_BITMAP16_SHADER_TYPE*)((const char*)p10 + srcRB);
123 p11 = (const BILERP_BITMAP16_SHADER_TYPE*)((const char*)p11 + srcRB);
124 }
125
126 SkFilterProc proc = SkGetBilinearFilterProc(proc_table, fx, fy);
127 uint32_t c = proc(SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIXEL(* p00)),
128 SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIXEL(* p01)),
129 SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIXEL(* p10)),
130 SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIXEL(* p11)));
131 *dstC++ = expanded_rgb16_to_8888(c, alpha);
132
133 fx += dx;
134 fy += dy;
135 } while (--count != 0);
136 }
137 BILERP_BITMAP16_SHADER_POSTAMBLE(srcBitmap);
138 }
139
140 virtual void shadeSpan16(int x, int y, uint16_t dstC[], int count)
141 {
142 SkASSERT(count > 0);
143
144 const SkMatrix& inv = this->getTotalInverse();
145 const SkBitmap& srcBitmap = this->getSrcBitmap();
146 unsigned srcMaxX = srcBitmap.width() - 1;
147 unsigned srcMaxY = srcBitmap.height() - 1;
148 unsigned srcRB = srcBitmap.rowBytes();
149
150 BILERP_BITMAP16_SHADER_PREAMBLE(srcBitmap);
151
152 const SkFilterProc* proc_table = SkGetBilinearFilterProcTable();
153 const BILERP_BITMAP16_SHADER_TYPE* srcPixels = (const BILERP_BITMAP16_SH ADER_TYPE*)srcBitmap.getPixels();
154
155 if (this->getInverseClass() == kPerspective_MatrixClass)
156 {
157 SkPerspIter iter(inv, SkIntToScalar(x) + SK_ScalarHalf,
158 SkIntToScalar(y) + SK_ScalarHalf, count);
159 while ((count = iter.next()) != 0)
160 {
161 const SkFixed* srcXY = iter.getXY();
162 while (--count >= 0)
163 {
164 SkFixed fx = *srcXY++ - SK_FixedHalf;
165 SkFixed fy = *srcXY++ - SK_FixedHalf;
166 int ix = fx >> 16;
167 int iy = fy >> 16;
168
169 const BILERP_BITMAP16_SHADER_TYPE *p00, *p01, *p10, *p11;
170
171 p00 = p01 = ((const BILERP_BITMAP16_SHADER_TYPE*)((const cha r*)srcPixels +
172 SkClampMax (iy, srcMaxY) * srcRB)) +
173 SkClampMax (ix, srcMaxX);
174 if ((unsigned)ix < srcMaxX)
175 p01 += 1;
176 p10 = p00;
177 p11 = p01;
178 if ((unsigned)iy < srcMaxY)
179 {
180 p10 = (const BILERP_BITMAP16_SHADER_TYPE*)((const char*) p10 + srcRB);
181 p11 = (const BILERP_BITMAP16_SHADER_TYPE*)((const char*) p11 + srcRB);
182 }
183
184 SkFilterProc proc = SkGetBilinearFilterProc(proc_table, fx, fy);
185 uint32_t c = proc(SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIX EL(*p00)),
186 SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIX EL(*p01)),
187 SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIX EL(*p10)),
188 SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIX EL(*p11)));
189 *dstC++ = SkCompact_rgb_16(c);
190 }
191 }
192 }
193 else // linear case
194 {
195 SkFixed fx, fy, dx, dy;
196
197 // now init fx, fy, dx, dy
198 {
199 SkPoint srcPt;
200 this->getInverseMapPtProc()(inv, SkIntToScalar(x) + SK_ScalarHal f,
201 SkIntToScalar(y) + SK_ScalarHal f, &srcPt);
202
203 fx = SkScalarToFixed(srcPt.fX) - SK_FixedHalf;
204 fy = SkScalarToFixed(srcPt.fY) - SK_FixedHalf;
205
206 if (this->getInverseClass() == kFixedStepInX_MatrixClass)
207 (void)inv.fixedStepInX(SkIntToScalar(y), &dx, &dy);
208 else
209 {
210 dx = SkScalarToFixed(inv.getScaleX());
211 dy = SkScalarToFixed(inv.getSkewY());
212 }
213 }
214
215 do {
216 int ix = fx >> 16;
217 int iy = fy >> 16;
218
219 const BILERP_BITMAP16_SHADER_TYPE *p00, *p01, *p10, *p11;
220
221 p00 = p01 = ((const BILERP_BITMAP16_SHADER_TYPE*)((const char*)s rcPixels +
222 SkClampMax(iy, srcMaxY) * srcRB)) +
223 SkClampMax(ix, srcMaxX);
224 if ((unsigned)ix < srcMaxX)
225 p01 += 1;
226 p10 = p00;
227 p11 = p01;
228 if ((unsigned)iy < srcMaxY)
229 {
230 p10 = (const BILERP_BITMAP16_SHADER_TYPE*)((const char*)p10 + srcRB);
231 p11 = (const BILERP_BITMAP16_SHADER_TYPE*)((const char*)p11 + srcRB);
232 }
233
234 SkFilterProc proc = SkGetBilinearFilterProc(proc_table, fx, fy);
235 uint32_t c = proc(SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIXEL(* p00)),
236 SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIXEL(* p01)),
237 SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIXEL(* p10)),
238 SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIXEL(* p11)));
239 *dstC++ = SkCompact_rgb_16(c);
240
241 fx += dx;
242 fy += dy;
243 } while (--count != 0);
244 }
245 BILERP_BITMAP16_SHADER_POSTAMBLE(srcBitmap);
246 }
247 };
248
249 #undef BILERP_BITMAP16_SHADER_CLASS
250 #undef BILERP_BITMAP16_SHADER_TYPE
251 #undef BILERP_BITMAP16_SHADER_PREAMBLE
252 #undef BILERP_BITMAP16_SHADER_PIXEL
253 #undef BILERP_BITMAP16_SHADER_POSTAMBLE
OLDNEW
« no previous file with comments | « skia/sgl/SkBitmapShader.cpp ('k') | skia/sgl/SkBitmapShaderTemplate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698