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

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

Issue 1085883002: change hairline procs to take array of points (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 8 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 | « no previous file | src/core/SkScan.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 #define __STDC_LIMIT_MACROS 7 #define __STDC_LIMIT_MACROS
8 8
9 #include "SkDraw.h" 9 #include "SkDraw.h"
10 #include "SkBlitter.h" 10 #include "SkBlitter.h"
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 int y = SkScalarFloorToInt(devPts[i].fY); 374 int y = SkScalarFloorToInt(devPts[i].fY);
375 if (rec.fClip->contains(x, y)) { 375 if (rec.fClip->contains(x, y)) {
376 blitter->blitH(x, y, 1); 376 blitter->blitH(x, y, 1);
377 } 377 }
378 } 378 }
379 } 379 }
380 380
381 static void bw_line_hair_proc(const PtProcRec& rec, const SkPoint devPts[], 381 static void bw_line_hair_proc(const PtProcRec& rec, const SkPoint devPts[],
382 int count, SkBlitter* blitter) { 382 int count, SkBlitter* blitter) {
383 for (int i = 0; i < count; i += 2) { 383 for (int i = 0; i < count; i += 2) {
384 SkScan::HairLine(devPts[i], devPts[i+1], *rec.fRC, blitter); 384 SkScan::HairLine(&devPts[i], 2, *rec.fRC, blitter);
385 } 385 }
386 } 386 }
387 387
388 static void bw_poly_hair_proc(const PtProcRec& rec, const SkPoint devPts[], 388 static void bw_poly_hair_proc(const PtProcRec& rec, const SkPoint devPts[],
389 int count, SkBlitter* blitter) { 389 int count, SkBlitter* blitter) {
390 for (int i = 0; i < count - 1; i++) { 390 SkScan::HairLine(devPts, count, *rec.fRC, blitter);
391 SkScan::HairLine(devPts[i], devPts[i+1], *rec.fRC, blitter);
392 }
393 } 391 }
394 392
395 // aa versions 393 // aa versions
396 394
397 static void aa_line_hair_proc(const PtProcRec& rec, const SkPoint devPts[], 395 static void aa_line_hair_proc(const PtProcRec& rec, const SkPoint devPts[],
398 int count, SkBlitter* blitter) { 396 int count, SkBlitter* blitter) {
399 for (int i = 0; i < count; i += 2) { 397 for (int i = 0; i < count; i += 2) {
400 SkScan::AntiHairLine(devPts[i], devPts[i+1], *rec.fRC, blitter); 398 SkScan::AntiHairLine(&devPts[i], 2, *rec.fRC, blitter);
401 } 399 }
402 } 400 }
403 401
404 static void aa_poly_hair_proc(const PtProcRec& rec, const SkPoint devPts[], 402 static void aa_poly_hair_proc(const PtProcRec& rec, const SkPoint devPts[],
405 int count, SkBlitter* blitter) { 403 int count, SkBlitter* blitter) {
406 for (int i = 0; i < count - 1; i++) { 404 SkScan::AntiHairLine(devPts, count, *rec.fRC, blitter);
407 SkScan::AntiHairLine(devPts[i], devPts[i+1], *rec.fRC, blitter);
408 }
409 } 405 }
410 406
411 // square procs (strokeWidth > 0 but matrix is square-scale (sx == sy) 407 // square procs (strokeWidth > 0 but matrix is square-scale (sx == sy)
412 408
413 static void bw_square_proc(const PtProcRec& rec, const SkPoint devPts[], 409 static void bw_square_proc(const PtProcRec& rec, const SkPoint devPts[],
414 int count, SkBlitter* blitter) { 410 int count, SkBlitter* blitter) {
415 const SkFixed radius = rec.fRadius; 411 const SkFixed radius = rec.fRadius;
416 for (int i = 0; i < count; i++) { 412 for (int i = 0; i < count; i++) {
417 SkFixed x = SkScalarToFixed(devPts[i].fX); 413 SkFixed x = SkScalarToFixed(devPts[i].fX);
418 SkFixed y = SkScalarToFixed(devPts[i].fY); 414 SkFixed y = SkScalarToFixed(devPts[i].fY);
(...skipping 1450 matching lines...) Expand 10 before | Expand all | Expand 10 after
1869 } 1865 }
1870 } 1866 }
1871 } 1867 }
1872 1868
1873 #if defined _WIN32 && _MSC_VER >= 1300 1869 #if defined _WIN32 && _MSC_VER >= 1300
1874 #pragma warning ( pop ) 1870 #pragma warning ( pop )
1875 #endif 1871 #endif
1876 1872
1877 /////////////////////////////////////////////////////////////////////////////// 1873 ///////////////////////////////////////////////////////////////////////////////
1878 1874
1879 typedef void (*HairProc)(SkPoint, SkPoint, const SkRasterClip&, SkBlitter*); 1875 static SkScan::HairRCProc ChooseHairProc(bool doAntiAlias) {
1880
1881 static HairProc ChooseHairProc(bool doAntiAlias) {
1882 return doAntiAlias ? SkScan::AntiHairLine : SkScan::HairLine; 1876 return doAntiAlias ? SkScan::AntiHairLine : SkScan::HairLine;
1883 } 1877 }
1884 1878
1885 static bool texture_to_matrix(const VertState& state, const SkPoint verts[], 1879 static bool texture_to_matrix(const VertState& state, const SkPoint verts[],
1886 const SkPoint texs[], SkMatrix* matrix) { 1880 const SkPoint texs[], SkMatrix* matrix) {
1887 SkPoint src[3], dst[3]; 1881 SkPoint src[3], dst[3];
1888 1882
1889 src[0] = texs[state.f0]; 1883 src[0] = texs[state.f0];
1890 src[1] = texs[state.f1]; 1884 src[1] = texs[state.f1];
1891 src[2] = texs[state.f2]; 1885 src[2] = texs[state.f2];
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
2137 } 2131 }
2138 } 2132 }
2139 2133
2140 SkPoint tmp[] = { 2134 SkPoint tmp[] = {
2141 devVerts[state.f0], devVerts[state.f1], devVerts[state.f2] 2135 devVerts[state.f0], devVerts[state.f1], devVerts[state.f2]
2142 }; 2136 };
2143 SkScan::FillTriangle(tmp, *fRC, blitter.get()); 2137 SkScan::FillTriangle(tmp, *fRC, blitter.get());
2144 } 2138 }
2145 } else { 2139 } else {
2146 // no colors[] and no texture, stroke hairlines with paint's color. 2140 // no colors[] and no texture, stroke hairlines with paint's color.
2147 HairProc hairProc = ChooseHairProc(paint.isAntiAlias()); 2141 SkScan::HairRCProc hairProc = ChooseHairProc(paint.isAntiAlias());
2148 const SkRasterClip& clip = *fRC; 2142 const SkRasterClip& clip = *fRC;
2149 while (vertProc(&state)) { 2143 while (vertProc(&state)) {
2150 hairProc(devVerts[state.f0], devVerts[state.f1], clip, blitter.get() ); 2144 SkPoint array[] = {
2151 hairProc(devVerts[state.f1], devVerts[state.f2], clip, blitter.get() ); 2145 devVerts[state.f0], devVerts[state.f1], devVerts[state.f2], devV erts[state.f0]
2152 hairProc(devVerts[state.f2], devVerts[state.f0], clip, blitter.get() ); 2146 };
2147 hairProc(array, 4, clip, blitter.get());
2153 } 2148 }
2154 } 2149 }
2155 } 2150 }
2156 2151
2157 /////////////////////////////////////////////////////////////////////////////// 2152 ///////////////////////////////////////////////////////////////////////////////
2158 /////////////////////////////////////////////////////////////////////////////// 2153 ///////////////////////////////////////////////////////////////////////////////
2159 2154
2160 #ifdef SK_DEBUG 2155 #ifdef SK_DEBUG
2161 2156
2162 void SkDraw::validate() const { 2157 void SkDraw::validate() const {
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
2268 mask->fImage = SkMask::AllocImage(size); 2263 mask->fImage = SkMask::AllocImage(size);
2269 memset(mask->fImage, 0, mask->computeImageSize()); 2264 memset(mask->fImage, 0, mask->computeImageSize());
2270 } 2265 }
2271 2266
2272 if (SkMask::kJustComputeBounds_CreateMode != mode) { 2267 if (SkMask::kJustComputeBounds_CreateMode != mode) {
2273 draw_into_mask(*mask, devPath, style); 2268 draw_into_mask(*mask, devPath, style);
2274 } 2269 }
2275 2270
2276 return true; 2271 return true;
2277 } 2272 }
OLDNEW
« no previous file with comments | « no previous file | src/core/SkScan.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698