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

Side by Side Diff: gm/SkLinearBitmapPipelineGM.cpp

Issue 1775963002: Bilerp + mirror + perspective (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Address comments. Created 4 years, 9 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 | « bench/SkLinearBitmapPipelineBench.cpp ('k') | gyp/core.gypi » ('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 2016 Google Inc. 2 * Copyright 2016 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 "gm.h" 8 #include "gm.h"
9 #include "SkBlitter.h" 9 #include "SkBlitter.h"
10 #include "SkCanvas.h" 10 #include "SkCanvas.h"
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 bmdst.allocN32Pixels(ir.width(), ir.height()); 53 bmdst.allocN32Pixels(ir.width(), ir.height());
54 bmdst.eraseColor(0xFFFFFFFF); 54 bmdst.eraseColor(0xFFFFFFFF);
55 SkPixmap pmdst; 55 SkPixmap pmdst;
56 bmdst.peekPixels(&pmdst); 56 bmdst.peekPixels(&pmdst);
57 57
58 SkImageInfo info = SkImageInfo::MakeN32Premul(ir.width(), ir.height(), kLine ar_SkColorProfileType); 58 SkImageInfo info = SkImageInfo::MakeN32Premul(ir.width(), ir.height(), kLine ar_SkColorProfileType);
59 59
60 sk_sp<SkImage> image(SkImage::MakeRasterCopy(SkPixmap(info, pmsrc.addr32(), pmsrc.rowBytes()))); 60 sk_sp<SkImage> image(SkImage::MakeRasterCopy(SkPixmap(info, pmsrc.addr32(), pmsrc.rowBytes())));
61 SkPaint paint; 61 SkPaint paint;
62 int32_t storage[300]; 62 int32_t storage[300];
63 paint.setShader(image->makeShader(SkShader::kClamp_TileMode, SkShader::kClam p_TileMode)); 63
64 sk_sp<SkShader> shader = image->makeShader(SkShader::kRepeat_TileMode,
65 SkShader::kRepeat_TileMode);
66
64 if (useBilerp) { 67 if (useBilerp) {
65 paint.setFilterQuality(SkFilterQuality::kLow_SkFilterQuality); 68 paint.setFilterQuality(SkFilterQuality::kLow_SkFilterQuality);
66 } else { 69 } else {
67 paint.setFilterQuality(SkFilterQuality::kNone_SkFilterQuality); 70 paint.setFilterQuality(SkFilterQuality::kNone_SkFilterQuality);
68 } 71 }
72 paint.setShader(std::move(shader));
69 const SkShader::ContextRec rec(paint, *mat, nullptr, 73 const SkShader::ContextRec rec(paint, *mat, nullptr,
70 SkBlitter::PreferredShaderDest(pmsrc.info())) ; 74 SkBlitter::PreferredShaderDest(pmsrc.info())) ;
71 SkASSERT(paint.getShader()->contextSize(rec) <= sizeof(storage)); 75 SkASSERT(paint.getShader()->contextSize(rec) <= sizeof(storage));
72 76
73 SkShader::Context* ctx = paint.getShader()->createContext(rec, storage); 77 SkShader::Context* ctx = paint.getShader()->createContext(rec, storage);
74 78
75 for (int y = 0; y < ir.height(); y++) { 79 for (int y = 0; y < ir.height(); y++) {
76 ctx->shadeSpan(0, y, pmdst.writable_addr32(0, y), ir.width()); 80 ctx->shadeSpan(0, y, pmdst.writable_addr32(0, y), ir.width());
77 } 81 }
78 82
79 canvas->drawBitmap(bmdst, r.left(), r.top(), nullptr); 83 canvas->drawBitmap(bmdst, r.left(), r.top(), nullptr);
80 84
81 ctx->~Context(); 85 ctx->~Context();
82
83 } 86 }
84 87
85 static void draw_rect_fp(SkCanvas* canvas, const SkRect& r, SkColor c, const SkM atrix* mat, bool useBilerp) { 88 static void draw_rect_fp(SkCanvas* canvas, const SkRect& r, SkColor c, const SkM atrix* mat, bool useBilerp) {
86 const SkIRect ir = r.round(); 89 const SkIRect ir = r.round();
87 90
88 SkBitmap bmsrc; 91 SkBitmap bmsrc;
89 fill_in_bits(bmsrc, ir, c, true); 92 fill_in_bits(bmsrc, ir, c, true);
90 SkPixmap pmsrc; 93 SkPixmap pmsrc;
91 bmsrc.peekPixels(&pmsrc); 94 bmsrc.peekPixels(&pmsrc);
92 95
(...skipping 17 matching lines...) Expand all
110 } 113 }
111 114
112 uint32_t flags = 0; 115 uint32_t flags = 0;
113 //if (kSRGB_SkColorProfileType == profile) { 116 //if (kSRGB_SkColorProfileType == profile) {
114 //flags |= SkXfermode::kDstIsSRGB_PM4fFlag; 117 //flags |= SkXfermode::kDstIsSRGB_PM4fFlag;
115 //} 118 //}
116 auto procN = SkXfermode::GetD32Proc(nullptr, flags); 119 auto procN = SkXfermode::GetD32Proc(nullptr, flags);
117 120
118 SkLinearBitmapPipeline pipeline{ 121 SkLinearBitmapPipeline pipeline{
119 inv, filterQuality, 122 inv, filterQuality,
120 SkShader::kClamp_TileMode, SkShader::kClamp_TileMode, pmsrc}; 123 SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode, 1.0f, pmsrc} ;
121 124
122 for (int y = 0; y < ir.height(); y++) { 125 for (int y = 0; y < ir.height(); y++) {
123 pipeline.shadeSpan4f(0, y, dstBits, ir.width()); 126 pipeline.shadeSpan4f(0, y, dstBits, ir.width());
124 procN(nullptr, pmdst.writable_addr32(0, y), dstBits, ir.width(), nullptr ); 127 procN(nullptr, pmdst.writable_addr32(0, y), dstBits, ir.width(), nullptr );
125 } 128 }
126 129
127 delete [] dstBits; 130 delete [] dstBits;
128 131
129 canvas->drawBitmap(bmdst, r.left(), r.top(), nullptr); 132 canvas->drawBitmap(bmdst, r.left(), r.top(), nullptr);
130 } 133 }
(...skipping 23 matching lines...) Expand all
154 canvas->translate(20, 20); 157 canvas->translate(20, 20);
155 158
156 SkMatrix mi = SkMatrix::I(); 159 SkMatrix mi = SkMatrix::I();
157 SkMatrix mlr; 160 SkMatrix mlr;
158 mlr.setScale(-1.0f, 1.0f, 20, 0.0f); 161 mlr.setScale(-1.0f, 1.0f, 20, 0.0f);
159 SkMatrix mt; 162 SkMatrix mt;
160 mt.setTranslate(8, 8); 163 mt.setTranslate(8, 8);
161 SkMatrix mt2; 164 SkMatrix mt2;
162 mt2.setTranslate(-18, -18); 165 mt2.setTranslate(-18, -18);
163 SkMatrix ms; 166 SkMatrix ms;
164 ms.setScale(2.7f, 2.7f); 167 ms.setScale(2.7f, 2.7f, -1.5f, 0);
165 SkMatrix ms2; 168 SkMatrix ms2;
166 ms2.setScale(-0.2f, 0.2f); 169 ms2.setScale(-0.4f, 0.4f);
167 SkMatrix mr; 170 SkMatrix mr;
168 mr.setRotate(10); 171 mr.setRotate(10);
169 172
170 const SkMatrix* mats[] = {nullptr, &mi, &mlr, &mt, &mt2, &ms, &ms2, &mr}; 173 const SkMatrix* mats[] = {nullptr, &mi, &mlr, &mt, &mt2, &ms, &ms2, &mr};
171 174
172 const SkRect r = SkRect::MakeWH(W, H); 175 const SkRect r = SkRect::MakeWH(W, H);
173 bool useBilerp = false; 176 bool useBilerp = false;
174 while (true) { 177 while (true) {
175 canvas->save(); 178 canvas->save();
176 for (auto mat : mats) { 179 for (auto mat : mats) {
(...skipping 15 matching lines...) Expand all
192 } 195 }
193 canvas->restore(); 196 canvas->restore();
194 canvas->translate(0, H + 20); 197 canvas->translate(0, H + 20);
195 } 198 }
196 canvas->restore(); 199 canvas->restore();
197 canvas->translate(0, (H + 20) * SK_ARRAY_COUNT(mats)); 200 canvas->translate(0, (H + 20) * SK_ARRAY_COUNT(mats));
198 if (useBilerp) break; 201 if (useBilerp) break;
199 useBilerp = true; 202 useBilerp = true;
200 } 203 }
201 } 204 }
OLDNEW
« no previous file with comments | « bench/SkLinearBitmapPipelineBench.cpp ('k') | gyp/core.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698