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

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

Issue 429343004: Stopped skipping tests in dm of SkPatch (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 4 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
OLDNEW
1 /* 1 /*
2 * Copyright 2014 Google Inc. 2 * Copyright 2014 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 #include "SkPatch.h" 8 #include "SkPatch.h"
9 9
10 #include "SkGeometry.h" 10 #include "SkGeometry.h"
11 #include "SkColorPriv.h" 11 #include "SkColorPriv.h"
12 #include "SkBuffer.h"
12 13
13 //////////////////////////////////////////////////////////////////////////////// 14 ////////////////////////////////////////////////////////////////////////////////
14 15
15 /** 16 /**
16 * Evaluator to sample the values of a cubic bezier using forward differences. 17 * Evaluator to sample the values of a cubic bezier using forward differences.
17 * Forward differences is a method for evaluating a nth degree polynomial at a u niform step by only 18 * Forward differences is a method for evaluating a nth degree polynomial at a u niform step by only
18 * adding precalculated values. 19 * adding precalculated values.
19 * For a linear example we have the function f(t) = m*t+b, then the value of tha t function at t+h 20 * For a linear example we have the function f(t) = m*t+b, then the value of tha t function at t+h
20 * would be f(t+h) = m*(t+h)+b. If we want to know the uniform step that we must add to the first 21 * would be f(t+h) = m*(t+h)+b. If we want to know the uniform step that we must add to the first
21 * evaluation f(t) then we need to substract f(t+h) - f(t) = m*t + m*h + b - m*t + b = mh. After 22 * evaluation f(t) then we need to substract f(t+h) - f(t) = m*t + m*h + b - m*t + b = mh. After
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 return fPoints; 111 return fPoints;
111 } 112 }
112 113
113 private: 114 private:
114 int fMax, fCurrent, fDivisions; 115 int fMax, fCurrent, fDivisions;
115 SkPoint fFwDiff[4], fCoefs[4], fPoints[4]; 116 SkPoint fFwDiff[4], fCoefs[4], fPoints[4];
116 }; 117 };
117 118
118 //////////////////////////////////////////////////////////////////////////////// 119 ////////////////////////////////////////////////////////////////////////////////
119 120
120 SkPatch::SkPatch(SkPoint points[12], SkColor colors[4]) { 121 SkPatch::SkPatch(const SkPoint points[12], const SkColor colors[4]) {
121 122
122 for (int i = 0; i < 12; i++) { 123 for (int i = 0; i < 12; i++) {
123 fCtrlPoints[i] = points[i]; 124 fCtrlPoints[i] = points[i];
124 } 125 }
125 for (int i = 0; i < 4; i++) { 126 for (int i = 0; i < 4; i++) {
126 fCornerColors[i] = colors[i]; 127 fCornerColors[i] = colors[i];
127 } 128 }
128 129
129 } 130 }
130 131
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 data->fIndices[i + 3] = data->fIndices[i]; 230 data->fIndices[i + 3] = data->fIndices[i];
230 data->fIndices[i + 4] = data->fIndices[i + 2]; 231 data->fIndices[i + 4] = data->fIndices[i + 2];
231 data->fIndices[i + 5] = (x + 1) * stride + y; 232 data->fIndices[i + 5] = (x + 1) * stride + y;
232 } 233 }
233 v = SkScalarClampMax(v + 1.f / lodY, 1); 234 v = SkScalarClampMax(v + 1.f / lodY, 1);
234 } 235 }
235 u = SkScalarClampMax(u + 1.f / lodX, 1); 236 u = SkScalarClampMax(u + 1.f / lodX, 1);
236 } 237 }
237 return true; 238 return true;
238 } 239 }
240
241 size_t SkPatch::writeToMemory(void* storage) const {
robertphillips 2014/08/04 18:44:18 12 -> kNumControlPts ? 4 -> kNumCornerColors ?
dandov 2014/08/04 19:59:27 Added constants and use them where they are needed
242 int byteCount = 12 * sizeof(SkPoint) + 4 * sizeof(SkColor);
243
244 if (NULL == storage) {
245 return SkAlign4(byteCount);
246 }
247
248 SkWBuffer buffer(storage);
249
250 buffer.write(fCtrlPoints, 12 * sizeof(SkPoint));
251 buffer.write(fCornerColors, 4 * sizeof(SkColor));
252
253 buffer.padToAlign4();
254 return buffer.pos();
255 }
256
257 size_t SkPatch::readFromMemory(const void* storage, size_t length) {
258 SkRBufferWithSizeCheck buffer(storage, length);
259
260 int byteCount = 0;
261
robertphillips 2014/08/04 18:44:18 Can we not just read into fCtrlPoints & fCornerCol
dandov 2014/08/04 19:59:27 Done.
262 SkPoint pts[12];
263 if (!buffer.read(pts, 12 * sizeof(SkPoint))) {
264 return byteCount;
265 }
266 for (int i = 0; i < 12; i++) {
267 fCtrlPoints[i] = pts[i];
mtklein 2014/08/04 18:23:03 Is this redundant with this->reset(pts, colors) be
dandov 2014/08/04 19:59:27 Done. Changed it to read directly into fCtrlPoints
268 }
269 byteCount += 12 * sizeof(SkPoint);
270
271 SkColor colors[4];
272 if (!buffer.read(colors, 4 * sizeof(SkColor))) {
273 return byteCount;
274 }
275 for (int i = 0; i < 12; i++) {
276 fCtrlPoints[i] = pts[i];
mtklein 2014/08/04 18:23:03 Did you mean to copy the colors here?
dandov 2014/08/04 19:59:27 Also redundant because of this->reset, removed it
277 }
278 byteCount += 12 * sizeof(SkPoint);
279
280 this->reset(pts, colors);
281
282 return byteCount;
283 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698