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

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

Issue 1055123002: New names for SkPMFloat methods. (Closed) Base URL: https://skia.googlesource.com/skia@master
Patch Set: one more 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 | « src/core/SkPMFloat.h ('k') | src/effects/SkColorMatrixFilter.cpp » ('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 /* 2 /*
3 * Copyright 2006 The Android Open Source Project 3 * Copyright 2006 The Android Open Source Project
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 #include "SkXfermode.h" 9 #include "SkXfermode.h"
10 #include "SkXfermode_opts_SSE2.h" 10 #include "SkXfermode_opts_SSE2.h"
(...skipping 798 matching lines...) Expand 10 before | Expand all | Expand 10 after
809 return true; 809 return true;
810 default: 810 default:
811 return false; 811 return false;
812 } 812 }
813 } 813 }
814 814
815 bool SkProcCoeffXfermode::isOpaque(SkXfermode::SrcColorOpacity opacityType) cons t { 815 bool SkProcCoeffXfermode::isOpaque(SkXfermode::SrcColorOpacity opacityType) cons t {
816 if (CANNOT_USE_COEFF == fSrcCoeff) { 816 if (CANNOT_USE_COEFF == fSrcCoeff) {
817 return false; 817 return false;
818 } 818 }
819 819
820 if (SkXfermode::kDA_Coeff == fSrcCoeff || SkXfermode::kDC_Coeff == fSrcCoeff || 820 if (SkXfermode::kDA_Coeff == fSrcCoeff || SkXfermode::kDC_Coeff == fSrcCoeff ||
821 SkXfermode::kIDA_Coeff == fSrcCoeff || SkXfermode::kIDC_Coeff == fSrcCoe ff) { 821 SkXfermode::kIDA_Coeff == fSrcCoeff || SkXfermode::kIDC_Coeff == fSrcCoe ff) {
822 return false; 822 return false;
823 } 823 }
824 824
825 switch (fDstCoeff) { 825 switch (fDstCoeff) {
826 case SkXfermode::kZero_Coeff: 826 case SkXfermode::kZero_Coeff:
827 return true; 827 return true;
828 case SkXfermode::kISA_Coeff: 828 case SkXfermode::kISA_Coeff:
829 return SkXfermode::kOpaque_SrcColorOpacity == opacityType; 829 return SkXfermode::kOpaque_SrcColorOpacity == opacityType;
830 case SkXfermode::kSA_Coeff: 830 case SkXfermode::kSA_Coeff:
831 return SkXfermode::kTransparentBlack_SrcColorOpacity == opacityType || 831 return SkXfermode::kTransparentBlack_SrcColorOpacity == opacityType ||
832 SkXfermode::kTransparentAlpha_SrcColorOpacity == opacityType; 832 SkXfermode::kTransparentAlpha_SrcColorOpacity == opacityType;
833 case SkXfermode::kSC_Coeff: 833 case SkXfermode::kSC_Coeff:
834 return SkXfermode::kTransparentBlack_SrcColorOpacity == opacityType; 834 return SkXfermode::kTransparentBlack_SrcColorOpacity == opacityType;
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
1209 * 1209 *
1210 * If we know we're going to write-out the values as bytes, we can relax these somewhat, 1210 * If we know we're going to write-out the values as bytes, we can relax these somewhat,
1211 * since we only really need to enforce that the bytes are valid premul... 1211 * since we only really need to enforce that the bytes are valid premul...
1212 * 1212 *
1213 * To that end, this method asserts that the resulting pmcolor will be valid, b ut does not call 1213 * To that end, this method asserts that the resulting pmcolor will be valid, b ut does not call
1214 * SkPMFloat::isValid(), as that would fire sometimes, but not result in a bad pixel. 1214 * SkPMFloat::isValid(), as that would fire sometimes, but not result in a bad pixel.
1215 */ 1215 */
1216 static inline SkPMFloat check_as_pmfloat(const Sk4f& value) { 1216 static inline SkPMFloat check_as_pmfloat(const Sk4f& value) {
1217 SkPMFloat pm = value; 1217 SkPMFloat pm = value;
1218 #ifdef SK_DEBUG 1218 #ifdef SK_DEBUG
1219 (void)pm.get(); 1219 (void)pm.round();
1220 #endif 1220 #endif
1221 return pm; 1221 return pm;
1222 } 1222 }
1223 1223
1224 // kSrcATop_Mode, //!< [Da, Sc * Da + (1 - Sa) * Dc] 1224 // kSrcATop_Mode, //!< [Da, Sc * Da + (1 - Sa) * Dc]
1225 struct SrcATop4f { 1225 struct SrcATop4f {
1226 static SkPMFloat Xfer(const SkPMFloat& src, const SkPMFloat& dst) { 1226 static SkPMFloat Xfer(const SkPMFloat& src, const SkPMFloat& dst) {
1227 const Sk4f inv255(gInv255); 1227 const Sk4f inv255(gInv255);
1228 Sk4f s4 = src; 1228 Sk4f s4 = src;
1229 Sk4f d4 = dst; 1229 Sk4f d4 = dst;
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1291 static const bool kFoldCoverageIntoSrcAlpha = true; 1291 static const bool kFoldCoverageIntoSrcAlpha = true;
1292 static const SkXfermode::Mode kMode = SkXfermode::kScreen_Mode; 1292 static const SkXfermode::Mode kMode = SkXfermode::kScreen_Mode;
1293 }; 1293 };
1294 1294
1295 template <typename ProcType> 1295 template <typename ProcType>
1296 class SkT4fXfermode : public SkProcCoeffXfermode { 1296 class SkT4fXfermode : public SkProcCoeffXfermode {
1297 public: 1297 public:
1298 static SkXfermode* Create(const ProcCoeff& rec) { 1298 static SkXfermode* Create(const ProcCoeff& rec) {
1299 return SkNEW_ARGS(SkT4fXfermode, (rec)); 1299 return SkNEW_ARGS(SkT4fXfermode, (rec));
1300 } 1300 }
1301 1301
1302 void xfer32(SkPMColor dst[], const SkPMColor src[], int n, const SkAlpha aa[ ]) const override { 1302 void xfer32(SkPMColor dst[], const SkPMColor src[], int n, const SkAlpha aa[ ]) const override {
1303 if (NULL == aa) { 1303 if (NULL == aa) {
1304 while (n & 3) { 1304 while (n & 3) {
1305 *dst = ProcType::Xfer(SkPMFloat(*src++), SkPMFloat(*dst)).get(); 1305 *dst = ProcType::Xfer(SkPMFloat(*src++), SkPMFloat(*dst)).round( );
1306 dst++; 1306 dst++;
1307 n -= 1; 1307 n -= 1;
1308 } 1308 }
1309 n >>= 2; 1309 n >>= 2;
1310 for (int i = 0; i < n; ++i) { 1310 for (int i = 0; i < n; ++i) {
1311 SkPMFloat s0, s1, s2, s3; 1311 SkPMFloat s0, s1, s2, s3;
1312 SkPMFloat::From4PMColors(src, &s0, &s1, &s2, &s3); 1312 SkPMFloat::From4PMColors(src, &s0, &s1, &s2, &s3);
1313 SkPMFloat d0, d1, d2, d3; 1313 SkPMFloat d0, d1, d2, d3;
1314 SkPMFloat::From4PMColors(dst, &d0, &d1, &d2, &d3); 1314 SkPMFloat::From4PMColors(dst, &d0, &d1, &d2, &d3);
1315 SkPMFloat::To4PMColors(ProcType::Xfer(s0, d0), ProcType::Xfer(s1 , d1), 1315 SkPMFloat::RoundTo4PMColors(ProcType::Xfer(s0, d0), ProcType::Xf er(s1, d1),
1316 ProcType::Xfer(s2, d2), ProcType::Xfer(s3 , d3), dst); 1316 ProcType::Xfer(s2, d2), ProcType::Xf er(s3, d3), dst);
1317 src += 4; 1317 src += 4;
1318 dst += 4; 1318 dst += 4;
1319 } 1319 }
1320 } else { 1320 } else {
1321 for (int i = 0; i < n; ++i) { 1321 for (int i = 0; i < n; ++i) {
1322 const Sk4f aa4 = Sk4f(aa[i] * gInv255); 1322 const Sk4f aa4 = Sk4f(aa[i] * gInv255);
1323 SkPMFloat dstF(dst[i]); 1323 SkPMFloat dstF(dst[i]);
1324 SkPMFloat srcF(src[i]); 1324 SkPMFloat srcF(src[i]);
1325 Sk4f res; 1325 Sk4f res;
1326 if (ProcType::kFoldCoverageIntoSrcAlpha) { 1326 if (ProcType::kFoldCoverageIntoSrcAlpha) {
1327 Sk4f src4 = srcF; 1327 Sk4f src4 = srcF;
1328 res = ProcType::Xfer(src4 * aa4, dstF); 1328 res = ProcType::Xfer(src4 * aa4, dstF);
1329 } else { 1329 } else {
1330 res = ramp(dstF, ProcType::Xfer(srcF, dstF), aa4); 1330 res = ramp(dstF, ProcType::Xfer(srcF, dstF), aa4);
1331 } 1331 }
1332 dst[i] = SkPMFloat(res).get(); 1332 dst[i] = SkPMFloat(res).round();
1333 } 1333 }
1334 } 1334 }
1335 } 1335 }
1336 1336
1337 private: 1337 private:
1338 SkT4fXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, ProcType::kMo de) {} 1338 SkT4fXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, ProcType::kMo de) {}
1339 1339
1340 typedef SkProcCoeffXfermode INHERITED; 1340 typedef SkProcCoeffXfermode INHERITED;
1341 }; 1341 };
1342 #endif 1342 #endif
1343 1343
1344 /////////////////////////////////////////////////////////////////////////////// 1344 ///////////////////////////////////////////////////////////////////////////////
1345 1345
1346 class SkDstOutXfermode : public SkProcCoeffXfermode { 1346 class SkDstOutXfermode : public SkProcCoeffXfermode {
1347 public: 1347 public:
1348 static SkDstOutXfermode* Create(const ProcCoeff& rec) { 1348 static SkDstOutXfermode* Create(const ProcCoeff& rec) {
1349 return SkNEW_ARGS(SkDstOutXfermode, (rec)); 1349 return SkNEW_ARGS(SkDstOutXfermode, (rec));
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after
1722 } else { 1722 } else {
1723 proc16 = rec.fProc16_General; 1723 proc16 = rec.fProc16_General;
1724 } 1724 }
1725 } 1725 }
1726 return proc16; 1726 return proc16;
1727 } 1727 }
1728 1728
1729 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode) 1729 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode)
1730 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode) 1730 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode)
1731 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END 1731 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
OLDNEW
« no previous file with comments | « src/core/SkPMFloat.h ('k') | src/effects/SkColorMatrixFilter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698